From c1fa355c1e9d4ffe6cfa8d92a578755cd72dda02 Mon Sep 17 00:00:00 2001 From: Bianey Palma Date: Tue, 20 Jun 2023 12:11:45 +0200 Subject: [PATCH] EUROMOD v3.6.2 Compared to previous release v.3.5.8, this software version includes the following updates/changes: - Core software: - Added a new table for External Statistics, which is used by the new Macrovalidation tool (see next section). - Fixed a bug in the Uprating Indices form where columns without any values were ignored. - Added the possibility of conditional uprating by regular expressions. - Improved the help file. - Applications: - New Macrovalidation tool to compare EUROMOD results with external statistics and SILC variables. - Hypothetical Household Tool (HHoT): - Updated HHoT files. - Fixed a bug related to derived variables using other variables that contained numbers in their name. - EUROMOD Statistics: - Unified the Statistics Presenter and the In-depth Analysis tools under a single button (EUROMOD Statistics). - Reorganised the Statistics Presenter templates to have tables grouped in a similar manner to In-depth Analysis. - Added multiple breakdowns to both Statistics Presenter templates and In-depth Analysis. - Allowed for file filtering when selecting the files for Statistics Presenter and In-depth Analysis. - Improved the Excel export of all statistics (added support for borders, bold, auto-column-width etc.). - Updated the UKMOD templates. IMPORTANT NOTE: if you are using custom templates in the Statistics Presenter, please note that the location for them has moved: - from c:\ProgramData\EUROMOD\Plugins\StatisticsPresenter\UserSelectableTemplates\ - to c:\ProgramData\EUROMOD\UserSelectableTemplates\ A list with the most notable changes can be found in the changelog.txt file located in the root. --- ...figure and run the EUROMOD source code.txt | 28 +- EM_Help/HelpFiles/EM_BC_Introduction.htm | 55 - .../HelpFiles/EM_BC_PresentationTaxBen.htm | 137 - EM_Help/HelpFiles/EM_BC_UserInterface.htm | 95 - EM_Help/HelpFiles/EM_FC_ParameterTypes.htm | 305 - .../EM_WW_AdministratingAcronyms.htm | 179 - .../EM_WW_AdministratingVariables.htm | 122 - EM_Help/HelpFiles/EM_WW_Applications.htm | 26 - EM_Help/HelpFiles/EM_WW_ComponentUse.htm | 90 - EM_Help/HelpFiles/EM_WW_FindingErrors.htm | 112 - .../HelpFiles/EM_WW_ImportingCountries.htm | 77 - .../HelpFiles/EM_WW_ImportingVariables.htm | 167 - EM_Help/HelpFiles/EM_WW_Plugins.htm | 26 - EM_Help/HelpFiles/EM_WW_SearchReplace.htm | 158 - EM_Help/HelpFiles/EM_WW_Variables.htm | 131 - EM_Help/HelpFiles/EUROMODHelp.hhc | 838 - .../Gaensefuesschen/Gaensefuesschen.exe | Bin 10568 -> 0 bytes .../EM_Common/Definitions/DefGeneral.cs | 7 +- .../EM_Common/Definitions/DefPar/DefInput.cs | 9 + .../EM_Common/Definitions/DefPar/DefOutput.cs | 9 + .../EM_Common/Definitions/DefPar/Store.cs | 12 + .../EM_Common/Definitions/DefPar/Uprate.cs | 6 + .../EM_Common/Definitions/DefVarName.cs | 3 + .../Definitions/InDepthDefinitions.cs | 59 + .../EM_Common/Helpers/EM_Helpers_Convert.cs | 20 +- .../EM_Common/Helpers/EM_Helpers_Pretty.cs | 3 +- .../PathAndEnvironment/EnvironmentInfo.cs | 11 +- .../EM_Common/PlugIns/UICommunicator.cs | 2 +- EM_Libraries/EM_Common/Undo/UndoManager.cs | 2 +- .../Properties/GlobalSuppressions.cs | 38 - EM_Libraries/EM_Crypt/EM_Crypt.cs | 297 - .../1.8.6/.nupkg.metadata | 4 + .../bouncycastle.netcore/1.8.6/.signature.p7s | Bin 0 -> 9467 bytes .../1.8.6/bouncycastle.netcore.1.8.6.nupkg | Bin 0 -> 7359548 bytes .../bouncycastle.netcore.1.8.6.nupkg.sha512 | 1 + .../1.8.6/bouncycastle.netcore.nuspec | 14 + .../1.8.6/lib/Mono/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../lib/MonoAndroid/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../1.8.6/lib/MonoMac/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../lib/MonoTouch/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../1.8.6/lib/net20/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../netstandard2.0/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../lib/xamarinios/BouncyCastle.Crypto.xml | 26182 ++++++++++++++++ .../EM_Statistics/Classes/ErrorCollector.cs | 4 +- .../EM_Statistics/Classes/ExportHandling.cs | 134 +- .../Classes/PrettyInfo/PrettyInfo.cs | 2 + .../PrettyInfoProvider_Definitions.cs | 6 + .../PrettyInfoProvider_Functions.cs | 6 +- .../Classes/PrettyInfo/PrettyInfoResources.cs | 6 +- .../PrettyInfo/PrettyInfo_BaseCountry.cs | 4 +- .../PrettyInfo/PrettyInfo_BaseCountryShort.cs | 18 + .../PrettyInfo/PrettyInfo_BaseDataset.cs | 5 +- .../PrettyInfo/PrettyInfo_BaseFileName.cs | 2 +- .../PrettyInfo/PrettyInfo_BaseRunAddons.cs | 5 +- .../PrettyInfo/PrettyInfo_BaseRunDuration.cs | 5 +- .../PrettyInfo/PrettyInfo_BaseRunEndTime.cs | 5 +- .../PrettyInfo_BaseRunExtensionSwitches.cs | 5 +- .../PrettyInfo/PrettyInfo_BaseRunLog.cs | 5 +- .../PrettyInfo_BaseRunLogExtended.cs | 5 +- .../PrettyInfo/PrettyInfo_BaseRunStartTime.cs | 5 +- .../PrettyInfo/PrettyInfo_BaseRunWarnings.cs | 5 +- .../Classes/PrettyInfo/PrettyInfo_BaseSys.cs | 2 +- .../PrettyInfo/PrettyInfo_BaseSysLabel.cs | 2 +- .../PrettyInfo/PrettyInfo_BaseSysList.cs | 19 + .../PrettyInfo/PrettyInfo_BaseSysPretty.cs | 2 +- .../PrettyInfo/PrettyInfo_BaseTaxSysPretty.cs | 2 +- .../PrettyInfo_RefRunExtensionSwitches.cs | 26 +- .../Classes/PrettyInfo/PrettyInfo_UserVar.cs | 2 + .../EM_Statistics/Classes/Template.cs | 18 +- .../EM_Statistics/Classes/TemplateApi.cs | 204 +- .../EM_Statistics/EM_Statistics.csproj | 160 +- .../EM_Statistics/EM_TemplateCalculator.cs | 127 +- .../EM_TemplateCalculator_Actions.cs | 10 +- .../ExternalStatistics/ExternalStatistic.cs | 26 + .../ExternalStatisticAggregate.cs | 64 + .../ExternalStatisticDistributional.cs | 44 + .../ExternalStatistics/IlVarInfo.cs | 16 + .../BaselineReform/BaselineReformPackage.cs | 24 +- .../SelectBaselinesReforms.Designer.cs | 2 +- .../BaselineReform/SelectBaselinesReforms.cs | 18 +- .../SelectBaselinesReforms.resx | 0 .../BaselineReform/SystemInfo.cs | 62 +- .../EM_Statistics/InDepthAnalysis/Help.chm | Bin 0 -> 44739 bytes .../InDepthAnalysis/Helpers/Breakdowns.cs | 288 + .../CategoryDescriptionsForm.Designer.cs | 2 +- .../Helpers/CategoryDescriptionsForm.cs | 29 +- .../Helpers/CategoryDescriptionsForm.resx | 0 .../InDepthAnalysis/Helpers/EMVarInfo.cs | 2 +- .../InDepthAnalysis/Helpers/FormulaEditor.cs | 2 +- .../Helpers/MergedDatasetWriter.cs | 2 +- .../InDepthAnalysis/InDepthAnalysis.cs | 20 + .../InDepthAnalysis/InDepthAnalysis.ico | Bin 0 -> 24078 bytes .../InDepthAnalysisForm.Designer.cs | 2 +- .../InDepthAnalysis/InDepthAnalysisForm.cs | 35 +- .../InDepthAnalysis/InDepthAnalysisForm.resx | 23 +- .../InDepthAnalysis/Settings/ISettings.cs | 2 +- .../InDepthAnalysis/Settings/Settings.cs | 74 +- .../SettingsDistributional.Designer.cs | 164 +- .../Settings/SettingsDistributional.cs | 435 +- .../Settings/SettingsDistributional.resx | 0 .../Settings/SettingsFiscal.Designer.cs | 7 +- .../Settings/SettingsFiscal.cs | 108 +- .../Settings/SettingsFiscal.resx | 0 .../SettingsInequalityAndPoverty.Designer.cs | 17 +- .../Settings/SettingsInequalityAndPoverty.cs | 421 +- .../SettingsInequalityAndPoverty.resx | 0 .../Settings/SettingsMacrovalidation.cs | 910 + .../EM_Statistics/Resources.Designer.cs | 123 +- EM_Libraries/EM_Statistics/Resources.resx | 15 + .../Resources/EUROMODStatistics.ico | Bin .../Resources}/InDepthAnalysis.ico | Bin .../Resources/InDepthAnalysis.xml | 824 +- .../Resources/Macrovalidation.xml | 1465 + .../Resources/StatisticsPresenter.ico | Bin 0 -> 99971 bytes .../EM_Statistics}/Resources/dummy.html | 0 .../EM_Statistics}/Resources/existing.png | Bin .../EM_Statistics}/Resources/missing.png | Bin .../PresenterForm.Designer.cs | 2 +- .../StatisticsPresenter/PresenterForm.cs | 4 +- .../StatisticsPresenter/PresenterForm.resx | 0 .../SelectBaseAltsForm.Designer.cs | 2 +- .../StatisticsPresenter/SelectBaseAltsForm.cs | 9 +- .../SelectBaseAltsForm.resx | 0 ...SelectDefaultTemplateComboForm.Designer.cs | 2 +- .../SelectDefaultTemplateComboForm.cs | 2 +- .../SelectDefaultTemplateComboForm.resx | 0 .../SelectFilesForm.Designer.cs | 2 +- .../StatisticsPresenter/SelectFilesForm.cs | 18 +- .../StatisticsPresenter/SelectFilesForm.resx | 0 .../SelectPackagesForm.Designer.cs | 2 +- .../StatisticsPresenter/SelectPackagesForm.cs | 2 +- .../SelectPackagesForm.resx | 0 .../ShowInfoForm.Designer.cs | 2 +- .../StatisticsPresenter/ShowInfoForm.cs | 2 +- .../StatisticsPresenter/ShowInfoForm.resx | 0 .../StatisticsPresenter.cs | 30 +- .../StatisticsPresenter.ico | Bin 0 -> 24038 bytes .../TakeUserInput.Designer.cs | 2 +- .../StatisticsPresenter/TakeUserInput.cs | 2 +- .../StatisticsPresenter/TakeUserInput.resx | 0 EM_Libraries/EM_Statistics/XML_handling.cs | 8 +- EM_Libraries/EM_XmlHandler/Common/TAGS.cs | 9 +- .../EM_XmlHandler/Common/XmlHelpers.cs | 9 + .../ExeXmlReader_ReadCAO/GetExtStatInfo.cs | 54 + .../ExeXmlReader_ReadCAO/_ReadCountry_Main.cs | 69 +- .../Executable/ExeXml_Structures.cs | 99 +- .../Hypothetical Household/DataGenerator.cs | 65 +- .../Hypothetical Household.csproj | 10 +- .../HypotheticalHousehold.cs | 24 +- .../InputForm.Designer.cs | 298 +- .../Hypothetical Household/InputForm.cs | 13 +- .../Hypothetical Household/InputForm.resx | 9 +- .../Hypothetical Household/NumericEditor.cs | 6 + ...signer.cs => SelectFolderForm.Designer.cs} | 4 +- ...OpenProjectForm.cs => SelectFolderForm.cs} | 18 +- ...ProjectForm.resx => SelectFolderForm.resx} | 0 .../Statistics/SimpleStatistics.cs | 6 +- .../VariableDataSet.Designer.cs | 2438 +- .../VariableDataSet.xsd | 80 +- .../VariableDataSet.xss | 128 +- .../data/HouseholdData.xml | 428 +- .../data/ReferenceTables.xml | 240 +- .../data/VariableSettings.xml | 1212 +- EM_Plugins/InDepthAnalysis/Help.chm | Bin 44589 -> 0 bytes EM_Plugins/InDepthAnalysis/InDepthAnalysis.cs | 44 - .../InDepthAnalysis/InDepthAnalysis.csproj | 203 - .../InDepthHelpMaker/InDepthHelpMaker.csproj | 8 - .../Properties/AssemblyInfo.cs | 37 - .../Properties/Resources.Designer.cs | 103 - EM_Plugins/InDepthAnalysis/app.config | 139 - .../InputForm.Designer.cs | 20 +- EM_Plugins/StatisticsPresenter/App.config | 139 - .../Properties/AssemblyInfo.cs | 36 - .../StatisticsPresenter/Resources.Designer.cs | 79 - EM_Plugins/StatisticsPresenter/Resources.resx | 124 - .../StatisticsPresenter.csproj | 363 - .../StatisticsPresenter/packages.config | 55 - .../Web Statistics/OutputForm.Designer.cs | 31 +- EM_Plugins/Web Statistics/OutputForm.cs | 86 +- EM_UI/Actions/CopySystemAction.cs | 2 + .../Actions/SetSelectionPrivateStateAction.cs | 68 +- .../CountryAdministrator.cs | 2 +- EM_UI/DataSets/CountryConfig.Designer.cs | 1003 +- EM_UI/DataSets/CountryConfig.cs | 4 + EM_UI/DataSets/CountryConfig.xsd | 83 +- EM_UI/DataSets/CountryConfig.xss | 115 +- EM_UI/DataSets/CountryConfigFacade.cs | 150 +- EM_UI/Dialogs/AddParameterForm.cs | 2 +- EM_UI/Dialogs/ComponentSearchForm.cs | 3 +- EM_UI/Dialogs/ConditionalFormattingForm.cs | 2 +- EM_UI/Dialogs/ConfigurationForm.cs | 2 +- EM_UI/Dialogs/DeleteCountryForm.cs | 3 +- EM_UI/Dialogs/FindReplaceForm.cs | 8 +- EM_UI/Dialogs/OptionalWarningsManager.cs | 2 +- EM_UI/Dialogs/SelectSystemsForm.cs | 2 +- .../Tools/ChooseStatistics.Designer.cs | 105 + EM_UI/Dialogs/Tools/ChooseStatistics.cs | 40 + .../Tools/ChooseStatistics.resx} | 3 - .../Tools/MacrovalidationForm.Designer.cs | 69 + EM_UI/Dialogs/Tools/MacrovalidationForm.cs | 242 + EM_UI/Dialogs/Tools/MacrovalidationForm.resx | 1227 + .../{ => Tools/PET}/PolicyEffects.Asc.cs | 5 +- .../{ => Tools/PET}/PolicyEffects.Designer.cs | 2 +- .../Dialogs/{ => Tools/PET}/PolicyEffects.cs | 2 +- .../{ => Tools/PET}/PolicyEffects.resx | 0 .../PET}/PolicyEffectsAlphaRange.Designer.cs | 2 +- .../PET}/PolicyEffectsAlphaRange.cs | 2 +- .../PET}/PolicyEffectsAlphaRange.resx | 0 .../PET}/PolicyEffectsChooseMode.Designer.cs | 2 +- .../PET}/PolicyEffectsChooseMode.cs | 2 +- .../PET}/PolicyEffectsChooseMode.resx | 0 .../{ => Tools/PET}/PolicyEffectsEM2.cs | 2 +- .../{ => Tools/PET}/PolicyEffectsEM3.cs | 2 +- EM_UI/EM_UI.csproj | 134 +- EM_UI/EM_UI_MainForm.Designer.cs | 118 +- EM_UI/EM_UI_MainForm.cs | 48 +- EM_UI/EM_UI_MainForm.resx | 407 +- EM_UI/Editor/FormulaEditorManager.cs | 30 +- .../ExternalStatisticUtil.cs | 277 + .../ExternalStatisticsAction.cs | 27 + .../ExternalStatisticsComponent.cs | 175 + .../ExternalStatisticsForm.Designer.cs | 912 + .../ExternalStatisticsForm.cs | 1124 + .../ExternalStatisticsForm.resx | 68 +- EM_UI/Icons/FunctionInconsistent.png | Bin 0 -> 909 bytes EM_UI/Icons/Macrovalidation.ico | Bin 0 -> 66110 bytes EM_UI/Icons/PrivateFunctionInconsistent.png | Bin 0 -> 912 bytes EM_UI/Icons/PrivateParameterInconsistent.png | Bin 0 -> 475 bytes EM_UI/Icons/blueballInconsistent.png | Bin 0 -> 460 bytes EM_UI/Icons/intelli-image-3.png | Bin 0 -> 507 bytes EM_UI/Icons/intelli-image-4.png | Bin 0 -> 590 bytes EM_UI/IndirectTaxes/IndirectTaxesAction.cs | 11 +- EM_UI/IndirectTaxes/IndirectTaxesForm.cs | 22 +- EM_UI/PlugInService/SessionInfo.cs | 2 +- EM_UI/Properties/Resources.Designer.cs | 30 + EM_UI/Properties/Resources.resx | 117 +- EM_UI/Properties/licenses.licx | 1 + EM_UI/Resources/EUROMODStatistics.ico | Bin 0 -> 24038 bytes EM_UI/Resources/InDepthAnalysis.ico | Bin 0 -> 67646 bytes EM_UI/Resources/InDepthAnalysis.png | Bin 0 -> 3762 bytes EM_UI/Resources/StatisticsPresenter.png | Bin 0 -> 288 bytes EM_UI/Run/RunManager.cs | 4 +- EM_UI/TreeListManagement/TreeListBuilder.cs | 108 +- EM_UI/TreeListTags/ParameterTreeListTag.cs | 2 + .../UpratingIndicesForm.Designer.cs | 79 +- EM_UI/UpratingIndices/UpratingIndicesForm.cs | 28 +- .../VariablesForm.Designer.cs | 10 +- .../VariablesAdministration/VariablesForm.cs | 19 +- .../Dialogs/VCChangePassword.Designer.cs | 207 - .../Dialogs/VCChangePassword.cs | 45 - .../Merging/ApplyAdministrator.cs | 115 + .../Merging/ChangeLogAdministrator.cs | 3 +- .../Merging/MergeAdministrator.cs | 168 +- EM_UI/VersionControl/Merging/MergeControl.cs | 118 +- EM_UI/VersionControl/Merging/MergeForm.cs | 21 +- .../Merging/MergeForm.designer.cs | 26 + EM_UI/packages.config | 22 + .../ControlAndInfo/Control_Run.cs | 31 + .../EM_Executable/EM_Executable.csproj | 2 +- .../EM_Executable/Functions/FunDefIL.cs | 19 + .../Functions/FunDefOutput_Work.cs | 95 +- .../EM_Executable/Functions/FunIlArithOp.cs | 2 +- .../EM_Executable/Functions/FunStore.cs | 50 + .../EM_Executable/Functions/FunUprate.cs | 102 +- .../EM_Transformer/EM2/EM2Country_Def.cs | 5 + .../EM_Transformer/EM2/EM2Country_Read.cs | 14 +- EM_executable/EM_Transformer/EM2/EM2TAGS.cs | 1 + .../EM23Adapt/EM23Adapt_YearValues.cs | 39 +- .../EM23Adapt/_EM23Adapt_Country.cs | 6 + .../EM_Transformer/EM3/EM3Country_Write.cs | 15 + .../EM_Transformer/EM_Transformer.csproj | 4 +- EUROMOD development.sln | 304 +- .../EUROMOD_HelpOnHelp.docx | Bin .../HelpFiles/EM_BC_InOut.htm | 0 EuromodHelp/HelpFiles/EM_BC_Introduction.htm | 59 + .../HelpFiles/EM_BC_PresentationTaxBen.htm | 98 + .../HelpFiles/EM_BC_Terminology.htm | 6 +- EuromodHelp/HelpFiles/EM_BC_UserInterface.htm | 65 + .../HelpFiles/EM_FC_AddHHMembers.htm | 2 +- ..._Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm | 43 +- .../HelpFiles/EM_FC_AddOn_ExtensionSwitch.htm | 0 .../HelpFiles/EM_FC_Allocate.htm | 4 +- .../HelpFiles/EM_FC_ArithOp.htm | 0 .../HelpFiles/EM_FC_BenCalc.htm | 87 +- .../HelpFiles/EM_FC_Break.htm | 6 +- .../HelpFiles/EM_FC_CallProgramme.htm | 0 .../HelpFiles/EM_FC_ChangeLog.htm | 0 .../HelpFiles/EM_FC_ChangeParam.htm | 0 .../HelpFiles/EM_FC_ChangeSwitch.htm | 0 .../HelpFiles/EM_FC_CommonParameters.htm | 80 +- .../HelpFiles/EM_FC_CumulativeSum.htm | 0 .../HelpFiles/EM_FC_DefIL.htm | 4 +- .../HelpFiles/EM_FC_DefInput.htm | 6 +- .../HelpFiles/EM_FC_DefOutput.htm | 4 +- .../HelpFiles/EM_FC_DefTU_UpdateTU.htm | 293 +- .../HelpFiles/EM_FC_DefVar_DefConst.htm | 4 +- .../EM_FC_DescriptionOfFunctions.htm | 0 .../HelpFiles/EM_FC_DropUnit_KeepUnit.htm | 0 .../HelpFiles/EM_FC_Elig.htm | 31 +- .../HelpFiles/EM_FC_FootnoteParameters.htm | 78 +- .../HelpFiles/EM_FC_Formula.htm | 0 .../HelpFiles/EM_FC_GeneralFeatures.htm | 0 .../HelpFiles/EM_FC_HeaderPage.htm | 0 .../HelpFiles/EM_FC_ILVarOp.htm | 2 +- .../HelpFiles/EM_FC_IlArithOp.htm | 0 .../HelpFiles/EM_FC_InitVars.htm | 0 .../EM_FC_InteractionsBetweenFunctions.htm | 0 .../HelpFiles/EM_FC_Loop_UnitLoop.htm | 5 +- .../HelpFiles/EM_FC_Min_Max.htm | 3 +- .../HelpFiles/EM_FC_ParameterTypes.htm | 203 + .../HelpFiles/EM_FC_ParameterValues.htm | 70 +- .../HelpFiles/EM_FC_Placeholders.htm | 13 +- .../HelpFiles/EM_FC_Queries.htm | 0 .../HelpFiles/EM_FC_RandSeed.htm | 0 .../HelpFiles/EM_FC_Scale.htm | 0 .../HelpFiles/EM_FC_SchedCalc.htm | 8 +- .../HelpFiles/EM_FC_SetDefault.htm | 0 .../HelpFiles/EM_FC_SortsOfFunctions.htm | 0 .../HelpFiles/EM_FC_Store_Restore.htm | 30 +- .../HelpFiles/EM_FC_Sum_AddHHMembers.htm | 2 +- .../HelpFiles/EM_FC_Sum_AddOn_Applic.htm | 0 .../EM_FC_Sum_AddOn_ExtensionSwitch.htm | 0 .../HelpFiles/EM_FC_Sum_AddOn_Func.htm | 0 .../HelpFiles/EM_FC_Sum_AddOn_Par.htm | 0 .../HelpFiles/EM_FC_Sum_AddOn_Pol.htm | 0 .../HelpFiles/EM_FC_Sum_Allocate.htm | 0 .../HelpFiles/EM_FC_Sum_ArithOp.htm | 0 .../HelpFiles/EM_FC_Sum_BenCalc.htm | 2 +- .../HelpFiles/EM_FC_Sum_Break.htm | 0 .../HelpFiles/EM_FC_Sum_CallProgramme.htm | 0 .../HelpFiles/EM_FC_Sum_ChangeParam.htm | 0 .../HelpFiles/EM_FC_Sum_ChangeSwitch.htm | 0 .../HelpFiles/EM_FC_Sum_CommonParameters.htm | 0 .../HelpFiles/EM_FC_Sum_CumulativeSum.htm | 0 .../HelpFiles/EM_FC_Sum_DefConst.htm | 0 .../HelpFiles/EM_FC_Sum_DefIL.htm | 0 .../HelpFiles/EM_FC_Sum_DefInput.htm | 0 .../HelpFiles/EM_FC_Sum_DefOutput.htm | 0 .../HelpFiles/EM_FC_Sum_DefTU.htm | 28 +- .../HelpFiles/EM_FC_Sum_DefVar.htm | 0 .../HelpFiles/EM_FC_Sum_DropUnit.htm | 0 .../HelpFiles/EM_FC_Sum_Elig.htm | 0 .../HelpFiles/EM_FC_Sum_ILVarOp.htm | 0 .../HelpFiles/EM_FC_Sum_IlArithOp.htm | 2 +- .../HelpFiles/EM_FC_Sum_InitVars.htm | 0 .../HelpFiles/EM_FC_Sum_KeepUnit.htm | 2 +- .../HelpFiles/EM_FC_Sum_Loop.htm | 0 .../HelpFiles/EM_FC_Sum_Max.htm | 0 .../HelpFiles/EM_FC_Sum_Min.htm | 0 .../HelpFiles/EM_FC_Sum_RandSeed.htm | 0 .../HelpFiles/EM_FC_Sum_Restore.htm | 6 +- .../HelpFiles/EM_FC_Sum_Scale.htm | 0 .../HelpFiles/EM_FC_Sum_SchedCalc.htm | 2 +- .../HelpFiles/EM_FC_Sum_SetDefault.htm | 0 .../HelpFiles/EM_FC_Sum_Store.htm | 0 .../HelpFiles/EM_FC_Sum_Totals.htm | 0 .../HelpFiles/EM_FC_Sum_UnitLoop.htm | 0 .../HelpFiles/EM_FC_Sum_UpdateTU.htm | 0 .../HelpFiles/EM_FC_Sum_Uprate.htm | 15 +- .../HelpFiles/EM_FC_SummaryOfFunctions.htm | 0 .../HelpFiles/EM_FC_Totals.htm | 0 .../HelpFiles/EM_FC_Uprate.htm | 69 +- .../HelpFiles/EM_FC_WhatAndHow.htm | 0 .../HelpFiles/EM_FC_WhatAreFunctions.htm | 10 +- .../HelpFiles/EM_FS_Branding.htm | 0 .../HelpFiles/EM_FS_CommandLine.htm | 0 .../HelpFiles/EM_FS_ConfigurationFile.htm | 4 +- .../HelpFiles/EM_FS_FileStructure.htm | 0 .../HelpFiles/EM_FS_HeaderPage.htm | 4 +- .../HelpFiles/EM_FS_InstallingEuromod.htm | 28 +- .../HelpFiles/EM_FS_OrganisationOfFiles.htm | 22 +- .../HelpFiles/EM_FS_ParameterFiles.htm | 0 .../HelpFiles/EM_FS_Software.htm | 4 +- .../HelpFiles/EM_FS_VariablesFile.htm | 0 .../HelpFiles/EM_VC_AddProject.htm | 4 +- .../HelpFiles/EM_VC_AdminContent.htm | 2 +- .../HelpFiles/EM_VC_AdminUsers.htm | 13 +- .../HelpFiles/EM_VC_ConnectingProject.htm | 4 +- .../HelpFiles/EM_VC_DownloadRelease.htm | 0 .../HelpFiles/EM_VC_FormsFunctions.htm | 0 .../HelpFiles/EM_VC_HeaderPage.htm | 2 +- .../HelpFiles/EM_VC_LogInOut.htm | 0 .../HelpFiles/EM_VC_MergeTool.htm | 97 +- .../EM_VC_NewBundleFromLocalVersion.htm | 2 +- .../HelpFiles/EM_VC_RemoveBundles.htm | 0 .../HelpFiles/EM_VC_RemoveProject.htm | 0 .../HelpFiles/EM_VC_Settings.htm | 0 .../HelpFiles/EM_VC_StartFinishMerging.htm | 22 +- .../HelpFiles/EM_VC_VarMergeTool.htm | 50 +- .../HelpFiles/EM_VC_WFI_Admin.htm | 2 +- .../HelpFiles/EM_VC_WFI_ConnectingProject.htm | 4 +- .../EM_VC_WFI_DownloadingRelease.htm | 12 +- .../HelpFiles/EM_VC_WFI_General.htm | 0 .../HelpFiles/EM_VC_WFI_GeneratingRelease.htm | 2 +- .../HelpFiles/EM_WW_AddingCountries.htm | 4 +- .../HelpFiles/EM_WW_AddingFunctions.htm | 12 +- .../HelpFiles/EM_WW_AddingParameters.htm | 20 +- .../HelpFiles/EM_WW_AddingPolicies.htm | 5 +- .../HelpFiles/EM_WW_AddingSystems.htm | 2 +- .../HelpFiles/EM_WW_AdminProjects.htm | 4 +- .../EM_WW_AdministratingAcronyms.htm | 81 + .../EM_WW_AdministratingVariables.htm | 62 + .../HelpFiles/EM_WW_Administration.htm | 0 EuromodHelp/HelpFiles/EM_WW_Applications.htm | 33 + .../HelpFiles/EM_WW_BackupRestore.htm | 12 +- .../HelpFiles/EM_WW_Bookmarks.htm | 4 +- .../HelpFiles/EM_WW_ChangingParameters.htm | 45 +- .../HelpFiles/EM_WW_ChangingPolicyView.htm | 0 .../HelpFiles/EM_WW_ChangingSettings.htm | 0 .../HelpFiles/EM_WW_ChangingTBS.htm | 0 .../HelpFiles/EM_WW_CleaningSystems.htm | 0 .../HelpFiles/EM_WW_CleaningVariables.htm | 0 .../HelpFiles/EM_WW_ColumnChooser.htm | 13 +- .../EM_WW_ComparingCountryVersions.htm | 89 +- .../HelpFiles/EM_WW_ComparingSystems.htm | 0 EuromodHelp/HelpFiles/EM_WW_ComponentUse.htm | 50 + .../HelpFiles/EM_WW_ConditionalFormatting.htm | 14 +- .../HelpFiles/EM_WW_Configuration.htm | 16 +- .../HelpFiles/EM_WW_ConfiguringDatasets.htm | 23 +- .../HelpFiles/EM_WW_CopyingFunctions.htm | 8 +- .../EM_WW_CopyingParameterValues.htm | 16 +- .../HelpFiles/EM_WW_CopyingPolicies.htm | 17 +- .../HelpFiles/EM_WW_CountriesNames.htm | 3 +- .../HelpFiles/EM_WW_DecimalSeparator.htm | 0 .../HelpFiles/EM_WW_DefiningIndirectTaxes.htm | 0 .../EM_WW_DefiningUpratingFactors.htm | 159 +- .../HelpFiles/EM_WW_DeletingCountries.htm | 4 +- .../HelpFiles/EM_WW_DeletingFunctions.htm | 16 +- .../HelpFiles/EM_WW_DeletingParameters.htm | 16 +- .../HelpFiles/EM_WW_DeletingPolicies.htm | 12 +- .../HelpFiles/EM_WW_DeletingSystems.htm | 0 .../EM_WW_DisplayingFunctionSpecifiers.htm | 2 +- .../HelpFiles/EM_WW_EUROMODStatistics.htm | 46 + .../HelpFiles/EM_WW_ExpandCollapse.htm | 0 .../HelpFiles/EM_WW_Extensions.htm | 2 +- EuromodHelp/HelpFiles/EM_WW_FindingErrors.htm | 67 + .../HelpFiles/EM_WW_Formatting.htm | 0 .../HelpFiles/EM_WW_FunctionOrder.htm | 9 +- .../HelpFiles/EM_WW_Groups.htm | 0 .../HelpFiles/EM_WW_HeaderPage.htm | 0 .../HelpFiles/EM_WW_HidingRows.htm | 22 +- .../EM_WW_HypotheticalHouseholdTool.htm | 46 + .../HelpFiles/EM_WW_ImportingCountries.htm | 53 + .../EM_WW_ImportingExportingAddOns.htm | 0 .../EM_WW_ImportingExportingSystems.htm | 0 .../HelpFiles/EM_WW_ImportingVariables.htm | 73 + .../HelpFiles/EM_WW_KeyboardShortcuts.htm | 0 .../HelpFiles/EM_WW_Macrovalidation.htm | 37 + .../HelpFiles/EM_WW_MatrixViewIncomelists.htm | 2 +- .../HelpFiles/EM_WW_NewProject.htm | 20 +- .../HelpFiles/EM_WW_NodesColour.htm | 10 +- .../HelpFiles/EM_WW_OpenOutputFile.htm | 28 + .../HelpFiles/EM_WW_OpenProject.htm | 12 +- .../HelpFiles/EM_WW_ParameterPresentation.htm | 4 +- .../HelpFiles/EM_WW_PathsAndExit.htm | 0 EuromodHelp/HelpFiles/EM_WW_Plugins.htm | 22 + .../HelpFiles/EM_WW_PolicyEffects.htm | 27 +- .../HelpFiles/EM_WW_PolicyOrder.htm | 10 +- .../HelpFiles/EM_WW_PrivateComments.htm | 5 +- .../HelpFiles/EM_WW_PublicVersion.htm | 4 +- .../HelpFiles/EM_WW_RenamingSystems.htm | 4 +- .../HelpFiles/EM_WW_RunDialog.htm | 98 +- .../HelpFiles/EM_WW_SaveAsText.htm | 2 +- .../HelpFiles/EM_WW_Saving.htm | 21 +- .../HelpFiles/EM_WW_SavingVariables.htm | 0 EuromodHelp/HelpFiles/EM_WW_SearchReplace.htm | 91 + .../HelpFiles/EM_WW_Searching.htm | 0 .../HelpFiles/EM_WW_Selecting.htm | 0 .../HelpFiles/EM_WW_SetPolicyPrivate.htm | 8 +- .../HelpFiles/EM_WW_SummaryStatistics.htm | 0 .../HelpFiles/EM_WW_SystemOrder.htm | 0 .../HelpFiles/EM_WW_SystemSettings.htm | 6 +- .../HelpFiles/EM_WW_TextSize.htm | 0 .../HelpFiles/EM_WW_Undo.htm | 3 +- .../HelpFiles/EM_WW_UpdatingProgress.htm | 34 +- .../HelpFiles/EM_WW_UsingHelp.htm | 5 + EuromodHelp/HelpFiles/EM_WW_Variables.htm | 56 + EuromodHelp/HelpFiles/EUROMODHelp.hhc | 844 + .../HelpFiles/EUROMODHelp.hhp | 8 +- .../HelpFiles/files/policy_effects_1.png | Bin .../HelpFiles/files/policy_effects_2.png | Bin .../HelpFiles/files/style.css | 0 .../HelpFiles/files/style_orig.css | 0 .../HelpFiles/files/style_pdf.css | 5 + .../HelpStructure/AutoRunHelpMaker.xlsm | Bin .../HelpStructure/EM_HelpSystem_Structure.xls | Bin 77824 -> 78848 bytes .../Gaensefuesschen/Gaensefuesschen.exe | Bin 0 -> 8808 bytes .../Gaensefuesschen/Gaensefuesschen.pdb | Bin .../Gaensefuesschen/Gaensefuesschen.sln | 0 .../Gaensefuesschen/Gaensefuesschen.suo | Bin .../Gaensefuesschen/Gaensefuesschen.csproj | 0 .../Gaensefuesschen.csproj.user | 0 .../Gaensefuesschen/Program.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../HelpStructure/ReadMeAutoRunHelpMaker.txt | 0 .../InDepthHelpMaker/In-depthAnalysisHelp.hhc | 0 .../InDepthHelpMaker/In-depthAnalysisHelp.hhp | 6 +- .../InDepthHelpMaker/InDepthHelpMaker.csproj | 12 + .../InDepthHelpMaker/Program.cs | 11 +- .../Settings_BaselinesReforms.htm | 3 + .../InDepthHelpMaker/Settings_Breakdowns.htm | 98 + .../InDepthHelpMaker/Settings_Categories.htm | 0 .../Settings_Distributional.htm | 3 +- .../InDepthHelpMaker/Settings_Fiscal.htm | 0 .../Settings_InequalityPoverty.htm | 10 +- .../InDepthHelpMaker/Settings_Main.htm | 0 .../InDepthHelpMaker/Tables.htm | 0 .../Tables_Distributional.htm | 17 + .../Tables_Distributional_21.htm | 0 .../Tables_Distributional_22.htm | 0 .../Tables_Distributional_23.htm | 0 .../Tables_Distributional_24.htm | 0 .../Tables_Distributional_25.htm | 0 .../Tables_Distributional_26.htm | 0 .../Tables_Distributional_278.htm | 0 .../InDepthHelpMaker/Tables_Fiscal.htm | 0 .../InDepthHelpMaker/Tables_Fiscal_11.htm | 0 .../InDepthHelpMaker/Tables_Fiscal_12.htm | 0 .../InDepthHelpMaker/Tables_Fiscal_13.htm | 0 .../InDepthHelpMaker/Tables_Fiscal_14.htm | 0 .../Tables_InequalityPoverty.htm | 20 +- .../Tables_InequalityPoverty_31.htm | 19 +- .../Tables_InequalityPoverty_32.htm | 0 .../Tables_InequalityPoverty_33.htm | 0 .../Tables_InequalityPoverty_34.htm | 0 .../Tables_InequalityPoverty_35.htm | 0 .../Tables_InequalityPoverty_36.htm | 0 .../InDepthHelpMaker/style.css | 5 + Notice.txt | 2 +- .../UserSelectable/EUROMOD_1default.xml | 3754 ++- .../UserSelectable/EUROMOD_2reform.xml | 2442 +- .../UserSelectable/EUROMOD_3multi.xml | 1935 +- changelog.txt | 121 + vcapi/VCAPI.cs | 27 +- 534 files changed, 209192 insertions(+), 10785 deletions(-) delete mode 100644 EM_Help/HelpFiles/EM_BC_Introduction.htm delete mode 100644 EM_Help/HelpFiles/EM_BC_PresentationTaxBen.htm delete mode 100644 EM_Help/HelpFiles/EM_BC_UserInterface.htm delete mode 100644 EM_Help/HelpFiles/EM_FC_ParameterTypes.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_AdministratingAcronyms.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_AdministratingVariables.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_Applications.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_ComponentUse.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_FindingErrors.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_ImportingCountries.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_ImportingVariables.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_Plugins.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_SearchReplace.htm delete mode 100644 EM_Help/HelpFiles/EM_WW_Variables.htm delete mode 100644 EM_Help/HelpFiles/EUROMODHelp.hhc delete mode 100644 EM_Help/HelpStructure/Gaensefuesschen/Gaensefuesschen.exe create mode 100644 EM_Libraries/EM_Common/Definitions/InDepthDefinitions.cs delete mode 100644 EM_Libraries/EM_CommonMSWin/Properties/GlobalSuppressions.cs delete mode 100644 EM_Libraries/EM_Crypt/EM_Crypt.cs create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.nupkg.metadata create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.signature.p7s create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.1.8.6.nupkg create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.1.8.6.nupkg.sha512 create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.nuspec create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/Mono/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoAndroid/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoMac/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoTouch/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/net20/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/netstandard2.0/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/xamarinios/BouncyCastle.Crypto.xml create mode 100644 EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountryShort.cs create mode 100644 EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysList.cs create mode 100644 EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatistic.cs create mode 100644 EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticAggregate.cs create mode 100644 EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticDistributional.cs create mode 100644 EM_Libraries/EM_Statistics/ExternalStatistics/IlVarInfo.cs rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs (86%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs (89%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/BaselineReform/SystemInfo.cs (85%) create mode 100644 EM_Libraries/EM_Statistics/InDepthAnalysis/Help.chm create mode 100644 EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/Breakdowns.cs rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs (74%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Helpers/CategoryDescriptionsForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Helpers/EMVarInfo.cs (98%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Helpers/FormulaEditor.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Helpers/MergedDatasetWriter.cs (99%) create mode 100644 EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.cs create mode 100644 EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.ico rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/InDepthAnalysisForm.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/InDepthAnalysisForm.cs (95%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/InDepthAnalysisForm.resx (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/ISettings.cs (88%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/Settings.cs (85%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs (93%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsDistributional.cs (79%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsDistributional.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsFiscal.cs (89%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsFiscal.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs (78%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.resx (100%) create mode 100644 EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsMacrovalidation.cs rename EM_Plugins/StatisticsPresenter/StatisticsPresenter.ico => EM_Libraries/EM_Statistics/Resources/EUROMODStatistics.ico (100%) rename {EM_Plugins/InDepthAnalysis => EM_Libraries/EM_Statistics/Resources}/InDepthAnalysis.ico (100%) rename {EM_Plugins/InDepthAnalysis => EM_Libraries/EM_Statistics}/Resources/InDepthAnalysis.xml (75%) create mode 100644 EM_Libraries/EM_Statistics/Resources/Macrovalidation.xml create mode 100644 EM_Libraries/EM_Statistics/Resources/StatisticsPresenter.ico rename {EM_Plugins/StatisticsPresenter => EM_Libraries/EM_Statistics}/Resources/dummy.html (100%) rename {EM_Plugins/InDepthAnalysis => EM_Libraries/EM_Statistics}/Resources/existing.png (100%) rename {EM_Plugins/InDepthAnalysis => EM_Libraries/EM_Statistics}/Resources/missing.png (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/PresenterForm.Designer.cs (98%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/PresenterForm.cs (95%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/PresenterForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectBaseAltsForm.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectBaseAltsForm.cs (94%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectBaseAltsForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectDefaultTemplateComboForm.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectDefaultTemplateComboForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectFilesForm.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectFilesForm.cs (92%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectFilesForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectPackagesForm.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectPackagesForm.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/SelectPackagesForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/ShowInfoForm.Designer.cs (98%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/ShowInfoForm.cs (94%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/ShowInfoForm.resx (100%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/StatisticsPresenter.cs (81%) create mode 100644 EM_Libraries/EM_Statistics/StatisticsPresenter/StatisticsPresenter.ico rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/TakeUserInput.Designer.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/TakeUserInput.cs (99%) rename {EM_Plugins => EM_Libraries/EM_Statistics}/StatisticsPresenter/TakeUserInput.resx (100%) create mode 100644 EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/GetExtStatInfo.cs rename EM_Plugins/Hypothetical Household/{OpenProjectForm.Designer.cs => SelectFolderForm.Designer.cs} (99%) rename EM_Plugins/Hypothetical Household/{OpenProjectForm.cs => SelectFolderForm.cs} (79%) rename EM_Plugins/Hypothetical Household/{OpenProjectForm.resx => SelectFolderForm.resx} (100%) delete mode 100644 EM_Plugins/InDepthAnalysis/Help.chm delete mode 100644 EM_Plugins/InDepthAnalysis/InDepthAnalysis.cs delete mode 100644 EM_Plugins/InDepthAnalysis/InDepthAnalysis.csproj delete mode 100644 EM_Plugins/InDepthAnalysis/InDepthHelpMaker/InDepthHelpMaker.csproj delete mode 100644 EM_Plugins/InDepthAnalysis/Properties/AssemblyInfo.cs delete mode 100644 EM_Plugins/InDepthAnalysis/Properties/Resources.Designer.cs delete mode 100644 EM_Plugins/InDepthAnalysis/app.config delete mode 100644 EM_Plugins/StatisticsPresenter/App.config delete mode 100644 EM_Plugins/StatisticsPresenter/Properties/AssemblyInfo.cs delete mode 100644 EM_Plugins/StatisticsPresenter/Resources.Designer.cs delete mode 100644 EM_Plugins/StatisticsPresenter/Resources.resx delete mode 100644 EM_Plugins/StatisticsPresenter/StatisticsPresenter.csproj delete mode 100644 EM_Plugins/StatisticsPresenter/packages.config create mode 100644 EM_UI/Dialogs/Tools/ChooseStatistics.Designer.cs create mode 100644 EM_UI/Dialogs/Tools/ChooseStatistics.cs rename EM_UI/{VersionControl/Dialogs/VCChangePassword.resx => Dialogs/Tools/ChooseStatistics.resx} (96%) create mode 100644 EM_UI/Dialogs/Tools/MacrovalidationForm.Designer.cs create mode 100644 EM_UI/Dialogs/Tools/MacrovalidationForm.cs create mode 100644 EM_UI/Dialogs/Tools/MacrovalidationForm.resx rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffects.Asc.cs (98%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffects.Designer.cs (99%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffects.cs (99%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffects.resx (100%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsAlphaRange.Designer.cs (99%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsAlphaRange.cs (99%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsAlphaRange.resx (100%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsChooseMode.Designer.cs (99%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsChooseMode.cs (97%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsChooseMode.resx (100%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsEM2.cs (99%) rename EM_UI/Dialogs/{ => Tools/PET}/PolicyEffectsEM3.cs (99%) create mode 100644 EM_UI/ExternalStatistics/ExternalStatisticUtil.cs create mode 100644 EM_UI/ExternalStatistics/ExternalStatisticsAction.cs create mode 100644 EM_UI/ExternalStatistics/ExternalStatisticsComponent.cs create mode 100644 EM_UI/ExternalStatistics/ExternalStatisticsForm.Designer.cs create mode 100644 EM_UI/ExternalStatistics/ExternalStatisticsForm.cs rename EM_Plugins/InDepthAnalysis/Properties/Resources.resx => EM_UI/ExternalStatistics/ExternalStatisticsForm.resx (58%) create mode 100644 EM_UI/Icons/FunctionInconsistent.png create mode 100644 EM_UI/Icons/Macrovalidation.ico create mode 100644 EM_UI/Icons/PrivateFunctionInconsistent.png create mode 100644 EM_UI/Icons/PrivateParameterInconsistent.png create mode 100644 EM_UI/Icons/blueballInconsistent.png create mode 100644 EM_UI/Icons/intelli-image-3.png create mode 100644 EM_UI/Icons/intelli-image-4.png create mode 100644 EM_UI/Resources/EUROMODStatistics.ico create mode 100644 EM_UI/Resources/InDepthAnalysis.ico create mode 100644 EM_UI/Resources/InDepthAnalysis.png create mode 100644 EM_UI/Resources/StatisticsPresenter.png delete mode 100644 EM_UI/VersionControl/Dialogs/VCChangePassword.Designer.cs delete mode 100644 EM_UI/VersionControl/Dialogs/VCChangePassword.cs rename {EM_Help => EuromodHelp}/EUROMOD_HelpOnHelp.docx (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_BC_InOut.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_BC_Introduction.htm create mode 100644 EuromodHelp/HelpFiles/EM_BC_PresentationTaxBen.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_BC_Terminology.htm (97%) create mode 100644 EuromodHelp/HelpFiles/EM_BC_UserInterface.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_AddHHMembers.htm (99%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm (86%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_AddOn_ExtensionSwitch.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Allocate.htm (99%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_ArithOp.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_BenCalc.htm (80%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Break.htm (88%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_CallProgramme.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_ChangeLog.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_ChangeParam.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_ChangeSwitch.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_CommonParameters.htm (77%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_CumulativeSum.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DefIL.htm (97%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DefInput.htm (99%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DefOutput.htm (99%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DefTU_UpdateTU.htm (84%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DefVar_DefConst.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DescriptionOfFunctions.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_DropUnit_KeepUnit.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Elig.htm (87%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_FootnoteParameters.htm (80%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Formula.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_GeneralFeatures.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_HeaderPage.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_ILVarOp.htm (99%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_IlArithOp.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_InitVars.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_InteractionsBetweenFunctions.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Loop_UnitLoop.htm (97%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Min_Max.htm (86%) create mode 100644 EuromodHelp/HelpFiles/EM_FC_ParameterTypes.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_ParameterValues.htm (80%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Placeholders.htm (91%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Queries.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_RandSeed.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Scale.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_SchedCalc.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_SetDefault.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_SortsOfFunctions.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Store_Restore.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_AddHHMembers.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_AddOn_Applic.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_AddOn_ExtensionSwitch.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_AddOn_Func.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_AddOn_Par.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_AddOn_Pol.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Allocate.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_ArithOp.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_BenCalc.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Break.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_CallProgramme.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_ChangeParam.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_ChangeSwitch.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_CommonParameters.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_CumulativeSum.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DefConst.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DefIL.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DefInput.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DefOutput.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DefTU.htm (85%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DefVar.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_DropUnit.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Elig.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_ILVarOp.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_IlArithOp.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_InitVars.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_KeepUnit.htm (97%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Loop.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Max.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Min.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_RandSeed.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Restore.htm (85%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Scale.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_SchedCalc.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_SetDefault.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Store.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Totals.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_UnitLoop.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_UpdateTU.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Sum_Uprate.htm (88%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_SummaryOfFunctions.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Totals.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_Uprate.htm (83%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_WhatAndHow.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FC_WhatAreFunctions.htm (96%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_Branding.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_CommandLine.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_ConfigurationFile.htm (97%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_FileStructure.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_HeaderPage.htm (96%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_InstallingEuromod.htm (61%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_OrganisationOfFiles.htm (82%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_ParameterFiles.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_Software.htm (91%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_FS_VariablesFile.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_AddProject.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_AdminContent.htm (94%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_AdminUsers.htm (89%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_ConnectingProject.htm (92%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_DownloadRelease.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_FormsFunctions.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_HeaderPage.htm (96%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_LogInOut.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_MergeTool.htm (80%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm (93%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_RemoveBundles.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_RemoveProject.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_Settings.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_StartFinishMerging.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_VarMergeTool.htm (84%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_WFI_Admin.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_WFI_ConnectingProject.htm (95%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_WFI_DownloadingRelease.htm (88%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_WFI_General.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_VC_WFI_GeneratingRelease.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_AddingCountries.htm (86%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_AddingFunctions.htm (79%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_AddingParameters.htm (91%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_AddingPolicies.htm (85%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_AddingSystems.htm (95%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_AdminProjects.htm (92%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_AdministratingAcronyms.htm create mode 100644 EuromodHelp/HelpFiles/EM_WW_AdministratingVariables.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Administration.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_Applications.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_BackupRestore.htm (87%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Bookmarks.htm (91%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ChangingParameters.htm (87%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ChangingPolicyView.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ChangingSettings.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ChangingTBS.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_CleaningSystems.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_CleaningVariables.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ColumnChooser.htm (79%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ComparingCountryVersions.htm (64%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ComparingSystems.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_ComponentUse.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ConditionalFormatting.htm (93%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Configuration.htm (83%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ConfiguringDatasets.htm (87%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_CopyingFunctions.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_CopyingParameterValues.htm (92%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_CopyingPolicies.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_CountriesNames.htm (96%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DecimalSeparator.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DefiningIndirectTaxes.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DefiningUpratingFactors.htm (64%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DeletingCountries.htm (82%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DeletingFunctions.htm (73%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DeletingParameters.htm (71%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DeletingPolicies.htm (74%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DeletingSystems.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm (96%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_EUROMODStatistics.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ExpandCollapse.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Extensions.htm (99%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_FindingErrors.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Formatting.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_FunctionOrder.htm (88%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Groups.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_HeaderPage.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_HidingRows.htm (94%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_HypotheticalHouseholdTool.htm create mode 100644 EuromodHelp/HelpFiles/EM_WW_ImportingCountries.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ImportingExportingAddOns.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ImportingExportingSystems.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_ImportingVariables.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_KeyboardShortcuts.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_Macrovalidation.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_MatrixViewIncomelists.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_NewProject.htm (84%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_NodesColour.htm (77%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_OpenOutputFile.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_OpenProject.htm (87%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_ParameterPresentation.htm (97%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_PathsAndExit.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_Plugins.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_PolicyEffects.htm (85%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_PolicyOrder.htm (83%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_PrivateComments.htm (89%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_PublicVersion.htm (98%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_RenamingSystems.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_RunDialog.htm (84%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_SaveAsText.htm (97%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Saving.htm (88%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_SavingVariables.htm (100%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_SearchReplace.htm rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Searching.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Selecting.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_SetPolicyPrivate.htm (66%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_SummaryStatistics.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_SystemOrder.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_SystemSettings.htm (94%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_TextSize.htm (100%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_Undo.htm (88%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_UpdatingProgress.htm (90%) rename {EM_Help => EuromodHelp}/HelpFiles/EM_WW_UsingHelp.htm (78%) create mode 100644 EuromodHelp/HelpFiles/EM_WW_Variables.htm create mode 100644 EuromodHelp/HelpFiles/EUROMODHelp.hhc rename {EM_Help => EuromodHelp}/HelpFiles/EUROMODHelp.hhp (96%) rename {EM_Help => EuromodHelp}/HelpFiles/files/policy_effects_1.png (100%) rename {EM_Help => EuromodHelp}/HelpFiles/files/policy_effects_2.png (100%) rename {EM_Help => EuromodHelp}/HelpFiles/files/style.css (100%) rename EM_Plugins/InDepthAnalysis/InDepthHelpMaker/style.css => EuromodHelp/HelpFiles/files/style_orig.css (100%) rename {EM_Help => EuromodHelp}/HelpFiles/files/style_pdf.css (98%) rename {EM_Help => EuromodHelp}/HelpStructure/AutoRunHelpMaker.xlsm (100%) rename {EM_Help => EuromodHelp}/HelpStructure/EM_HelpSystem_Structure.xls (59%) create mode 100644 EuromodHelp/HelpStructure/Gaensefuesschen/Gaensefuesschen.exe rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen.pdb (100%) rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen.sln (100%) rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen.suo (100%) rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen/Gaensefuesschen.csproj (100%) rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen/Gaensefuesschen.csproj.user (100%) rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen/Program.cs (100%) rename {EM_Help => EuromodHelp}/HelpStructure/Gaensefuesschen/Gaensefuesschen/Properties/AssemblyInfo.cs (100%) rename {EM_Help => EuromodHelp}/HelpStructure/ReadMeAutoRunHelpMaker.txt (100%) rename EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Help.hhc => EuromodHelp/InDepthHelpMaker/In-depthAnalysisHelp.hhc (100%) rename EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Help.hhp => EuromodHelp/InDepthHelpMaker/In-depthAnalysisHelp.hhp (88%) create mode 100644 EuromodHelp/InDepthHelpMaker/InDepthHelpMaker.csproj rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Program.cs (83%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Settings_BaselinesReforms.htm (74%) create mode 100644 EuromodHelp/InDepthHelpMaker/Settings_Breakdowns.htm rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Settings_Categories.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Settings_Distributional.htm (94%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Settings_Fiscal.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Settings_InequalityPoverty.htm (85%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Settings_Main.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional.htm (66%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_21.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_22.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_23.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_24.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_25.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_26.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Distributional_278.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Fiscal.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Fiscal_11.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Fiscal_12.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Fiscal_13.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_Fiscal_14.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty.htm (85%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty_31.htm (66%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty_32.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty_33.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty_34.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty_35.htm (100%) rename {EM_Plugins/InDepthAnalysis => EuromodHelp}/InDepthHelpMaker/Tables_InequalityPoverty_36.htm (100%) rename EM_Help/HelpFiles/files/style_orig.css => EuromodHelp/InDepthHelpMaker/style.css (98%) create mode 100644 changelog.txt diff --git a/Components description and instructions to configure and run the EUROMOD source code.txt b/Components description and instructions to configure and run the EUROMOD source code.txt index 991dc7d..1ef3a61 100644 --- a/Components description and instructions to configure and run the EUROMOD source code.txt +++ b/Components description and instructions to configure and run the EUROMOD source code.txt @@ -1,5 +1,4 @@ -EUROMOD (website: https://euromod-web.jrc.ec.europa.eu/ contact: JRC-EUROMOD@ec.europa.eu ) is a tax-benefit microsimulation model for the European Union and the UK that enables researchers and policy analysts to calculate, -in a comparable manner, the effects of taxes and benefits on household incomes and work incentives for the population of each country and for the EU as a whole. +EUROMOD (website: https://euromod-web.jrc.ec.europa.eu/ contact: JRC-EUROMOD@ec.europa.eu ) is a tax-benefit microsimulation model for the European Union that enables researchers and policy analysts to calculate, in a comparable manner, the effects of taxes and benefits on household incomes and work incentives for the population of each country and for the EU as a whole. EUROMOD comprises a user interface, an executable, plugins and a specific file structure. This repository includes the source code of the software (user interface, executable, plugins and some additional libraries and files). @@ -14,22 +13,15 @@ Elements included in the EUROMOD software source code: - EM_Executable - EM_ExecutableCaller - EM_Transformer -- EM_Help: EUROMOD help files. +- EuromodHelp: EUROMOD help files. - EM_Libraries: Libraries which are used in other components. - EM_Plugins: - Hypothetical Household: The Hypothetical Household Tool (HHoT) is a EUROMOD plugin for designing hypothetical households and generating data according to the chosen household characteristics. This hypothetical household data can then be used to estimate the effects of taxes and benefits on household disposable income. - Income List Components: The Income List Components plugin extracts information about the income lists used in the selected countries/years. In particular, it visualises the components of the income list. - - StatisticsPresenter: The Statistics Presenter plugin is an analysis tool that produces a fixed set of statistics on income distribution based on (a) EUROMOD output file(s). - VariablesChecker: The Variables Checker plugin provides methods for validating the EUROMOD variables file. - Web Statistics: it generates summary tables with the baseline estimates on the distribution of different income components (from market income to disposable income) as well as on the incidence of taxes and benefits across decile income groups. It also provides summary statistics on income inequality and poverty indicators, as well as on marginal effective tax rates. - - In-depth Analysis: The In-depth Analysis plugin is an advanced Statistics presenter which provides additional indicators and allow extra flexibility in the definition of variables and population groups. - The In-depth Analysis plugin was developed as a part of the project “Support for the Microsimulation Hub of the Council of Economic Advisors in Greece”, - funded by the European Commission’s Structural Reform Support Programme and implemented by the Joint Research Centre - through an administrative arrangement with DG REFORM. All parties agreed to incorporate the plugin to EUROMOD, which implies - the public distribution of its compiled version under the EUROMOD End-user licence agreement and its source code under the European Union - Public Licence (EUPL-1.2) or a later version of this licence. - EM_UI: EUROMOD user interface. - Executable: Source code of the EM2 executable (EUROMOD calculator engine EM2). - externallibs: Ionic.Zip.dll (and Readme.txt) which are used in EUROMOD. @@ -44,17 +36,27 @@ This software is not open source and it is not provided together with EUROMOD. - Clone the repository. - Make sure a valid version of DevExpress is installed in the machine. -- Generate the help file (otherwise EUROMOD will display an error). In order to do so: +- Generate the EUROMOD help file (otherwise EUROMOD will display an error). In order to do so: 1. Create a folder named "bin" in \EM_UI. 2. Create a folder named "help" in \EM_UI\bin\ 3. Double click on the file \EM_HELP\HelpStructure\AutoRunHelpMaker.xlsm. This file contains a macro which will be automatically run when opening the files. Macros should be enabled. This macro will create the EUROMOD help in the folder \EM_UI\bin\help which has been previously created. The macro will use Microsoft HTML Help Workshop and it will expect it to be installed in C:\Program Files (x86)\HTML Help Workshop\hhc.exe. This software is property of Microsoft and it is not provided together with EUROMOD. - + +- Generate the In-depth help file (otherwise EUROMOD will display an error). In order to do so: + 1. Create a folder named "bin" in \EM_UI (if it does not exist). + 2. Create a folder named "help" in \EM_UI\bin\ (if it does not exist) + 3. Open the “InDepthHelpMaker” project in Visual Studio, build it and execute it. This will use the existing source files in “EuromodHelp\InDepthHelpMaker\” to generate the “In-depthAnalysisHelp.chm” file in the same folder. Once the help file is generated, you will need to manually move it in “\EM_UI\bin\help\”. + This project will use Microsoft HTML Help Workshop and it will expect it to be installed in C:\Program Files (x86)\HTML Help Workshop\hhc.exe. This software is property of Microsoft and it is not provided together with EUROMOD. + - Double click on the solution file EUROMOD development.sln to open the solution. - Build the solution by selecting the Solution Configuration Debug and EM_UI. - Start the solution. -Note: In order to run the previous version of EUROMOD (EM2), the project under \Executable\core-executable needs to be compiled and the EUROMOD.exe +Notes: + +- In order to run the previous version of EUROMOD (EM2), the project under \Executable\core-executable needs to be compiled and the EUROMOD.exe file needs to be copied to \EM_UI\bin\x64\executable. + +- In order to use Statistics presenter, the templates from \Supporting Material\EM Templates\UserSelectable need to be copied to C:\ProgramData\EUROMOD\UserSelectableTemplates (folder "UserSelectableTemplates" needs to be created first). diff --git a/EM_Help/HelpFiles/EM_BC_Introduction.htm b/EM_Help/HelpFiles/EM_BC_Introduction.htm deleted file mode 100644 index 78e457d..0000000 --- a/EM_Help/HelpFiles/EM_BC_Introduction.htm +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - -EUROMOD Basic Concepts - - - - -
- -

EUROMOD Basic Concepts

- -

What is EUROMOD?

- -

EUROMOD is a tax-benefit microsimulation model for the European Union (EU) that enables researchers and policy analysts to calculate, in a comparable manner, the effects of taxes and benefits on household incomes and work incentives for the population of each country and for the EU as a whole. As well as calculating the effects of actual policies it is also used to evaluate the effects of tax-benefit policy reforms and other changes on poverty, inequality, incentives and government budgets.

- -

What can EUROMOD do?

- -

EUROMOD can be used in many different ways in different contexts. Examples include:

- -
Standard
- - -
More advanced
- -
Data imputation
- -

For further information see https://euromod-web.jrc.ec.europa.eu/.

- -

 

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_BC_PresentationTaxBen.htm b/EM_Help/HelpFiles/EM_BC_PresentationTaxBen.htm deleted file mode 100644 index 755da8b..0000000 --- a/EM_Help/HelpFiles/EM_BC_PresentationTaxBen.htm +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -Presentation of countries' tax-benefit-systems - - - - -
- -

Presentation of countries' tax-benefit-systems

- -

Loading countries

- -

Clicking a flag in the user interface's Countries ribbon opens EUROMOD's representation of the respective -country's tax-benefit system. The countrys name and flag is shown right of the -Run EUROMOD button, to indicate which -country is loaded. Further countries can be loaded by clicking their flags. -Each country is represented in its own window and one can switch between these -windows by again clicking the respective flag or via the Windows taskbar.

- -

The EUROMOD spine

- -

The main part of the window displays the representation of -the country's tax-benefit system - at the time of opening in a collapsed state. -Thus it shows what in EUROMOD lingo is frequently referred to as the spine. The EUROMOD spine is the list of policies worked off in sequence when the -model performs its calculations. The term policies -refers as well to policies in a narrow sense, i.e. benefits and taxes, as to -special EUROMOD policies. These special policies for example define which -variables are contained in the output. See Special -EUROMOD policies below for further information. Each row of the spine -represents one policy.

- -

EUROMOD policies, functions and parameters

- -

Expanding a policy by clicking the little plus button left of the policy's -name allows viewing the implementation of the policy. A policy is implemented -by so-called functions. Each EUROMOD -function is a self-contained building block that has its own parameters and represents -a particular component of the respective policy. A typical social assistance -benefit may for example be implemented by a function that determines -eligibility for the benefit and a function that calculates the benefit amount -for all eligible units. In fact these two functions: a function that determines -eligibility/liability for benefits/taxes in a very general way and a function -that calculates a wide range of benefits/taxes are the two most frequently used -functions in EUROMOD. The purpose of using functions as building blocks of the -model is to provide a general structure, which can be seen as using a -standardised language to describe policy instruments. Once EUROMOD users are -accustomed to this language, their understanding of other (foreign) countries' -benefits and taxes, and how they are implemented in EUROMOD, improves -considerably. The parameters of a function can be viewed by expanding it using -the little plus button left of its -name. The section EUROMOD Functions gives a -detailed description of EUROMOD functions, including their use, the specific -behaviour and the parameters they provide to guide this behaviour. Expanded -policies and functions can be re-collapsed by the little minus buttons. Note that the policy and function worked on is -displayed in the status bar.

- -

EUROMOD systems

- -

The changes of a country's tax-benefit system over time are -captured by EUROMOD systems. A -EUROMOD system either reflects the tax-benefit rules for a specific policy year -(assuming annual adaptations of tax-benefit rules) or the rules for an actual -(planned) or imaginary reform scenario. The columns of the country's view -represent these EUROMOD systems. Thus the value of a specific parameter (e.g. -the rate of a particular tax band) for specific systems is defined at the -intersection points of the parameter's row and the respective systems' columns -(e.g. may take the value of 10% for the 2009-system and the value of 11% for -the 2010-system).

- -

The fact that policy reforms are not always as simple as -changing the value of a specific parameter is taken into account by so called switches. The intersection points of -policies and functions with the systems represent these switches, i.e. they allow to switch policies and functions on or -off dependent on the system. The switches -also provide the settings n/a, -standing for not applicable, and toggle, -standing for temporarily switched off. More detailed explanations of these -settings can be found in the section EUROMOD -Functions - Common Parameters.

- -

Special EUROMOD policies

- -

As mentioned above, the EUROMOD spine comprises policies, -which do not describe e.g. a tax or benefit. Instead they implement -definitions, which are necessary for the model's calculation.

- - - -

The listed policies are standard, that means they are -implemented for each country contained in EUROMOD. Some countries contain -further special policies like for example ConstDef_cc, -which defines basic values, which are used all over the implementation, e.g. -minimum income amount, pension age, etc.

- -

Technically there is no difference between special policies -and standard policies, both use functions for their implementation and both -need to be listed in the spine to be performed. Thus calling them special is -just a matter of better comprehensibility. Moreover, the functions, which are in -principle dedicated for the implementation of a special policy, like the -function DefIL for the policy ILDef_cc, can be used in any other -policy as well, if this seems appropriate.

- -

 

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_BC_UserInterface.htm b/EM_Help/HelpFiles/EM_BC_UserInterface.htm deleted file mode 100644 index 81bb813..0000000 --- a/EM_Help/HelpFiles/EM_BC_UserInterface.htm +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - -The EUROMOD user interface - - - - -
- -

The EUROMOD user interface

- -

The EUROMOD user interface is the central accession point of -the model. Its purpose is to help users to orientate themselves within the -options provided by the model and around the model.

- -

The user interface's main window shows the following -components:

- - -

 

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_FC_ParameterTypes.htm b/EM_Help/HelpFiles/EM_FC_ParameterTypes.htm deleted file mode 100644 index e2161ca..0000000 --- a/EM_Help/HelpFiles/EM_FC_ParameterTypes.htm +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -Types of parameter values - - - - -
- -

Types of parameter values

- -

Apart -from classifying parameters with respect to their functionality (i.e. affecting -output, limiting result, etc.) or into compulsory/optional, there is another -possible grouping. Parameters can be classified by the values they take as -follows:

- -

Yes/no parameters

- -

Such parameters allow only for two values: yes (or 1) and no (or 0).

- -

Amount parameters

- -

Amount parameters take either monetary or non-monetary -amounts. Example 1 shows the tax schedule of a simple income tax policy. There -are two bands: one for taxable income below 5,000 Euro annually and one for -income above this amount. For the first band a tax of 10% of taxable income is -due, for the second the rate is 25%. The parameters band_uplim and band_rate are amount parameters, where the former -takes monetary amounts and the latter non-monetary amounts.[1]

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Example 1:
PolicyGrp/NoSL_demoComment
SchedCalcontax schedule
baseil_taxableY
band_upLim15000#yfor annual taxable income up to 5,000
band_rate10.1the tax amounts to 10% of taxable income
band_rate20.25and 25% for income above this amount
output_vartin_s
TAX_UNITtu_individual_sl
- -

Usually amount parameter values are -followed by their "period", for example the band limit of 5000 is -followed by #y for yearly. EUROMOD internally converts -all amounts to monthly, e.g. the 5000 are divided by 12. It is good practise to -always indicate a period, though #m for monthly has -no real effect, as no conversion to monthly is necessary. It is however more -transparent to explicitly state whether amounts are annual, monthly or some -other period. Of course there are amounts where a period does not make sense, -as for example for the two rate parameters or capital values.

- -

The period can take on the following values:

- - -

Moreover each period can be used with r for rate, e.g. #mr for monthly rate. Rules for -conversion are the same.

- -

Note that, despite of numbers, constants as defined -by func_DefConst can be used as amount parameter values.

- -

Variable parameters

- -

Variable parameters take EUROMOD -variables as values (see EUROMOD Basic Concepts - EUROMOD terminology). -In most of the examples we come across a very important variable -parameter, the parameter output_var. -If variable parameters are used with an assessment unit that comprises more -than one person the question arises how to interpret this. This issue is dealt -with in section EUROMOD Functions - -Parameter values and the assessment unit.

- -

Incomelist parameters

- -

Incomelist parameters take EUROMOD -incomelists as values. Incomelists -are important EUROMOD concepts. They are usually defined in the special policy ILDef_cc of a countrys -parameter file (see EUROMOD Basic -Concepts - Presentation of countries' tax-benefit-systems). Section EUROMOD Functions - The system function DefIL describes how to define an incomelist. -Generally speaking an incomelist is a variable, which -is composed of other variables, e.g. the incomelist il_earns may be the sum of the -variables yem (y=income, em=employment) and yse -(se=self employment). The name of an incomelist by convention starts with il_ or ils_, -where il_ is used for "normal" incomelists -and ils_ for system incomelists. The -latter are incomelists, which exist in all countries -models and have a certain definition, for example ils_dispy is the incomelist -for disposable income as defined in EUROMOD. In principle incomelists -(once defined) are applied in the same way as variables, therefore there is roughly -any parameter which takes only incomelists but not -variables. Which leads to the next type ...

- -

Variable-incomelist parameters

- -

A few parameters take as well variables as incomelists as values. As an example, the parameter Share_Prop of the -function Allocate -features this type.

- -

Name parameters

- -

Such parameters allow for indicating names, e.g. the name of -a file, incomelist, etc. As an example, the parameter -File of the function DefOutput is a name -parameter, taking the name of the output file.

- -

Query parameters

- -

EUROMOD offers a couple of so-called "queries" -which allow for more complex questions, as for example how many children are -there in the assessment unit. These queries are listed and described in the -section EUROMOD Functions - Queries. The result -of a query is either yes or no, e.g. for the query IsLoneParent, or some (monetary or non monetary) value, e.g. for the queries GetPartnerIncome respectively nDepChildrenInTu. Actually, -there are no "pure" query parameters, i.e. parameters that only take -queries as their values, rather queries are usually -used within formulas and conditions. Which leads to the next -two types ...

- -

Formula parameters

- -

Formula parameters are in fact little calculators. Example 2 -shows a somewhat more complex application, by calculating a benefit for persons -in education, amounting to 500 Euro monthly, supplemented by half of the -expenditure on education. Any other education benefit is deducted from the -resulting amount, where a lower limit ensures that no negative benefit results. -For determining whether a person is in education the formula applies a query (IsInEducation), the basic -benefit is indicated as monetary amount (500#m), the supplement for expenditure on education is calculated -by using a variable (xed) -and dividing it by a non monetary amount (2). Finally, an incomelist is -used to determine other education benefits (il_OthEducBen).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Example 2:
PolicySL_demoComment
ArithOpon
formulaIsInEducation * (500#m + xed / 2) il_OthEducBen
lowlim0
output_varstm01_s
TAX_UNITtu_individual_sl
- -

In general formula parameters take -amounts (monetary and non monetary), variables, incomelists and queries as operands and combine them by -simple arithmetic operations to calculate some result. Consequently, formula -parameters can be used as amount, variable, incomelist -and query parameters (by using just one operand of the respective type and no -arithmetic operations). In fact, there are no pure query parameters and very -few pure amount and incomlist parameters. Section EUROMOD Functions - The policy function ArithOp provides a more detailed description of the -formula parameter.

- -

Condition parameters

- -

Similar to formula parameters condition parameters take -amounts, variables, incomelists and queries as -operands. However, they combine them by logical and comparison operators to -evaluate a condition with a yes/no result. Example 3 shows a somewhat -more complex application, which tests whether there is at least one dependent -child in the family and if so, whether earnings are below 15,000 Euro annually -or unemployment benefits are received. A more detailed description of condition -parameters is provided in the section EUROMOD Functions - The policy function Elig.

- - - - - - - - - - - - - - - - - - - - - - - - -
Example 3:
PolicySL_demoComment
Eligon
elig_cond{nDepChildrenInTu>1} & ({il_earns<15000#y} | {bun>0})
TAX_UNITtu_sben_family_sl
- -

Taxunit parameters

- -

A few parameters take assessment units as their values, the most important is the parameter TAX_UNIT, which is described in more detail in section EUROMOD Functions - Common Parameters. -The name of assessment units by convention starts with tu_.

- -

Categorical parameters

- -

Some parameters take a limited number of defined values, as -for example the parameter who_must_be_elig, -taking the values one_member -/ one_adult / all_members / all_adults (also see section EUROMOD Functions - Common Parameters).

- -

Footnote parameters

- -

Finally, there are parameters, which serve the further -specification of other parameters. They can be easily identified by names -starting with the character #, e.g. #_amount. The application of such parameters is described -in detail in section EUROMOD Functions - -Footnote parameters for the further specification of operands.

- -

 

- -
- -
- -
- -

[1] -Actually, the parameters are formula parameters. They are -used for exemplification here because there are rarely any pure amount -parameters.

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_WW_AdministratingAcronyms.htm b/EM_Help/HelpFiles/EM_WW_AdministratingAcronyms.htm deleted file mode 100644 index f2f773e..0000000 --- a/EM_Help/HelpFiles/EM_WW_AdministratingAcronyms.htm +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -Acronym Administration - - - - -

Acronym Administration

- -

The following operations are performed with the variable administration tool. To open this -tool press the button Variables in -the ribbon Administration Tools (also -see Working with EUROMOD -- Administration of EUROMOD variables paragraph Administrating variables and acronyms in the EUROMOD user interface).

- -

Listing of acronyms

- -

The variable administration tool lists in its right part all -acronyms available for generating variable names (see the Data Requirement -Document (DRD) for detailed information concerning the generation of variable -names). The acronyms are organised in a tree with three levels. The first level -exhibits the variable type, i.e. DEOMOGRAPHIC, TAX, INCOME, etc. The -second level subdivides types into levels. The levels mainly serve a better -overview.[1] -Finally, the third level shows the acronyms themselves together with a verbal -description, which is used to generate the Automatic -Labels of the variables, which use the respective acronyms. If an acronym -is categorical (e.g. gender has two categories: male and female), selecting -this acronym in the Acronyms list -displays the categories in the Categories -list (locate below the Acronyms list).

- -

Adding types

- -

Click the button Add -Type in the ribbon Acronyms of -the variable administration tool. Alternatively use the key combination Alt-T. This appends a new empty type row -at the end of the Acronyms list.

- -

Changing types

- -

To change a type's Description -(DEOMOGRAPHIC, TAX, INCOME, etc.) or Acronym -(D, T, Y, etc.) simply edit the respective cell. In the case of changing the Acronym the interface checks if the Acronym is already used by another type -and, if so, issues a respective message and prevents the change to avoid -ambiguousness. Moreover, the interface checks whether the Acronym is used in the current listing of variables. If so, a -warning is issued, which lists the variables concerned. The user is still able -to accomplish the change, however the description (Automatic Label) of the variables will -show up question marks to indicate unknown acronyms.

- -

Deleting types

- -

Select the type to delete and click the button Delete Type in the ribbon Acronyms of the variable administration -tool. Alternatively use the key combination Ctrl-Shift-T. -The interface checks whether this type is used in the current listing of -variables. If so, a warning is issued, which lists the variables concerned. The -user is still able to accomplish the removal, however -the description (Automatic Label) of -the variables concerned will show up question marks to indicate unknown -acronyms.

- -

Adding levels

- -

Click the button Add -Level in the ribbon Acronyms of -the variable administration tool. Alternatively use the key combination Alt-L. This adds a new empty level row. -Note that, other than for types and acronyms, the order of levels is relevant, -thus the interface does not simply append the row, but uses the selected row as -orientation: if another level row or an acronym row is selected, the new row is -inserted below the respective level. If a type row is selected, the level is -inserted as the first level of this type.

- -

Changing levels

- -

To change a level's description, -simply edit the respective cell. Note that, other than types and acronyms, levels -do not possess an Acronym (thus the -respective cell is not editable), reflecting that levels are not directly used -in generating the Automatic Label of -variables.[2]

- -

Deleting levels

- -

Select the level to delete and click the button Delete Level in the ribbon Acronyms of the variable administration -tool. Alternatively use the key combination Ctrl-Shift-L. -The interface checks whether acronyms of this level are used in the current -listing of variables. If so, a warning is issued, which lists the variables -concerned. The user is still able to accomplish the removal, -however the description (Automatic Label) -of the variables concerned will show up question marks to indicate unknown -acronyms.

- -

Adding acronyms

- -

Select the level, where to add the new acronym (or select -another acronym within the level) and click the button Add Acronym in the ribbon Acronyms -of the variable administration tool. Alternatively use the key combination Alt-A. This appends a new empty acronym -row at the end of the level.

- -

Changing acronyms

- -

To change an acronym's Description -(age, gender, etc.) or Acronym (AG, -GN, etc.) simply edit the respective cell. In the case of changing the Acronym the interface checks if the -acronym is already used within this type or is incorrect, i.e. does not consist -of two characters. If so, a respective message is issued and the change is -prevented to avoid ambiguousness. Moreover, the interface checks whether an -acronym is used in the current listing of variables. If so, a warning is -issued, which lists the variables concerned. The user is still able to -accomplish the change, however the description (Automatic Label) of the variables -concerned will show up question marks to indicate unknown acronyms.

- -

Deleting acronyms

- -

Select the acronym to delete and click the button Delete Acronym in the ribbon Acronyms of the variable administration -tool. Alternatively use the key combination Ctrl-Shift-A. -The interface checks whether the acronym is used in the current listing of -variables. If so, a warning is issued, which lists the variables concerned. The -user is still able to accomplish the removal, however -the description (Automatic Label) of -the variables will show up question marks to indicate unknown acronyms.

- -

Searching acronyms

- -

The Search buttons at the top right of the -ribbon Acronyms allow for searching -acronyms.

- - -

 

- - - -
- -
- -

[1] -The level also plays a role in the naming rules of -variables. For more information see Working -with EUROMOD - Administrating variables.

- -

[2] -They are used indirectly by determining the order of acronyms. For more -information see Working with -EUROMOD - Administrating variables.

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_WW_AdministratingVariables.htm b/EM_Help/HelpFiles/EM_WW_AdministratingVariables.htm deleted file mode 100644 index f3e728b..0000000 --- a/EM_Help/HelpFiles/EM_WW_AdministratingVariables.htm +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -Administrating Variables - - - - -

Administrating Variables

- -

The following operations are performed with the variable administration tool. To open this -tool press the button Variables in -the ribbon Administration Tools (also -see Working with EUROMOD - Administration of -EUROMOD variables paragraph Administrating -variables and acronyms in the EUROMOD user interface).

- -

Adding variables

- -

Click the button Add -Variable in the ribbon Variables of -the variable administration tool. Alternatively use the key combination Alt-V. This adds an empty row to the -list of variables. At first instance the row is added below the selected row. -Note, however, that resorting the list (manually or by an automatic update due -to another change) moves empty rows to the beginning (ascended sorting) or end -(descended sorting) of the list of variables.

- -

Changing the name of a -variable

- -

The name of a variable is changed by simply editing the -respective cell.

- -

If the name of an existing variable is edited, the acronyms -currently used by this variable are highlighted in the list of acronyms. This -indicates which acronyms can furthermore be used and which not. In this -context, note that only acronyms of the same or a higher level as its precedent -acronyms can be appended. See the Data Requirement Document (DRD) for detailed -information concerning the generation of variable names.

- -

Once editing is finished, the interface checks the validity -of the new name. Firstly, it checks whether the type and acronyms used exist. -Secondly, it checks whether the order of acronyms is correct. Finally, it -checks whether this name already exists. If any of the checks fails a -respective warning is issued, but it is still possible to accomplish the change. -The interface automatically updates the variable's description (Automatic Label). For unknown types or -acronyms question marks are displayed.

- -

Note that changing the name is only possible without -warning, if the variable was added during the current session of the -administration tool. For existing variables a message warns about possibly -renaming a variable used in country implementations.

- -

Changing the monetary -state of a variable

- -

To change the state of a variable from non-monetary to -monetary or vice-versa, check respectively uncheck the box alongside the -variable name.

- -

Changing the country -specific descriptions of a variable

- -

If a variable is selected, the Descriptions list (located below the Variables list) shows country specific descriptions for this -variable. These descriptions can be changed by simply editing the respective -cells.

- -

Deleting variables

- -

Select the variable to delete and click the button Delete Variable in the ribbon Variables of the variable administration -tool. Alternatively use the key combination Ctrl-Shift-V. -A message is issued to warn about possibly deleting a variable used in country -implementations. This warning is however not shown, if the variable was added -in the current session of the administration tool (and therefore cannot be used -yet).

- -

Filtering variables

- -

To obtain a better overview the variables listed can be -reduced to those having certain properties (monetary / non-monetary, taken from -data / generated by the model) and types (DEMOGRAPHIC, LABOUT MARKET, ..., -UNKNOWN). Moreover, variables can be restricted to those having a country -specific description (for a specific country or for any country). Select the -respective properties and/or types and click the button Apply Filters to list the variables fulfilling the criteria.

- -

The buttons Select All -Filters and Unselect All Filters -serve the easier selection of filters by generating an original state (all -filters selected or no filters selected) that then can be refined as required.

- -

Sorting variables

- -

By clicking the header of the Name column variables are sorted by name. A second click changes -the sorting direction (from ascending to descending and vice versa). Variables -can also be sorted by Automatic Label, -but the result will not differ much from sorting by name.

- -

Searching variables

- -

The Search button -at the top right of the ribbon Variables -allows for checking the existence of the variable as specified in the field -above the button. Note that it is possible to use the search patterns ? and *, where ? stands for one -arbitrary character and * for any -number of arbitrary characters. The search will select the first visible match -of the search pattern. If more than one occurrence is found or if the only occurrence -is hidden due to filtering, an info box appears showing all the matches. Hidden -matches will appear in dark grey colour. Visible matches will appear in black colour -(blue when hovered) and clicking them will select the corresponding variable in the -variables table. Also note that a full variable description tooltip appears if you -hover the mouse over any of the matches.

- -

 

- - - - - - diff --git a/EM_Help/HelpFiles/EM_WW_Applications.htm b/EM_Help/HelpFiles/EM_WW_Applications.htm deleted file mode 100644 index 061c04d..0000000 --- a/EM_Help/HelpFiles/EM_WW_Applications.htm +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -Applications - - - - -

Applications

- -

The user interface provides access to a couple of external -tools implemented in MS-Excel. Currently available are a tool for generating -hypothetical EUROMOD input data and a tool using EUROMOD's output for drawing -budget constraint graphs. To access the tools, select the ribbon Applications and press the respective -button.

- -

 

- - - - - - diff --git a/EM_Help/HelpFiles/EM_WW_ComponentUse.htm b/EM_Help/HelpFiles/EM_WW_ComponentUse.htm deleted file mode 100644 index b42af9a..0000000 --- a/EM_Help/HelpFiles/EM_WW_ComponentUse.htm +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - -Checking component use - - - - -

Checking component use

- -

Selecting the ribbon Country -Tools and pressing the button Component -Use opens the Component Use -dialog. This dialog allows for checking which "components" are used for -the implementation of the country in EUROMOD. The following components can be -included into the check:

- -

Included components

- -

Variables: -If this option is selected all EUROMOD variables, as listed in the variables -file, are included into the check. As the checking for the use of all variables -may cause that the check takes quite a lot of time, the variables can be -restricted to those having country -specific description. For closer information see Working with EUROMOD - Administration of EUROMOD -variables. Moreover, the check-boxes monetary, -non-monetary, simulated and non-simulated -allow for further restriction to the variables which feature the respective -characteristics.

- -

Assessment Units: Selecting this option includes assessment units in the check -(see EUROMOD Basic Concepts - EUROMOD -terminology).

- -

Incomelists: Selecting this option includes incomelists in the check (see EUROMOD Basic Concepts - EUROMOD terminology).

- -

Queries: -Selecting this option includes EUROMOD queries in the check (see EUROMOD Functions - Queries).

- -

Component named: This option allows for checking the use of a specific -component, i.e. a specific variable, assessment unit, incomelist -or query. Moreover, it allows for checking the use of variables and constants -generated with the functions DefVar and DefConst (which are not -taken into account by the option All Variables).

- -

Ignore if Switched Off: -Selecting this option means that components solely used in switched off -policies respectively functions are not recognised as used.

- -

Include Systems: The list allows for -restricting the check for usage to the selected systems.

- -

Listing of used components

- -

Pressing the Start -button starts the check. A progress bar is displayed to inform about the time -still necessary for the check. Once the check is finished, components as -selected are listed if they are used in the implementation of the country. If a -component is used several times, it is listed as often as it is used, each time -with the respective location of the use.

- -

Jumping to a component

- -

Selecting a specific use of a component and pressing the -button Goto -closes the dialog to jump to the selected use in the country's implementation. -If the dialog is reopened (by pressing the button Component Use) it still shows the content of the last check, i.e. -jumping to a component does not "destroy" the results of the check. -The results of the last check are in general only cleared by a new check, but -not for example by closing the dialog.

- -

Storing results

- -

Pressing the Store -button allows for specifying a file where the current listing of component -usage is stored in tabulated text format.

- -

 

- - - - - - diff --git a/EM_Help/HelpFiles/EM_WW_FindingErrors.htm b/EM_Help/HelpFiles/EM_WW_FindingErrors.htm deleted file mode 100644 index d4949db..0000000 --- a/EM_Help/HelpFiles/EM_WW_FindingErrors.htm +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - -Finding an error - - - - -

Finding an error

- -

An error message of the EUROMOD executable has about the -following format:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Error:Variable or incomelist 'borer' not defined.
System:at_2011
Policy:tin_at; row 7
Function:arithop; row 7.3
Parameter:formula; row 7.3.2
Value:borer
Identifier:b10e103f-0652-4a77-b2ec-d021636b98f4
- -

The error can be found in the user interface by either looking -for the indicated row numbers or by searching the parameter or function by its -identifier. The Search by Identifier -dialog serves the latter approach. To open the dialog, select the ribbon Country Tools and press the button Search by ID in the Search group. Copy the Identifier -(b10e103f-0652-4a77-b2ec-d021636b98f4 in the example) from the error message to -the field Identifier and press Find to jump to -the component.

- -

Note that the dialog does not support finding an error, -which was produced by running a system with an add-on (see Working with EUROMOD - Running EUROMOD paragraph -Running add-on systems). In the case -of add-on-systems the row numbers indicated by the error message refer to the -order in which components are actually processed. This order is generated at -run-time and therefore not visible "from outside". Similar is true -for the identifier, as it is internally generated by the user interface and not -visible from outside either.

- -
Some comments on EUROMOD's error reporting
- -

EUROMOD distinguishes two phases of error handling and two -(actually three) types of errors. Error handling phase one comprises reading -and checking parameters and reading data let's refer to it as read-time while phase two concerns -computing the necessary calculations and outputting results let's refer to it -as run-time. The two types of errors are critical and non-critical -errors (the latter also referred to as warnings).

- -

During read-time the model gathers all errors, independent -of type, without stopping. Once the phase is finalised it always stops if there -are critical errors, to issue respective error messages. If there are only -non-critical errors it only stops if the box Do not stop on non-critical errors in the Advanced Options of the Run -EUROMOD dialog is unticked (see Working with EUROMOD Running EUROMOD paragraph -Advanced settings), otherwise and -of course if there are no errors it continues. During run-time EUROMOD always -stops immediately once a critical error occurs. Whether it stops on -non-critical errors again depends on ticking Do not stop on non-critical errors: if not ticked it stops -immediately, if ticked it continues and issues the gathered error messages -after finishing the phase or once a critical error occurs. Finally, above a -third type of error was mentioned this concerns "very critical" -errors, which necessitate an immediate stop, independent of the phase.

- -

Concluding, it may be informative to learn, which errors are -classified as critical respectively non-critical by the model. Intuitively -speaking one could say that EUROMOD is very strict during read-time and -classifies most errors as critical. In contrast the model is rather lenient -during run-time and considers errors as non-critical, as long as it finds a way -to continue its calculations (warnings inform about the respective handling in -their error message). The motivation for this is found in the fact that phase -two takes much longer than phase one, i.e. the model tries to immediately -inform the users after the short read-time that something went wrong, while -they may confidently go for a coffee during run-time and will get a summary of -errors once they are back. In reality running one system of a country (with a -not too big dataset) usually takes a few minutes, which is unfortunately too -short for the coffee. However, one could imagine a reform that comprises a lot -of countries, systems or loops. In that case the user may first get the -parameters right and have time for her coffee, while running this big reform.

- -

 

- - - - - - diff --git a/EM_Help/HelpFiles/EM_WW_ImportingCountries.htm b/EM_Help/HelpFiles/EM_WW_ImportingCountries.htm deleted file mode 100644 index 5d0a4f3..0000000 --- a/EM_Help/HelpFiles/EM_WW_ImportingCountries.htm +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - -Importing countries - - - - -

Importing countries

- -

To import a country to EUROMOD select the ribbon Administration Tools and click the -button Import Country. This opens a -dialog which requests two pieces of information:

- -
Import Country Folder
- -

This folder -is supposed to contain the country's XML-files (see EUROMOD Installation and Architecture - EUROMOD -content (parameter files) - Format of country parameter files). You can type -the Import Country Folder or select -it with the search dialog, opened by pressing the button alongside the field.

- -

Moreover, the folder may -contain the countrys flag as an image file named cc.png.[1] If -the folder does not contain a flag image, a default image with a question mark -will be used.

- -
Short Name
- -

If the country does not already -exist, the Short Name is the name of -the Import Country Folder.[2] For -example, if you are importing Barbados the short name would probably be BB. If the country is another version of -an existing country, the Short Name indicates -an alternative short name for this second version. For example, if you are -using an alternative version of Belgium you may indicate B2 as Short Name.

- -

Confirming the specifications with OK imports the country[3] -and instructs you to go to the country gallery (i.e. the ribbon Countries) to load the imported country.

- -

 

- - - -
- -
- - -

[1] cc stands for the country's short name (e.g. FR -for France, EL for Greece, ...). The flag ought to be -in portable network graphic format (png) and is ideally -sized 28x17 pixels.

- - -

[2] and the country's acronym as used in the names of the country's XML- and -flag-files.

- - -

[3] That means the user interface copies the folder into the countries' -folder. Moreover, if the Short Name is -different from the name of the Import -Country Folder, it does all the renaming of files and adapting of parameter -files for you.

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_WW_ImportingVariables.htm b/EM_Help/HelpFiles/EM_WW_ImportingVariables.htm deleted file mode 100644 index 9827118..0000000 --- a/EM_Help/HelpFiles/EM_WW_ImportingVariables.htm +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - -Importing variables - - - - -

Importing variables

- -

The following operations are performed with the variable administration tool. To open this -tool press the button Variables in -the ribbon Administration Tools (also -see Working with EUROMOD -- Administration of EUROMOD variables paragraph Administrating variables and acronyms in the EUROMOD user interface).

- -

To import variables from an external variables definition -file (VarConfig.xml) select the item Import -Variables from the variables administration tool's menu. This firstly -allows the selection of the external variables definition file. Once the file -is chosen, a dialog shows the possible changes, i.e. differences between the -user interfaces internal variables definition file and the external one. This -means, the dialog lists the variables and acronyms either existing only in the -internal respectively external variables definition file or have different -attributes in the two files.

- -

Note that importing variables is only possible if no changes -were accomplished in the current session of the variables administration tool, -otherwise the menu item is disabled. In this case close and open the tool -again, saving the changes if required.

- -

Also note -that, to begin with, it is assumed that the user wants to overtake all -modifications from the external variables definition file. Respective changes -are suggested in the Action columns. -This behaviour can be changed by ticking/unticking -the checkboxes in the Perform -columns. This is supported by three buttons, which aim to make selecting more -efficient.

- - -

List of possible changes in variables

-

The left part of the -dialog shows which variables are different in the external and the internal -variables definition file. There are following types of differences:

- -

List of possible -changes in acronyms

-

The right part of the dialog shows which acronyms -are different in the external and the internal variables definition file. There -are following types of differences:

- -

Performing the import

-

To accomplish the import, tick the checkboxes in the Perform columns as required, and press -the button Import. For -variables you can tick or untick several Perform boxes at once by first selecting -the respective rows and then clicking the buttons Tick selected variables respectively Untick selected variables.

- -

Note that it is not possible to undo the import via the -undo-functionality. However, there is no automatic saving of the variables -definitions file. That means closing the variables administration tool without -saving can still restore the old state.

- -

 

- - - - - - diff --git a/EM_Help/HelpFiles/EM_WW_Plugins.htm b/EM_Help/HelpFiles/EM_WW_Plugins.htm deleted file mode 100644 index 5e0dfe2..0000000 --- a/EM_Help/HelpFiles/EM_WW_Plugins.htm +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - -EUROMOD -PLUGINS - - - - -

EUROMOD -PLUGINS

- -

-Plug-ins are software components that extend the functionality of EUROMOD. While the core user interface concentrates on supporting the implementation, adaptation and running of countries' tax-benefit systems, plug-ins provide additional features like producing basic summary statistics, performing microvalidation, or generating hypothetical datasets. In the official release of v1.10 the only publicly available plug-in is the "Summary Statistics", but many more will be added in future releases to accommodate task-specific needs. -

- - - - - - - - diff --git a/EM_Help/HelpFiles/EM_WW_SearchReplace.htm b/EM_Help/HelpFiles/EM_WW_SearchReplace.htm deleted file mode 100644 index f2e8edb..0000000 --- a/EM_Help/HelpFiles/EM_WW_SearchReplace.htm +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -Searching -and replacing - - - - -

Searching -and replacing

- -

Selecting the ribbon Country -Tools and pressing the button Search -+ Replace opens the Search and -Replace dialog. The dialog can also be accessed by pressing Ctrl-F to open it in the search mode and -by Ctrl-H to open it in the replace -mode.

- -

Searching

- -

To search for example for the string abc, type abc into the -field Search and press either the -button Search Next (or use the -key-combination Alt-N) or the button Search Previous (key-combination Alt-P). This finds the cell nearest to -the currently focused cell, which contains the string abc. Search Next finds the nearest cell after -and Search Previous finds the nearest -cell before the focused cell. "Finding" means that the respective -cell is focused (red-dotted border) and made visible by expanding the parent -nodes, if necessary, and scrolling to the position of the cell.

- -

It is possible to use search patterns. That means ? can be used for symbolising one arbitrary character and * for symbolising any number of arbitrary -characters. bch??_s, for example, finds bch00_s, bch01_s, bchba_s, ..., bchyc_s, while bch*_s -finds the listed strings as well as bch_s, bchba01_s, -..., bchucrg_s.

- -

Note that any searched string or pattern is stored by the -dialog, in the sense that one can pick it from the list, which is displayed by -clicking the arrow button right of the Search -field.

- -

Specifying the search

- -

The Search and Replace -dialog offers several options to specify the search:

- -
Search in ... Cells
- - -
Search in ... Columns
- - -
Search by ...
-

As a default (option Search by Columns) the search first -finds all occurrences of the searched string or pattern in the first (affected) -column, to then find all occurrences in the second column, etc. Selecting the -option Search by Rows effects that -the search first finds all occurrences in the first (affected) row, to then -find all occurrences in the second row, etc.

- -
Match Case
-

As a default the search is not -case sensitive. Ticking the box Match -Case enforces case sensitivity.

- -
Match Entire Cell Content
-

As a default the -searched string or pattern does not need to be the only content of the found -cells. For example yem -finds a cell containing yem -as well as a cell containing yem*10%. Ticking -the box Match Entire Cell Content effects -that only cells, which contain only the searched string or pattern are found -(i.e. the first match in the example).

- -
Include Private Comments
-

As a default the -search does not include private comments (see Working with EUROMOD Private comments). -Ticking the box extends the search to jump to the respective cell in the Comment column, if the private comment matches -the search criteria. Note that the box is not available in replace mode.

- -

Replacing

- -

Pressing the button Replace ... displays the field Replace by and the button Replace All. The field Replace by allows for indicating a -string by which the string in the field Search -is replaced. To start (single) replacing, press Search Next to find the first match.[1] -Then press Replace to replace Search by Replace by in the found cell. This moves the focus automatically to -the next matching cell (where Replace -can be pressed again).

- -

Pressing the button Replace All replaces all occurrences of Search by Replace by, taking into account the following restrictions (which -also apply to single replacement).

- -

The Search and Replace dialog does not provide a Search All option, however a similar functionality is provided by -the Component Use dialog with the -option Component named (see Working with EUROMOD - Checking component use).

- -

 

- - - -
- -
- -

[1] -Note that you need to start the replacing by focusing a cell that matches Search - otherwise an error message is -issued.

- -
- - - - diff --git a/EM_Help/HelpFiles/EM_WW_Variables.htm b/EM_Help/HelpFiles/EM_WW_Variables.htm deleted file mode 100644 index 24050c4..0000000 --- a/EM_Help/HelpFiles/EM_WW_Variables.htm +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -Administration -of EUROMOD variables - - - - -

Administration -of EUROMOD variables

- -

EUROMOD -variables in a nutshell

- -

All countries implemented in EUROMOD use the same set of -variables to store information taken from input data as well as generated by -the model. For example, a variable called yem is used by each county to -store employment income (taken from input data). As another example, a variable -called bch_s -stores child benefits calculated by the model. This approach does not only care -for high comparability over countries but also supports exchangeability in -facilitating task like, for example, taking some policy measure from one -country and implementing it in another.

- -

At first view the names of EUROMOD variables may seem rather -none intuitive (e.g. dag for age). In -fact, the names follow an elaborated naming scheme, which is described in -detail in the Data Requirement Document (DRD). This brief description confines -itself to mentioning some features, which are useful in identifying the meaning -of a variable:

- -EUROMOD variables are stored in a special EUROMOD parameter -file, the variable description file VarConfig.xml (see EUROMOD Installation and Architecture - EUROMOD -content (parameter files) - Organisation of files for the storage -place and EUROMOD Installation and Architecture - EUROMOD content (parameter -files) - Format of the variables file for the content of this file). The file -contains the names of the available variables together with their properties. -Some of the properties serve the model to distinguish if certain routines -should be applied on the variable, for example only monetary variables are -up-rated. Others are mere information, for example, there is a verbal -description of each variable (Automatic -Label), and a special description for each country. Moreover, the variable -description file stores the acronyms of which the variable names are composed.

- -

Note that in addition to these standardised variables, there -are variables which are defined during the model run using the functions DefVar -and DefConst (see EUROMOD -Basic Concepts EUROMOD terminology paragraph EUROMOD variables).

- -

Administrating -variables and acronyms in the EUROMOD user interface

- -

The EUROMOD user interface provides a tool, which allows -administrating the information stored in the variable description file. To -assess this tool press the button Variables -in the ribbon Administration Tools.

- -

The left part of the tool's surface shows the list of all -available EUROMOD variables. For each variable there is a -checkbox indicating whether the variable is monetary (checked) or not (not -checked) and a verbal description. This description is called Automatic Label, indicating that it is -automatically generated out of the acronyms building the variable's name, thus -the user cannot edit it. Moreover, if a variable is selected, country specific -descriptions are listed below the list of variables. These descriptions are -editable.

- -

The right part of the tool's surface shows all available -acronyms organised in a tree in three levels. The first level exhibits the type -as described above (benefit, tax, income, ...). The -second level subdivides types into so called "levels". The levels -mainly serve a better overview.[1] -Finally, the third level shows the acronyms themselves together with a verbal -description, which is used to generate the Automatic -Labels of the variables using the respective acronym. If an acronym is -categorical (e.g. gender has two categories: male and female), selecting the -acronym lists the respective categories below the list of acronyms.

- -

Note the possibilities of adapting the size of the window, -and therewith the lists, according to your -requirements. In particular note that the window is vertically tiled, i.e. if -you move the mouse between the upper (Variables, -Acronyms) and lower lists (Descriptions, -Categories) a cursor appears, which allows to resize the upper and lower -window part.

- -

 

- - - -
- -
- -

[1] The level also plays a role in the naming rules of -variables. For more information see Working -with EUROMOD - Administrating variables.

- -
- - - - diff --git a/EM_Help/HelpFiles/EUROMODHelp.hhc b/EM_Help/HelpFiles/EUROMODHelp.hhc deleted file mode 100644 index eec3a06..0000000 --- a/EM_Help/HelpFiles/EUROMODHelp.hhc +++ /dev/null @@ -1,838 +0,0 @@ - - - - - - - diff --git a/EM_Help/HelpStructure/Gaensefuesschen/Gaensefuesschen.exe b/EM_Help/HelpStructure/Gaensefuesschen/Gaensefuesschen.exe deleted file mode 100644 index 11e36d4d7a86a9f0bb34dc250e6c3d6617e4e981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10568 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 xE>h@^S8)8YS{U{2+dL#A$KJDYowC`YrE ILS_ALL = new List() { ILS_ORIGY, ILS_PEN, ILS_BENMT, ILS_BENNT, ILS_TAX, ILS_SICEE, ILS_SICSE, ILS_SICOT, ILS_SICER, ILS_SICCT, ILS_EXTSTAT_OTHER }; + + // The hardcoded rows for the Distributional (Inequality & Poverty) tables + public static List> ROWS_INEQUALITY = new List>() { new List() { "D1", "Decile 1" }, new List() { "D2", "Decile 2" }, new List() { "D3", "Decile 3" }, + new List() { "D4", "Decile 4" }, new List() { "D5", "Decile 5" }, new List() { "D6", "Decile 6" }, new List() { "D7", "Decile 7" }, + new List() { "D8", "Decile 8" }, new List() { "D9", "Decile 9" }, new List() { "D10", "Decile 10" }, new List() { "Median", "Median" }, + new List() { "Mean", "Mean" }, new List() { "Gini", "Gini" }, new List() { "S8020", "S80/S20" } }; + + public static List> ROWS_POVERTY = new List>() { new List() { "Total40", "40% Median - Total" }, new List() { "Male40", "40% Median - Males" }, new List() { "Female40", "40% Median - Females" }, + new List() { "Total50", "50% Median - Total" }, new List() { "Male50", "50% Median - Males" }, new List() { "Female50", "50% Median - Females" }, + new List() { "Total60", "60% Median - Total" }, new List() { "Male60", "60% Median - Males" }, new List() { "Female60", "60% Median - Females" }, + new List() { "Total70", "70% Median - Total" }, new List() { "Male70", "70% Median - Males" }, new List() { "Female70", "70% Median - Females" }, + new List() { "Age0_15", "60% Median - 0-15 years" }, new List() { "Age16_24", "60% Median - 16-24 years" }, new List() { "Age25_49", "60% Median - 25-49 years" }, + new List() { "Age50_64", "60% Median - 50-64 years" }, new List() { "Age65", "60% Median - 65+ years" } }; + + public const string DESTINATION_NONE = "None"; + public const string DESTINATION_ORIGINAL_INCOME = "OriginalIncome"; + public const string DESTINATION_TAXES_SIC = "TaxesSic"; + public const string DESTINATION_BENEFITS = "Benefits"; + public const string DESTINATION_INEQUALITY = "Inequality"; + public const string DESTINATION_POVERTY = "Poverty"; + public static readonly List DestinationTables = new List() { DESTINATION_NONE, DESTINATION_ORIGINAL_INCOME, DESTINATION_TAXES_SIC, DESTINATION_BENEFITS }; + public static readonly Dictionary IncomelistDefaultDestination = new Dictionary() + { + { ILS_ORIGY, DESTINATION_ORIGINAL_INCOME }, { OtherOriginalIncome, DESTINATION_ORIGINAL_INCOME }, { ILS_EARNS, DESTINATION_ORIGINAL_INCOME }, { ILS_PEN, DESTINATION_BENEFITS }, { ILS_BENMT, DESTINATION_BENEFITS }, { ILS_BENNT, DESTINATION_BENEFITS }, { ILS_TAX, DESTINATION_TAXES_SIC }, {ILS_SICEE, DESTINATION_TAXES_SIC }, {ILS_SICSE, DESTINATION_TAXES_SIC }, {ILS_SICOT, DESTINATION_TAXES_SIC }, {ILS_SICER, DESTINATION_TAXES_SIC }, {ILS_SICCT, DESTINATION_TAXES_SIC }, { ILS_EXTSTAT_OTHER, DESTINATION_NONE } + }; + + } +} diff --git a/EM_Libraries/EM_Common/Helpers/EM_Helpers_Convert.cs b/EM_Libraries/EM_Common/Helpers/EM_Helpers_Convert.cs index 952a599..eec8dca 100644 --- a/EM_Libraries/EM_Common/Helpers/EM_Helpers_Convert.cs +++ b/EM_Libraries/EM_Common/Helpers/EM_Helpers_Convert.cs @@ -30,8 +30,24 @@ public static string ConvertToString(double toConvert) public static string AdaptDecimalSign(string formula) { - char sep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; - return formula.Trim().Replace(sep == '.' ? ',' : '.', sep); + char decsep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; + return formula.Trim().Replace(decsep == '.' ? ',' : '.', decsep); + } + + public static string SetCleanInvariantNumberFormat(string formula) + { + char decsep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; + string grpsep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator; + formula = formula.Replace(grpsep, ""); + if (decsep != '.') formula = formula.Replace(decsep, '.'); + return formula; + } + + public static string SetRegionalFromInvariantNumberFormat(string formula) + { + char decsep = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]; + char decsepinv = System.Globalization.CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator[0]; + return formula.Replace(decsepinv, decsep); } } } diff --git a/EM_Libraries/EM_Common/Helpers/EM_Helpers_Pretty.cs b/EM_Libraries/EM_Common/Helpers/EM_Helpers_Pretty.cs index 9cef5ad..3c84f8e 100644 --- a/EM_Libraries/EM_Common/Helpers/EM_Helpers_Pretty.cs +++ b/EM_Libraries/EM_Common/Helpers/EM_Helpers_Pretty.cs @@ -9,7 +9,8 @@ public partial class EM_Helpers { public static string ShortCountryToFullCountry(string c) { - string fullCountry = "Unknown Country"; + //If the country is not known, the short name of the country will be displayed + string fullCountry = c; Dictionary allCountries = new Dictionary(StringComparer.OrdinalIgnoreCase) { {"AF", "Afghanistan"}, {"AL", "Albania"}, {"DZ", "Algeria"}, {"AS", "American Samoa"}, {"AD", "Andorra"}, {"AO", "Angola"}, {"AI", "Anguilla"}, {"AQ", "Antarctica"}, {"AG", "Antigua and Barbuda"}, {"AR", "Argentina"}, {"AM", "Armenia"}, {"AW", "Aruba"}, {"AU", "Australia"}, {"AT", "Austria"}, {"AZ", "Azerbaijan"}, {"BS", "Bahamas"}, {"BH", "Bahrain"}, {"BD", "Bangladesh"}, {"BB", "Barbados"}, diff --git a/EM_Libraries/EM_Common/PathAndEnvironment/EnvironmentInfo.cs b/EM_Libraries/EM_Common/PathAndEnvironment/EnvironmentInfo.cs index 42191f8..b6a799c 100644 --- a/EM_Libraries/EM_Common/PathAndEnvironment/EnvironmentInfo.cs +++ b/EM_Libraries/EM_Common/PathAndEnvironment/EnvironmentInfo.cs @@ -12,9 +12,10 @@ public class EnvironmentInfo private static List showComponents = null; public static string GetUserSettingsFolder() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "EUROMOD"); } - public static string GetPluginFolder() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "EUROMOD", "PlugIns"); } - public static string GetUserSelectableTemplateFolder() { return Path.Combine(GetPluginFolder(), "StatisticsPresenter", "UserSelectableTemplates"); } - public static string GetSystemTemplateFolder() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "EUROMOD", "SystemTemplates"); } + public static string GetProgramDataFolder() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "EUROMOD"); } + public static string GetPluginFolder() { return Path.Combine(GetProgramDataFolder(), "PlugIns"); } + public static string GetUserSelectableTemplateFolder() { return Path.Combine(GetProgramDataFolder(), "UserSelectableTemplates"); } + public static string GetSystemTemplateFolder() { return Path.Combine(GetProgramDataFolder(), "SystemTemplates"); } public static string GetApplicationFolder() { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "EUROMOD"); } public static string GetEM2ExecutableFile() @@ -76,7 +77,7 @@ public static bool ShowComponent(string componentName) for (int i = 0; i < showComponents.Count; i++) showComponents[i] = showComponents[i].Trim().ToLower(); } - return showComponents.Contains(componentName.Trim().ToLower()); + return showComponents.Contains(componentName.Trim().ToLower()) || showComponents.Contains(Display.Core_developer.ToLower()); } public static string EncloseByQuotes(string path) @@ -92,6 +93,8 @@ public static class Display public static string VC_show = "VC_show"; public static string HHoT_developer = "HHoT_developer"; public static string PR_producer = "PR_producer"; + public static string Core_developer = "Core_developer"; + public static string Macrovalidation = "Macrovalidation"; } } } diff --git a/EM_Libraries/EM_Common/PlugIns/UICommunicator.cs b/EM_Libraries/EM_Common/PlugIns/UICommunicator.cs index 5b97e40..f0a6891 100644 --- a/EM_Libraries/EM_Common/PlugIns/UICommunicator.cs +++ b/EM_Libraries/EM_Common/PlugIns/UICommunicator.cs @@ -9,7 +9,7 @@ public static class UICommunicator { // the function CallStaticFunction (and its overload) allows for calling any public static function of the running!!! UI // currently the only public functions of the UI are gathered in the class EM_UI.PlugInService.UISessionInfo - // these functions (providing info about pathes, active countries, etc.) are replicated by EM_Common.dll for more convenient calling + // these functions (providing info about paths, active countries, etc.) are replicated by EM_Common.dll for more convenient calling // for this purpose the class EM_Common.UISessionInfo uses the function CallStaticFunction below // in principle plug-ins can use CallStaticFunction themselves, provided we extend the UI by public static functions diff --git a/EM_Libraries/EM_Common/Undo/UndoManager.cs b/EM_Libraries/EM_Common/Undo/UndoManager.cs index aff8038..823a3e8 100644 --- a/EM_Libraries/EM_Common/Undo/UndoManager.cs +++ b/EM_Libraries/EM_Common/Undo/UndoManager.cs @@ -7,7 +7,7 @@ namespace EM_Common public class ADOUndoManager { // !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! - // !!! Important note: DataTabels require a primary key for the UndoManager to work properly !!! + // !!! Important note: DataTables require a primary key for the UndoManager to work properly !!! // !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! List _ministeredDataSets; diff --git a/EM_Libraries/EM_CommonMSWin/Properties/GlobalSuppressions.cs b/EM_Libraries/EM_CommonMSWin/Properties/GlobalSuppressions.cs deleted file mode 100644 index ecea263..0000000 --- a/EM_Libraries/EM_CommonMSWin/Properties/GlobalSuppressions.cs +++ /dev/null @@ -1,38 +0,0 @@ -// This file is used by Code Analysis to maintain SuppressMessage -// attributes that are applied to this project. -// Project-level suppressions either have no target or are given -// a specific target and scoped to a namespace, type, member, etc. - -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1051:Do not declare visible instance fields", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1034:Nested types should not be visible", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA3075:Insecure DTD processing in XML", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1304:Specify CultureInfo", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1305:Specify IFormatProvider", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1307:Specify StringComparison", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Globalization", "CA1303:Do not pass literals as localized parameters", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1724:TypeNamesShouldNotMatchNamespaces", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification = "", Scope = "module")] - -// !!! TAKE CARE OF !!! -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1829:Use Length/Count property instead of Count() when available", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Reliability", "CA2000:Dispose objects before losing scope", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Security", "CA5366:Use XmlReader For DataSet Read Xml", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1820:Test for empty strings using string length", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2211:Non-constant fields should not be visible", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1827:Do not use Count() or LongCount() when Any() can be used", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1825:Avoid zero-length array allocations.", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1001:Types that own disposable fields should be disposable", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1052:Static holder types should be Static or NotInheritable", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Maintainability", "CA1507:Use nameof to express symbol names", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0060:Remove unused parameter", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0044:Add readonly modifier", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA1806:Do not ignore method results", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2213:DisposableFieldsShouldBeDisposed", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA1801:ReviewUnusedParameters", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA1801:ReviewUnusedParameters", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1824:MarkAssembliesWithNeutralResourcesLanguage", Justification = "", Scope = "module")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1812:AvoidUninstantiatedInternalClasses", Justification = "", Scope = "module")] diff --git a/EM_Libraries/EM_Crypt/EM_Crypt.cs b/EM_Libraries/EM_Crypt/EM_Crypt.cs deleted file mode 100644 index 41b7cf7..0000000 --- a/EM_Libraries/EM_Crypt/EM_Crypt.cs +++ /dev/null @@ -1,297 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Org.BouncyCastle.Crypto; -using Org.BouncyCastle.Crypto.Engines; -using Org.BouncyCastle.Crypto.Generators; -using Org.BouncyCastle.Crypto.Modes; -using Org.BouncyCastle.Crypto.Parameters; -using Org.BouncyCastle.Security; -using System.IO; -using Org.BouncyCastle.Asn1.Crmf; - -namespace EM_Crypt -{ - public class EM_Crypt - { - private static readonly SecureRandom Random = new SecureRandom(); - - // Preconfigured Encryption Parameters - public static readonly int NonceBitSize = 128; - public static readonly int MacBitSize = 128; - public static readonly int KeyBitSize = 256; - - // Preconfigured Password Key Derivation Parameters - public static readonly int SaltBitSize = 128; - public static readonly int Iterations = 10000; - public static readonly int MinPasswordLength = 12; - - // Default input/output encryption recognition string - public static readonly byte[] EUROMOD_ENCRYPTED_STRING = Encoding.UTF8.GetBytes("[EUROMOD_ENCRYPTED]"); - - /// - /// Helper that generates a random new key on each call. - /// - /// - public static byte[] NewKey() - { - var key = new byte[KeyBitSize / 8]; - Random.NextBytes(key); - return key; - } - - /// - /// Simple Encryption And Authentication (AES-GCM) of a UTF8 string. - /// - /// The secret message. - /// The key. - /// Optional non-secret payload. - /// - /// Encrypted Message - /// - /// Secret Message Required!;secretMessage - /// - /// Adds overhead of (Optional-Payload + BlockSize(16) + Message + HMac-Tag(16)) * 1.33 Base64 - /// - public static string SimpleEncrypt(string secretMessage, byte[] key, byte[] nonSecretPayload = null) - { - if (string.IsNullOrEmpty(secretMessage)) - throw new ArgumentException("Secret Message Required!", "secretMessage"); - - var plainText = Encoding.UTF8.GetBytes(secretMessage); - var cipherText = SimpleEncrypt(plainText, key, nonSecretPayload); - return Convert.ToBase64String(cipherText); - } - - - /// - /// Simple Decryption & Authentication (AES-GCM) of a UTF8 Message - /// - /// The encrypted message. - /// The key. - /// Length of the optional non-secret payload. - /// Decrypted Message - public static string SimpleDecrypt(string encryptedMessage, byte[] key, int nonSecretPayloadLength = 0) - { - if (string.IsNullOrEmpty(encryptedMessage)) - throw new ArgumentException("Encrypted Message Required!", "encryptedMessage"); - - var cipherText = Convert.FromBase64String(encryptedMessage); - var plaintext = SimpleDecrypt(cipherText, key, nonSecretPayloadLength); - return plaintext == null ? null : Encoding.UTF8.GetString(plaintext); - } - - /// - /// Simple Encryption And Authentication (AES-GCM) of a UTF8 String - /// using key derived from a password (PBKDF2). - /// - /// The secret message. - /// The password. - /// The non secret payload. - /// - /// Encrypted Message - /// - /// - /// Significantly less secure than using random binary keys. - /// Adds additional non secret payload for key generation parameters. - /// - public static string SimpleEncryptWithPassword(string secretMessage, string password, - byte[] nonSecretPayload = null) - { - if (string.IsNullOrEmpty(secretMessage)) - throw new ArgumentException("Secret Message Required!", "secretMessage"); - - var plainText = Encoding.UTF8.GetBytes(secretMessage); - var cipherText = SimpleEncryptWithPassword(plainText, password, nonSecretPayload); - return Convert.ToBase64String(cipherText); - } - - - /// - /// Simple Decryption and Authentication (AES-GCM) of a UTF8 message - /// using a key derived from a password (PBKDF2) - /// - /// The encrypted message. - /// The password. - /// Length of the non secret payload. - /// - /// Decrypted Message - /// - /// Encrypted Message Required!;encryptedMessage - /// - /// Significantly less secure than using random binary keys. - /// - public static string SimpleDecryptWithPassword(string encryptedMessage, string password, - int nonSecretPayloadLength = 0) - { - if (string.IsNullOrWhiteSpace(encryptedMessage)) - throw new ArgumentException("Encrypted Message Required!", "encryptedMessage"); - - var cipherText = Convert.FromBase64String(encryptedMessage); - var plaintext = SimpleDecryptWithPassword(cipherText, password, nonSecretPayloadLength); - return plaintext == null ? null : Encoding.UTF8.GetString(plaintext); - } - - public static byte[] SimpleEncrypt(byte[] secretMessage, byte[] key, byte[] nonSecretPayload = null) - { - //User Error Checks - if (key == null || key.Length != KeyBitSize / 8) - throw new ArgumentException(String.Format("Key needs to be {0} bit!", KeyBitSize), "key"); - - if (secretMessage == null || secretMessage.Length == 0) - throw new ArgumentException("Secret Message Required!", "secretMessage"); - - //Non-secret Payload Optional - nonSecretPayload = nonSecretPayload ?? new byte[] { }; - - //Using random nonce large enough not to repeat - var nonce = new byte[NonceBitSize / 8]; - Random.NextBytes(nonce, 0, nonce.Length); - - var cipher = new GcmBlockCipher(new AesEngine()); - var parameters = new AeadParameters(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload); - cipher.Init(true, parameters); - - //Generate Cipher Text With Auth Tag - var cipherText = new byte[cipher.GetOutputSize(secretMessage.Length)]; - var len = cipher.ProcessBytes(secretMessage, 0, secretMessage.Length, cipherText, 0); - cipher.DoFinal(cipherText, len); - - //Assemble Message - using (var combinedStream = new MemoryStream()) - { - using (var binaryWriter = new BinaryWriter(combinedStream)) - { - //Prepend Authenticated Payload - binaryWriter.Write(nonSecretPayload); - //Prepend Nonce - binaryWriter.Write(nonce); - //Write Cipher Text - binaryWriter.Write(cipherText); - } - return combinedStream.ToArray(); - } - } - - public static byte[] SimpleDecrypt(byte[] encryptedMessage, byte[] key, int nonSecretPayloadLength = 0) - { - //User Error Checks - if (key == null || key.Length != KeyBitSize / 8) - throw new ArgumentException(String.Format("Key needs to be {0} bit!", KeyBitSize), "key"); - - if (encryptedMessage == null || encryptedMessage.Length == 0) - throw new ArgumentException("Encrypted Message Required!", "encryptedMessage"); - - using (var cipherStream = new MemoryStream(encryptedMessage)) - using (var cipherReader = new BinaryReader(cipherStream)) - { - //Grab Payload - var nonSecretPayload = cipherReader.ReadBytes(nonSecretPayloadLength); - - //Grab Nonce - var nonce = cipherReader.ReadBytes(NonceBitSize / 8); - - var cipher = new GcmBlockCipher(new AesEngine()); - var parameters = new AeadParameters(new KeyParameter(key), MacBitSize, nonce, nonSecretPayload); - cipher.Init(false, parameters); - - //Decrypt Cipher Text - var cipherText = cipherReader.ReadBytes(encryptedMessage.Length - nonSecretPayloadLength - nonce.Length); - var plainText = new byte[cipher.GetOutputSize(cipherText.Length)]; - - try - { - var len = cipher.ProcessBytes(cipherText, 0, cipherText.Length, plainText, 0); - cipher.DoFinal(plainText, len); - - } - catch (InvalidCipherTextException) - { - //Return null if it doesn't authenticate - return null; - } - - return plainText; - } - } - - public static byte[] SimpleEncryptWithPassword(byte[] secretMessage, string password, byte[] nonSecretPayload = null) - { - nonSecretPayload = nonSecretPayload ?? new byte[] { }; - - //User Error Checks - if (string.IsNullOrWhiteSpace(password) || password.Length < MinPasswordLength) - throw new ArgumentException(String.Format("Must have a password of at least {0} characters!", MinPasswordLength), "password"); - - if (secretMessage == null || secretMessage.Length == 0) - throw new ArgumentException("Secret Message Required!", "secretMessage"); - - var generator = new Pkcs5S2ParametersGenerator(); - - //Use Random Salt to minimize pre-generated weak password attacks. - var salt = new byte[SaltBitSize / 8]; - Random.NextBytes(salt); - - generator.Init( - PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), - salt, - Iterations); - - //Generate Key - var key = (KeyParameter)generator.GenerateDerivedMacParameters(KeyBitSize); - - //Create Full Non Secret Payload - var payload = new byte[salt.Length + nonSecretPayload.Length]; - Array.Copy(nonSecretPayload, payload, nonSecretPayload.Length); - Array.Copy(salt, 0, payload, nonSecretPayload.Length, salt.Length); - - return SimpleEncrypt(secretMessage, key.GetKey(), payload); - } - - public static byte[] SimpleDecryptWithPassword(byte[] encryptedMessage, string password, int nonSecretPayloadLength = 0) - { - //User Error Checks - if (string.IsNullOrWhiteSpace(password) || password.Length < MinPasswordLength) - throw new ArgumentException(String.Format("Must have a password of at least {0} characters!", MinPasswordLength), "password"); - - if (encryptedMessage == null || encryptedMessage.Length == 0) - throw new ArgumentException("Encrypted Message Required!", "encryptedMessage"); - - var generator = new Pkcs5S2ParametersGenerator(); - - //Grab Salt from Payload - var salt = new byte[SaltBitSize / 8]; - Array.Copy(encryptedMessage, nonSecretPayloadLength, salt, 0, salt.Length); - - generator.Init( - PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), - salt, - Iterations); - - //Generate Key - var key = (KeyParameter)generator.GenerateDerivedMacParameters(KeyBitSize); - - return SimpleDecrypt(encryptedMessage, key.GetKey(), salt.Length + nonSecretPayloadLength); - } - - public static bool CheckPassword(string password, out string msg) - { - msg = ""; - if (string.IsNullOrWhiteSpace(password) || password.Length < MinPasswordLength) - msg += $"Password must be at least {MinPasswordLength} characters long." + Environment.NewLine; - // add more tests here, such as "password must contain at least one small & one capital letter and a number" - msg = msg.Trim(); - return string.IsNullOrWhiteSpace(msg); - } - - public static bool IsEncrypted(byte[] fileContent) - { - if (fileContent == null || fileContent.Length < EUROMOD_ENCRYPTED_STRING.Length) return false; - for (int i = 0; i < EUROMOD_ENCRYPTED_STRING.Length; i++) - if (fileContent[i] != EUROMOD_ENCRYPTED_STRING[i]) return false; - return true; - } - } -} - diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.nupkg.metadata b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.nupkg.metadata new file mode 100644 index 0000000..8a9f58c --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.nupkg.metadata @@ -0,0 +1,4 @@ +{ + "version": 1, + "contentHash": "l22IFT8GFYKxq+4yCl89yWVDCCRVHjXcDIHO3ufVPefaZxHrFgvecmbrlTZir9tXjPCxXXivhDJgcJFlmPLhqw==" +} \ No newline at end of file diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.signature.p7s b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..1f36427be652e314e4232fa5cedc8050d4aba823 GIT binary patch literal 9467 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%0DLPE2UrRH^&k^{MRA3 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 z zL8di?&V_(S%gu-Tn_TWwW@Fv~eUBAdOS4LI_oI^@1Letw;+2if4r$Ga_zK}4UEu7sH?#te3@X;pPY;pmuq=tm?nX<;at!V{ z2OSKlQ=7VHiWOV46l|(cEmw&Azz_wA>%fHQ2|?crD$IyK5nP^VJ;=^87n2ZW%N@ za*95s{{;Hp!IleqH{jH!V$1Qq%k+Fhza&U++m1fO_pUdRg7+R5Ixeh_`xBrXPj9$_ z_qTQ3(u0^AUYPUbvc3JA^=zw2`^A4_jCa>{0?&bqm;C)hq3g%lwByCaHr?$zBIf83 zi>rtKz!RKBK@6{FbRg0|ti^7;KObA9p60 zD_?-KWgITXk0atN%pj0SLe*9s0SJN=B&&1}7GGVw=QycNr zLOdH6Q9mI{ycLErjcdgX-t}EZUFkS}CH^U@&QMn|T_qbGIKmA`LVfqM;$GFzF7JQ~~xKkZ! zM;6-+<>GUB*f>)Vd9(r8ucge=OupBoC-ZuySLxfT`e*G+IEhAlumT8YfMW zF_kDGj8gt!S|yi~!w-5A&GJydNHiq@P1Q=Z!n!#s$Na0Lm(8@`To(D)zQ{bpR;u}+ zHutwh>bsK_aZ=lKZ&Evmh}9krD!d#ryaGDBvX3Dv&A1rvWr~3gGp695`GKk1@IzI^ z79kSvmbiZETWH}=xdH2(Q%cZSANTpS>)(gV=zhmKgUiu|lvpfd^N>wd^_rFWW%%x) zdq?~g8J+Jx6ubxS;tjX3m!a^ryza5CGu(Rq=&DC)4#VK6XE21ed#9EhLC!aeAe--9Kv$#C0s@)R;jF{b1ARjar9^|Sv?!sPq+GK8)N@aU1 zOkSN@_zS6ows}a4_gquL4O&l$kufaMn9)|g`7h+iEO@34vxI6RxDGRVih~rN%6gL9)Y)=h7VwU^ zdk`{Iq5Wh7yn>92OE%q+J-Wd6PyuEKJpyG_H!%p}BUKC3x7rzg*O6VtPE>#z8fo+m!nj;qh;<-+bMmO&|za5Cm6{>UNQl z0!>(`B8?mozJ;{H(N$zX&)|zD(nO$s_tKN(D z04_p1vhL7!4hXzeyi5=`0C`8QEzKR3alxJa&sq8DAaNN{(3%4;Xfm~2a= z{hTdFKUAcVfJ!F8VSOo^V0=*i@~=C%h&?l3NEZ4=ickxw$vikl>EQt!ZMcr2HU%t( zq9GM5-@7YvEN$`(liF;>meEp}7 zk3eECf`N0P7#2o70>9J8*iJQt(dQ5@lR2S^DVwF05v>OevWg3-|Ejy#`pZF>9k762 zjZ;P(aS68R5`ylN%&io@_PK&34~^yL9)ztAAw)``aCFaCf4V4RsOrX}o=C+1%_06U z_JMpfm<@fgG(9aj{}3_F05|W{a>eaPsHR=>CO5gRQ`GX3iFFZD$nR8dfb0G{-YqZRu7 z=dF}%<+k_g1}R@k(jO&nTpJrG`k7Zup*qyMbX6$2#K-{|zkpq(#`++TvmbOOB+#_< zbr~M!7%mdd>x zMv)QXPr~Ss+MkF~Qu!FLU%v$K2<`=}&zTY?s>&cDcvdq#!$*ay4xtmMt3p&FbYzP| z#oF=UxUD`wUDa1IB)1?nrhxP{b^LL4yp&rn+gtZN8&}`;EXDaS0&*J>_zi*hG2O;R zSwqd!yy2_Q%5d@IBenzv@~G7da*$9b1!j{}0?Pae)YD`6$OL6y( zWDb-Xm9kLl<4+eD6iG=A_D|>0H<`z=cnpA5I`>Ybvn2my+u@5iX%P*Pv$`2URnGR0(w49N+zAM-r?KbNgv1FV2lE`$nvUEu`64gjGV4vP-?`41LkX}mu zc_T$fx87MBnhg3#iPj^fwU{;_wQPAoKElTv4yJrmj_GJ0vj0-*bmYA~5_8eNR!l29 zl>0*I2^-#MTPvOD_%18!4C7Pi=$tE+?$`%xz*;@!**Dx!@&6#SQsq{4Bp(DjB6_2NN~gLv~S zB$l>py1egTt(rN=x|*iku#5A?^WdT0u*1oBBde;eZjh`=2kkO~e~fI4W@Sig8h5gA z$`JlLfwQi2JbTO}&X&fx>GC&c0Ip>Z=elufa*u4|66d;lYHDwI{kqND&1h#>#IuhK zwsEAZg!Mha>IPw9{~_9^qDSBz_}%u5rfmaa;7k6s?*4HRjLnnvsse zpCp?ZN|TXlmaN3isv|5p&8-*qEJ7FlMThcpUsF(lB?u$aV6p8*)!U6qK&CW@u2- z8)Fm$_L4&DOm);Js5Ik`EJEFl&hkqALe6IVEATI_OluUdgrifCXnNg;&T0+?RD{Ng zRb^E5byb}6$N^W>6X&5V80u?euytQ*oFRcWT+nW#y!F_CXfuL^P+;{XeGP>!Wt356 z<891et4Tc>F?S&6z1*9Un|=+$-#<9cF1BAangv(=I^835(?=n?nG-MTpiXa{a6`{) z3N}4(LufV>%@)FSq}WlowRNlYF+=d{8kg}gLuxiO%~r;Bth22^4qikShiM-~Tcb6Q zBH_)(5d67y&Z9`@8G+WE7V@Ll>KBX?A_Xl-^%TQ4M{LJ ze3UeNlr}`sz#s{ksAHuF@h|e9?*#@trz~O|oySO=FO>k~d1R4*RyVR%fS%BVrhvl% zdAp*BQA{09PaejijA>HBA_=JwfKH2`#@a6rZRMd1xzm7FkGz6&)I|PGTIkT8EF_?G zs|n46i1mlyFgL9K)cAi?7BT=(jRB~Zlpz9q;Cu)npAU*y!Zb0F$zrNfL4^)*&ESB5 zl2V3k-iVxw}P#e#C$=#-}KaN>BzX{lDo& z{BL??Dc}%=zrj|qlKaDx`>7~HQUHnzQBo%$jM4#g`K3Sy<8whMFOk_<2UUbO)06ux z>rnIvp4kVx$w;Im_Gn1K^hknrNENWUl>Xl+3v&M(;;e!@VRO+SFE_!6hbFYK0<^IN zbOBL_VoHBr!Yz@F)F5t$7W_kd@=$5=PIfWzs53_Gl;Nbf+&@f=kzUJEju5fyWw<<0YOhf86(s$87A#iJ&qsn42;W zL`sYDi6A*2+>44$76h&%@|ok`6Gc=$AH1h|=3_-po}|Wh+J{omT-G?~v$cn(1;{KQ zG(kum{s}5E57?K5BTJuP-gWU-PRHhOQh9lYwe-PaGLPvn(iw_GwqD@e-T0FaM%D|2 zUovok>6vbUSX!wc%-)58#v(p>$Juk4_E2F;(Bv5^U0Dhj zct1=k2k)gv##`2%)zuH**3RCK9Zz}mk)43I4?{r~m4!~jW7~ZHOrlcMQ-J)LDH`KN zPn~5?qx@$~r`@kh%lTRr|3{zns9S9Oi-GcGLbFZ3Z~RM2?OMI=4?j_P`~!(%&`#12 z!>5=L=VvtICq_2lf^>%i zLy_MF4u9+aB&+bUaR95ZZN0!CeGSyq`Lz#q{)Xm=2Lh&$HWMZ}v+G#3e@8Q0Om7wb z-@5NRwM}xsHD`%f@59DEy6(dHd(s zEnN)Ms=Je<3>AuHi#E?HhzvgS^qD00!k90YyxK0D`Y(XU3E7x=1=e{(B+f-PUBw`# zSz3y{me@ii^vJqvtm-oA@|F|l#~Fn`kqMD1=>8~AZR$M!zM|``$RhJ0Gq|A36OGj)Rrp+4;Ooh?f zo+c>(WMx4%QWw_Q0gOaUUOn1X=?-LBI6xocEKmP9eW&tpMZs1W5RLuDPNEF~%;Pup zE&0S5Vd5wKNHROo4{`iG*{&bLc}ZUGmF&Hr)Z`DJqp|R%rBME_A9IRtboFV0uuHRH zr^GunTNLLZq+_>~L${(s^?rs~!j|~Zbc0(?#vtW=u&H0x=2XiBsZ0^dCCC}_G0Zg? zawfV3^*P{W*bFC?AspLmwPtuPV3Ql9b#~i$KtAJiL42kNfq)XgXR0ocTVIhU|Bv{K z)DW_~PcJ|I7 z%MX10H~z6{-S7Q1DBdyhi@F=KMH0RpmRilXS`fYpYJw8o-Vx)_ZqL1%(&>PUmX7x6 z6BoSHHx`-)LYfCmjpK&aaqiaf5{DEw$CMX~lo!hs1d9~;1uFb`s$9maL5r~qF=;&n zt@~eE_nvc!Y2wm)_*(bxbBXE#(s~Ir9;Ee$aPg!yGO3+{04agAMkuxO{5DCRS2gIY zG^3{NzPls?|M{@X;yCT&zPlwuA8GW%8#%^@X?8^iThkqDl;F(&- z@3?5h2C4G!zb6W*>N z%hD>fZspFfj0ji#zNQ&9GtE_}R&&N$2mivD9i5gmBvlt!->X`z0jx-l1XrEtnuvkw z@}GutBaOvyaCOOw2vsA}|1?mGlE{$(R9=}dl8HqCYOuisRD=asqWvv6LGn={!_|lg zv_kwXegV%(LWawc37{YmXvzAQ%K2L)1I=Lo=d=C_U!JbuMSd%cLyV6*(t=GyTa*8N zK*+;?1;V54M0Q)}&$yH0;fIwo63zSI+B(gHcT0Y5j(1PMA^}uZyZvIu2US-v(HVU- z1Di0j72A!~m=%zH?unP|N0_Xie{&s+60H;$hjMjbX?~ofz~CGBW-^kC2}HKM8Zu`( zWW#82jLWxhn~sh1_l@O{TW+MuC21T#;+z7WZet4(uk|jW zS{r_P4?D+|CDiuTOl{to)rm`qT7#>uNN z2BmmdTC6^J8p-}DSFk3o+worxw41$+~6zHkF8Pz11^xtQ(5CMg)XNPREHvPc#0gs z_0N+v4kUL0J=dp2-41ae(JxlKUXB~|UJ}?g2GLInS!sJey^Q{GQAYA)= zSOVQfoL5$v;{=4vkJJ7NRQ7Bac4J1}-0Qaoo4YwL-bItMD?k3#+_Z9=e2PQ58BxUN zV0)nK93oEIGklfVhdO4H>3wQ*o~D;#vYqLqmzAf2?$3&?cjszg=7MG(m_tIe;2YYX zJixo`Z@r44dpJ8A2k$4{Gh5ntyZ9!Qn8tSRzA-h+Zcm+^Mmg09rPV;lt?EoGkI#m% zf!HFwsiEv&A=$f#ymcWf zCBMa;jS%nd2SppXz?^8G?V)S6&evU}Xu-G|2m>UP!)YRBR^J!MZo|S4?~TYbX<*Wd zE%;3W3tHvA>^28^2>E&Jy=`ha(HG@fa_R?)&Ot3zwh;QrE6UShG}B&TH9!>ZT`^(1 zza~oPdqYVP86R7--Ozz?D~sfYvLL>8Ds63|0Grv{X|+rkiR#(xO-YEF*>^~ybEkUPo2_LTiCBzqf? zx3-e6fQ*TM)3i-B@nv2S9*+36j=xk^jvTr`PBd}`Hd!amdH#iNW6&KkD2Vx}R|99P z-OMRwaQp$sn$uK}LqiL^F^~=l;kc?&jEIvw6VM7Dm$G_mbHN;4Q@Wqq=EYzxW zG`GJ1Nv+zKfeu`r6z9Q7NTFD4s_0Ts83BB39}+ju}hz3%cu3jR^f$Oeb@=)uPXV4f2U|0V6>kZ~G2+?byeb zB6nw#iGHqT$z!_Y$@Ylj4vWqHUEzLyxoXEfXD4T&t8Sy9ydVk_<_)=EI81%LWIoVQ zKwoQmaLVFtL$K4b=YzbplAOjp&I-b>%@_T@6 zjT)(DXm{sWD=;KEbs)e;rP@XQ^8NCwmF9-ahxhdM(;L!lLJIPgO2HpUf_8Nm)VE7= zV)CpVN#vF%G2`-6n;Z7shxj!@U=J+I~(i znlpy78G21DYw<^I=oRWE93NL6Ik4VP_Q!I}QJP11URluVRB&8(X2pqimrToJfpWI( zZV4=oT#4MJR(+;W&u94%=N{*B0h-;>S6tfr+<-E}|HQ+4XBtG$_RSgX6%m^!U&D_X ze1U~x3N@;@4ctX<{(~Z>Xn|ts03Tr!y5Jo04-3hT^lPCn{a%MN+Z0l=SpYQWy-$^L zhc0{HlNQYnX|0^Lbw6m&54Fp8?3WQqk*?KElwYV7d6jftBM($s#)6`F-=3@Ta2#JQ z1elpwaI*PGf$rehX@v(D1#ZhY#N5;$T(=InAy?t-GDiF6^z%Pr$_-x*k|$Yz9z{og zALEqhTx3K-`=WO#B#LJ*#1+TX-TJh$x$HE^ZXM9EI>2dP3^to$%4VV50^$fEujQZJ8Dq~=Iqc!o=e)9($lpd$;;@MfzCu|Ck9n2H}QA{L-y8!x%kG(nTGqP80yeS*7)2zQ&;0h z;1Z8dg?kuQOgGN;NlH+F8=ST+-VV-6>&#pk$Hgp)XpfeB?u$04Uhm?*1^+<2Ho>zoMkbG#?r$eBz)fn z^ZD1TQz5NCdT@VId^#;pT%r*8mw-?Z-hd<@Z>ppDhlAEo`+_x1%QOy##NZbzEK+6j zH+V5{;y2WcI`a#`4gW7Tcs-DY-Mw6+a_LH84BiJT7HpB4`2FHi=Q>}3R73o4dGMnj zZ2GbR{-mzk-23;QqbKvRNIyF2Z(`j$QH?u#lOYUV=CsmR^!k0b(@6ZINIyx`il7bn zZGv&BX(!d
3`CZZz9N)z1vH|(A<{v3NKiZm}gq4w_CnygeB|S>~ z*o8FeZLo(udm!HSxjUGzF^90E5YtJfG~V&NciNvG2ciZ~2?)k$=Q6q7y@VpFpd7tuGI3HO7ZR^O` z57Rc#N1tw`A?E)OT<>NY6cQFIgl~HBI0c@$cPdHq4@bq%dq&YU4e!^?@ z1(;N;$APvD27h5vT_wM0+fRi}f{I~5s}l%?U+f+^X>@8vDwe$9Ut?-n4cDkv=a9;` z^B>t*X?2@*`RtX~GN8xJzS;S@koLuL^UCPnt+&?Y-^u6KwX04KM#(I8^zZMA;45)| z-PY((FTaf_oai&vEVNphV!2hx95km`ZniMVVyhQho{Y2D>Sj!P0Yw0%Nwrvx$$z(t&{$qdI*Sn(extl z_j*s%eq{HQoA>SHVI{bsbS_Wn+ME%r9OeB}z5|VS#)D+xI8i z-UPMU?m)+dvhG=sG_Ot*!6EyWH=lm19*fEKa>4&Cn!at|+xc8=IsW`W3Hf2`ysw zZ}eOjX2Rw>)s#&&BZ8TxWsI|l1|iP7WqG5{=iInJe??^_Pw(GMu883hepCKQK{umX za^#@1b_u;k1Z4|q*N%GO0_oWCE{DAHqx)H} zxX=3|xqQH!Fd`LSo6LwWu<-duZ57=i zXv44?4y`1anE4G-8VyQqkKznn29GxN@Ymf|_A@NPRPb zieyL)8iy~S4AS@W{u8rYvo-oY-;B4-{@JS37_MMhGuZ1tcnum7Ut)Nb6$&MXb-JlfoMQ-uyB3wJfI@7bn zBhYw&ECZtKX@(?wwf5j`oI=h~(TFU}K)GGP_6dM01gwk1ID4ovY!a{{y6H4CO zSiE`V!}+S|Mqh+$wI7{o5l(N+o8JvI3Yv-E?~t+Pyl$K0oPiRGfwSnt^%QpvC94j+ zyde}~RjCpd(EcG}>a!TV0nEz$9wOkf)t=&J$L&POm1NO~q;b4GMCR-$<1Mf{sRGoZ zgE!z^MU)|b)GyZ9LwaeS;fwdZ`s!-kVUFf~!iq5C(_e2mVx)cN!%Df_p_%X3(D%+i6I+)gp z+YE(}LP|x=Lg|pxrF1e`%kh5fUV7*5(94#rsRKO7f1R_ZX9{SA;rOQ#$-<-sV?@S- z_q=xg4DHIllPE#y$f<|Yk4h1MZKwQU!6GQM)9>ED{8^V}^jC?<`OAplT*!0z5Mi_fxjF`#bczLKDtm6OWcqYGcxZEY; zaAiKHaDh_mi7;?c*jsH@B#Y&ZaJ;k{tjhr7K-1*$E!@z6^81vj430Bd{D#nhaLYaA zYF*QSV8_1LH8aND%+i5iCtvBC>V)_GyV7TW$Ms692hp=+hg(_UQk$a#anV_-n;x^$ z$5j)g-S7uDS<+-xGC1kNK({*R>5xm~L^b9-{=y)8MUZMhqTg@__K(vdm%Afd9lVl) z2*1+BZXB961pQ)BnM-_m)QTYVK9{?mT1`;g;Ki=G2W}^UbkatOW*0nB%O+QMiA#L= zpgw-dkxT9Lg#pgQOC!A9#JEem(M(CRqh1sIvIlPEgOvDK_?ZsQ1zotV3GQcv9>fpq zavyJ0Wzb*lnxMbP7X&eeXbr?4Ym6c@Qm#0zrsf?q0`D`4uA1|uj@(QM;#Zg`Ia=L3 zQp6)ac@lk8#}8D;PS+?CaowYak4ZR(IYfG!38#+0ma=G;#B8(~>Vs9_bMl4GZCMJD zB!{Ka4N{=~P0^NuM8Ig_QJz|EM(&+OH#u9@Yx2>6fcXoNgIdj4SRSoAhT4~4ac<2E z-F32AIy=6%uk*_-;@ZpXgext+dON{w-A}_8+Pv14_62LmIy-VhqLuTmKGxW#)%FFQ z-Ee#FWN4N4U5(vOgbz1@+Dqz)mdDxmIzN=A=FR>_-+a>%Ykh|9y>T3KtiGM};#UwR z%qwr{O}mRAqh3<9SCeRrFH`AWOEzPK2k3gMd7R5ZlIb{GLLuGe3TsYxqc8@&dZYeT z7`=|zmVd9^#)_jdz;%d~L$9|^q1euv>rUV^pLJwxk|5`UaIe~S)SfrRS0OP>nsE2M zzi>F`PfBz1bWo2+}imdUAnM0n8Kg82^(M3X1BFPz33NtvfZGS zTfbo8yzK_6mY!K=|7s(a{XG#aXXBAf5M}B2q^eJkrkRrcfYTREO-ulFS`Z{wNB|uh zz29tf!0K0=I}&-Ea!sC|cV<|Y<+WZ5Ih`wV@$HZOu(d4kiN0zL@NI_Wwj+Xb!(4NW zaj+TL3fg+P7|i=YE`LT2_)9UO4{P;tz0g8+cEBeeTO??S+@-c5Qs=Lw zl_<`NIifDA#9uU3J}T!0N+kzb2mBPF23j8EL^Vxa2aKvNNj3zo0v-DRD{`O;;Y$Hm z%EB(X69rd_@{!Dv$0rEBNXTnVc9pebgiUx{dyp|5le$;#T1&rS<;61Jk$_8X)s*W> z#crM25&US!^z|;{nIkuOIPbeoW?#bgN^5(XOs6xud@iK-+op6dy%{ESPp>}LD6ml) zH{y8#pX%eRrSJ>oLhz%kqLHjV*R0-#U$k7jS-CLp3Wd^wyDAVqjnEcWUrXFdpm_mr z_9%SXDtiJN8%sV+&~KtvER0-RNhWezksqS58P>YJv{wMUBL8&EZ5JMnM16Xydn>+QO1rk|A(F6Pf?OGz}Xi z#x^me)i9)+hv@=IHL2CumVBZB{J4$Bl#&03uGA}qV!@@$$|+=yT)&Nta?wBJ4HZg= z8OA>&tvoY|GF7YlLGd#bU9pvJkB#``0S7kK_qxL*)Pv zgi$au{px?+FV<8Ju9F8%q;eSMipLQM#9hpbWSfLI7Nhf*s=H)WpFSF}!-mtR2LCPn zg5L_`T7Zra?#Q`}7Ot^ECU-mqm8XLXi#1Q;XryvHg&zK=TGEyMB!(Qe?VQi?=vLQI z&3;+A1jdnkRXM@EJDXBG?S1pmPT)K@?|4cD>Jd}B%r_s{DV75sMrY8g21^qtd?16_ zuFnLo`?j$=`;ZncEU$tE<8V5ThI8(c4dc><wU4AQ2*v zlS^L*q4oUKxZC%T<_|Gr-xqY^HXOwBdTk#Bfn4vMr<$65XD|{<8w(+g^;*Spx0{mL zIo=x-TO8{=7*rw4^Ljz9eYeZW(XxcT-{<)oVVM-K@~?ZX9pHc(uM*q+Hn9W}p;`|I zVHrx}409x=8S%5N9yxVi#C#-zYqt;VNYCcKWuu*RrhU6RzI^x_p?Peh4DO_<@t<-# z40>Zzdwkk2Y%0d$Y|yU@vHqZ^lD;5xDV|bXT6Z>x-*-0fvV#qr@!|Tz;krz63_zY! zqQBl064uKV48h`eMHwkJ%LNI2uK=%JFaz8W!=at>I&=rQtO1V2fK-lFc@2uN!h=9vIsjJ5&`JhIsH zEPe@{csaZX@nP+V)mVk0o1&1?j<8dgnix`nDp)z6?vnBCT;OF-Xz}lXCBF$=nt+w; zy~za5`Gi+qdjQV27Z0C5H8T&zzvQ~kGM+t}_f-ZuEcX{-;Ig#j_f?+p?pZ2zB9t70 zl`o)6>>?b`m%%umKtN0Cca*r~;j%pYgt9yZ*<3xD}3**cb=znHVj#V}^Ky_mBEDDOnJZ*rAfZRZBC zdHLaaTUn+%w}U0cO3AdxGM<%2NZv#+o;e~Xbywk%;cER#vJ>>ND)^Pd=Wqo_DYMQt zK3G`7M8*rpcylgY?vDM3MVFloo2 zu*yLk=7=03n0WV#3^$VTi~uwY4A!}~u9-y0b?u ziREvyA|ZmA$f6_5p+XvTb}T5!r0#lLGTB1IIV3XHe%kcM!@*tUbQWWS`CuA+iwQbw~Gr#ZN_5bc&>trW+ z-y}Qxtd%^^`(`KGr!BN;xL6d`)K{sU000Ja!n2A3aU+j z)m^iPIVhPeu&IAWOLNM|MXKR)^8A3uPMX6f$mJqKh$%aN8U8fR4G)*TN={csJ5j%AuRkx%rZ^t0abFj= zN7K7WpBz);tMC`Oiu`tB4H~~$@~xaP3&aA6+QMzn-~yE7 zfd3*{R3}?$!zqSn?gn;Rcl&2=nCH1jZcf^XR+b2EPFDYp`JQY%9H%MT37Vt{+6jx$ zq;#jEfowcrL`F8ki!jlez;g7bFPnAr&p@_Bd{zi*;nN990_qYw^EP#I0Ar zOf}e*2o%cycN+Cr?+UGPDQcTcN6Y&76;4z-Nm+u6!& z57iWPxs>(`Ob}5}UKRV@-I~Ddk*9jwkyfy!daJ>uu9Mg8XGBwQW~kpLv829-MoNOeH}^L>rv5Mk!}9E9 z8~))kO}0^(y`Bxk(}Jpl9)oT9Pj_HVkqS){3L+=`l^0En8%fEBA zqpY%ZPdpaS_mTocA+yzxY7>s_|`Os6> zMh&KdJOHZ-N)&#^(-d|OGjqCeA{KjN!;5r27xlL8S7$ax7%AJam<~8rH*Jv5;G~EF zKWwP92G3in^^39~d;U$icc%?U{=#F!!_{7tpkHZ0e%z!P1MU|Twb&dY5ojY#*2`f* zzHEvM)0_d!Rsln3f_|L1L|~PthGp0!0A+cRE&}fZLwHxwrEe+wxMoj`z#1HG>?2&` z5_L{6U2e;eYt}o;x;~mc z(cPAb2N7H7N4=!MblS~A>a(VzY~ZTBRiu;Vuj~@&^&fg*HgQ=2Be(~AcPSwSPBl7GObHZ8Z$?fB5R-p&}f-a@D%8>YY8Kej?n2`u%j98o$v0^f=B zxs2F7w}CaYlLbcbnMADij~qiQNVM4uNqoQUn{gC?V$}c9M*n}c)DF!ka=Yhoz|&e)JC7KZfC$`Oyxou+tM6W_QZ(Sd;n&J3N*F(=iUN|4^|(FyEeI z&^H_?l=~-qZMo@~pP4VX7z!Q#&tl z33|IW!s_en(n1x^*GlmDd`6T4x^z(SUtB4GJ_zww*H*PrfUFLteVX(ZLP93Y1E=6NN0xJHQ2cN3H^ zmYz`1v7pGi{R}4#sm|`n5dCCj|EmK2OR2TUj?--SmY!rTo6RdCK#Ixa;Oi$^f=HsQ zyx425O!Roz@;88g0Akk$L-2GMcHVFXtMiqFn%lq;23nq;+%vv-e6{nyQ5l_gSB&tC z-Rj=mUC@>iuKzSZ#@m-+=Pn8-&khOm)m4dAHN?9ei_}X@XzQ}1H?df{ONSQxme0+? zL-S_;1eH#=*Zr3B;@X%LAu9H|7{&JH!d4Mp;9zYMrfkpa*a@Yy_r8?jRPtYeXscf6|j>6 z8H<=r=YS`VI;+8ATeNJ24fu$VZ@GwkY_VZ8O1c2|zmMLN5F|_AJ=A200|K@$3YF!c zP0pCl7`+?J36X56UY^u+TvLYjZZn4mZ`01wKXdOg;(s|l1;N@DCxh3T*=*Nn9oAZ5 z0R|+;Yd#{R9LAfX-HfO+HBsO)Azm>F;a)M{S+2lMX7qB!ngTY3VvK(F;ULq*%DmV= zVW0iHR)biGKKAw{5}$eTF`1dA231s~@Dz&O;4?QBd%8gzm7p+(0PoBqTLHYOtG>BL z<=ZI1^Dxcf@9iulSgA$D8%eG0rX#bL$yFhNzziCL^H|eRvgJpxRQ(NAU1Zmr-#&y{ z{A@rTag6JGkUIyJ8v3AMZBS#yO>E_%I48T0G_osAPEzMUq^P4uu=1syHm3Iyk2X0u zsgk09!x{w3t3^}C{8d478sjjA9A5PnbOE4{7)P6uljs9Uy* zz$jWZkNNt-bqEkg<4u>uM|o3)vVTbJ{ick%B{2BxTG|kz}#DN0M=nM?=@h!VL(`*!rrn~drl2kWa%ntj0WDZD+Xv`USHIpcaw*Dx7VzU5s{eug$B4snO3tKJ z=sj6du}*5^J=rhPTy45iq8A69L_O)(1RA%li&bm-JQ3;)>7;`zhOBRp}_b?wK-BwZv@OIW|zGWwg#?u)C;36{*D}kz-}1wf>K+ zR~@m~b`m8=I-x~NX;!}o%lsyk*? zNE+rEm=-UhaIP&84Jpa%U3H z=j0ASaYZRS+=IR){v}3(!yd@@W&NMu?{p%e+7+E20UUjFg zH0HLvTfY+|j^kuj@K1TIdAsP_ovA@Rj@2MyZ{hcN%NiOfdG$(wX}Q#6>Eq7p`tM+V z-MPNZ0tLN(kA0&rn@#v1CvYuwAX;Hgiqkg1Ox25HBKEe!~|Hvou{ zukGNb1kzA0yu8CqjbyKy^HUBHLzrBOe?_D}v2xm0W~UrFEsk247A%jjhX?JCM0kg% zigS$08lBGBFYtNgfmv1FVTJywnkAT8D9feSPoq6JFCIrdva0c?S#B$WCZJq4%W6LNJ^L?3A7tJOD181`VjdoU(%BM+e-Cc7ET zHS77WK^JsP+)8g_gP}eLhW%ZRbq0E^To(Tmp2aTccvE~#%;vi4lVT{A$H##21s%1P z!GG&F3ae_aGH+v3#XcrfTC%?pE%a7KA2I$P2Rr2jo!LI>BL*zvLRUTalBHh3so@(e z#B7(NrY*`FY^-}i>50s$nmKCW;tl_bTDa8vgM(&s&AIWL43Om*>v4alx}ZaEPgouD z0QP`tP0h6)A|w%IzLjfH2f01m$0V(}X8SWh3#+b1dwr$L(V_3Zz9&#(SV$-Q$8+AG zIF5Edz}TIEm*gNUIBr_|FA$j6M%LP$*`@aPikC1^6uy+tg^r^W%x*)j>6{s^ z>2GT*1{G1u28^OP_A%Y%gnM{%2ZXaDUwEl4&fadHs zi!=|66_dw$ox@oDozHK{(JCb$U`*mb2gMtdEmA7E{HmZ3&C-no&jT|y>RdB{A9Rl?~cbwyw&;m0YpHBb3zpTcKXb}V#?)QV# zZQ6JLA>YN}^iIX3CzpYRH+k)kJX^YIUl;}BUohJII6xmoWf^((5FG+OL5ujVWhQxH zmXWr6onKGOt9G3I!{=j*XJXwR`Zs0%y_VT;feCI*J;f59?h3nNRV{75S{wc?_4;Z3 z=ic`HGr5nd2KeWwW3sXkEprAinOnJ#Fu`yr8_IcwZ3;3Ew!HceEC8sr`Dq-!F9y9q z#e0zM5`vNggM6`DKhn|jhJ7*QZ7pl@je!YZmcSDrLptdEu5GCeNnl72=qTaf9sXeR z$8=|H2ja&(VuNQSu2wdJe1}nfff9K)F`?wHKwzl;=DtASnxiLCFSfZ3djA`=?RdEl zxH~qE_)ON8*pUvnxIYDYZ#y(KC0lVsZfOenWKuiW@9yn3Jxx5Z&^IsycrJa@Pj>@q z3)}pdkwydXM=0NMj5XWIBrmKEk%*|8-e>y#2>woZ9ZM z{)fd}0a?s*MXBG{4?Z;2q)(r*9K)A7Kfy~X?h$_R>n}5q_ z`w-9{Z|FFVe-pI(x&_6t=j4PcO})OlPTS2mL!(*JPqzFFKt+AOsnp%^I~TS%@}7!)g>^CoBo$TMT`8+9 z%??ley_ZvSo0eNbPX93>R}CX6g8TzqO&NJnABlPt9wA+Sj#>0a1dOz*GU-4Re4rFD z^zUO*xJbte_gZRd_p0jrv(wA^vyjNwEuEb&-pxwSg<<1(oR~ZWUX}C6g>FRD>_$`sbxpsmZzbzA9a6`=s1eQRFl5W zQG8nBx{2AdR^JgFN8@6|^NB_^*)p^GH1f0;CZL@dJ(#T1;8m5>b`a7bo;GKF73++Tlt#{m$zeRTC3}|HE z(^U^ah|k@p2qu&g#mwI$*N7RGNc{=p^CXSaMXBMuJw+2ghU5%{V*Hn>Lc=U1GY(y_&VOJ#nam^1wSSZ19&tZ} z4_*9L<>Vm6#oG%Xk_a%jRz``5p)IVdBb;6SO^o}*6>P4JO*?hC+%EwNC1PU+>8D8f z9#nM=g86Dp{ugxKT)((&<-*~)ATQsFQ6R!00hlQ@{?k3P}T z~g%|VD!~cnqSK^O?I4ZyXqhhBuF9w5Zc%V-|)_A{ja!L=(j~6;GQ?F z^}l_g4}&uLcB%K!z+&1*20~;P>VGR6sPq4|3lvRb!7WqQ`NufW>yzO<<|)?D!btW)j-)lwbuVn-2;klh7Z@m8w;`i;a%%L&948=4cII%Ip%fwNv(f7 zHk>#qZz!;RR5;@4cAWnt9ITkgA-DVn-`r&A{Y3;P)q8?yF>4cmg{&`|*>$umPqu<8yHRS;r45?)y+j|%Ut&$iET`G}ttT6N zlKNH^{GCGV*qIH)_N*v~*y}cBEBszXzyOMGb}mlrHIoZhpE#&wOS(gFlrsL#3bf=1 zfQ~D0iEszH_Dr?|!vS0n4GQ%$)Ia!7o`X8mpT5o!j&Il;(;8PI{kVtogJokq>S#{4rl8FQ6zHpHo916yUzO#i8Mk``aa`1^*>&=hVc6%cxZ zxLUtL%;C^bz}!IGw;7nR5%j`#8^2`o*p}HjwX*kVCU&0k3h3J{fjF}UC#L?Hm&cMK zW#b#FO{w)+y1k4wWFHQ1OaO{vugKzD@e_9JN0>Oe*rqQDb^`=%U6g$Nmi~*Y2y8F8 z>7~&AwrUF=dWk=*FEQV6_5ygB*{NGKyDb{mfV2wTrKNsrKWkk!om zHx6NBXiBbNk^CE56-Syr(rZQ=>7HI(lO6-~zs(n>bSymqF^`nyK`IUxN=xO9LU@VD z9H*tU3?NXo5A&!f=D~RRe@0<JSBaWNqI#%}b3eXOAgFf!g0blhS43Ba}2IZ~w-q>FD75Z)KRi!%E1U|xo# z58GjAZOcI1VGC43YzLS_8K5ROL@^C#^(MiDyTz*+Zy@#;7Cv3i!+K@;Y4%m-ftfN7 zN)6eGeAE|*z$>DOu%f#K8)p}H5FzRL`NQ~TU}Ye&YbXe4cV}Pk1ZR0D=y5bW?7uH! zLn(Y~J~o=PKTzzmGA?|ma1%=9A(A(yrmR#0>=l%EVFDCY;# zoLA!v?G#LwF#KFZFP;q~OW}3g3b+wp5(&0ZC8*I%hZga$wM4W=WQnBbBD}9es8^xR za)4%GnFT)Ea|kI{f1@9fqL+k2Zgm{nPpq(}3|#SiT=_jf^>mHVg9XEroKELkRtl9W zI;O;mS`d$(NDCxnzxns_AgnopM+RGBaS;oL$#5%GZ70a{kX#h=fqBsD=Nu6B8Jjiq z=rEp0!Ty zto_C$#C4@r>2Cge@;2pXLgZJ?grmBGG8~Uo21eK=xXdxc#Z^?Bf@X1V2q>YdhS?@@ zVXb|>S&wFY+MqM{Oy*6IJ6K#EaBasG?CpA$Z`$ThZzA8)Y*}IxBdGMd8(&^_87k2` zOi}^?e|}!4syK9*sNma?l+h%sPbG3T4iZ`IqxfNAwGv#aMBV4G$I z8;smN!S~10_cH_GIYQ)xaITJqlTSHBuRJLn9_BL?1xH4Llywa|VPz;CE`pzc#VR2B(fcgN4n9Xp zbMo?*nrjGeB4Wo`6nx9S!=`iuJKa*;e_||dWXgT~CGBmBx5H*RGhcOs!}Pc2ja2|G zMg=2pg|OdDH|BX_4MN~9$J)yKP;XUpmrc+r4@cmaZQLH)Ke_9WS##y{MC2oK9=G_Q znSxE^bj#!oj@mX`QA_123Yh-73~rE}6~UifHjE)NMp185FED{1lZ}RlpMM~l9xB0Y zQF6|N?(+-x6vxi}5L09N`MMah;>?IQNfw@&k82UhmO%hN9bLw*c_+^HH=j&oR)hP^ z8GbID{rBTmk#iE-Wsk+&W$&`0g<0Mvk0!T%6KLsjAlxIRp^hFMk;6@Ts7Sq1S<+te zAH+vCU35ddIj*8cg!Kf8$&&I7GE3JkoGoY)rZrE>X`}g~^jRb9T)xS0> zpod@0B&#`MKcC=J-9q+;KTNWUeTU|V?<)k4i65$OpZPM#w>)Lbv&{S%@ZfXqwP*b& zYx5b`k|tLC;$WtgBr$CLkt-W7wn4|D|0>McMK)+Z2%rzTc!I$qV7(gzb2J}>S7eUe zkGFIiFLbRMZD@#YffN^Jda<$N1bJm{v8Y>`+0=dYo6{=H9%UVc%}R&E%57j$)3wjO zy8?7ZXr9T2y2dRq-?cEw4hT;YW$v*NU3s=Nh ziwHKFYIPPm2J^SyjUKgX4K;hEcvoD~1;Z;{H)JeE4aolLE*wX$xRAQ#ghkb!F-D#9 z;Ht-am@nmA44t=)qqkosuhgFD60Eui`bX;CdSA3D4OZi+oc|Zathp39wA&_M@Tjf2 zR5zY!TP(FsUbGR+Rj;7{&RlB~LUkyBS?i@8duI%k9S+0G79D`-vJ3C7>jq-;95s@` z(uIC|?A#BrWt&O`4HAnb2CF!h({U+s)|2(l3}@LC_7Z8y6$#25Y79+B=d3~lx<4Ga zk;)idRFyG&NJ@O|B}etCxjNYuSe`*Em_XLF;-(ClHPJ@Bey}|EXRX(C1Ce80D!Q;q zyueiSnB8=vyaQ1^;tSHJ*#$Stwy{Z`6Sv{SJbFBob6@`FX1bwVdL5!+7NSqFJb=u0 z{z5+skz(Mta8|5lxHa&pN{glpvSKAu4CfjA&k`R;ey{aPvUUDbeemjMjY0vFA*BA0P;5(bQGoQJ}Ym`AI ztXkME=HQ+b`m9tJ8RnYqH@zq4=Haf{xMy;fc-eEhJF)2%mw@(idEYS7(S*Kh|W0BWc+6VXrU}l?zT{y8fP9nG?UN&?TAzcn! zD0m+0FR$edXDvId#}8=}Kk_K2K&%(*G2b%O*)4-v*c5R;Q51Sp+KDWnuZPggGj*jL zTFXIJTU~1&(QEd$Ucgfnt<_U6&jmM37wdbwAw;~{xZL{Mbq?I}z~ubIkDhA1Qa!bW zwDN!xARKjzOQbwJ z#9E5*$?;M~kN0kK8`i9?If>)B=^Vqdbe-dH{_D*D=(yV>VxfIdgKK|YQ0~pThBbwi zL{)QMoJk9F2u~}-z?6@6aPUgZFRkWMFM z5%5S6x}o87LfZHZr~@61kOHb{b-D{QJj&BMa0FH!=p4eyd2#vqooeDUDF?|#C7g=7 zO)ZAi0}`pds}`bs&GK)4;tS_^L}*pl>m3W_$C#z6xRfeGpd`GM$#sQq&Q}=Ae^$PY zk3yZ*f;a!#&SDuSbdqtta{q-mF_yivU*;%X#+AaBGnbqdtbjkRp)j3nHCJV`f1?i4 zOfg}(bXwWgEEpIIy56XwGfyOmkiZ9*tFf} zbc=^wovUYc$Q5jK++oe$ixq4GcvqD!HlBFd!?g81b13rj*iRz>Wj@Q>(1+2KrVb~;VdMBq&?Zb8BwU}g37zI+=c#`tGWy~ zrhVS!Lp@|4tL&i@9qT%6;nLZ&8TPio^8_VUUCWEH)&oxuHZC&M%$k!XtP(@B_A+@t zdGr+hrqzh@V0Qp@m*CmYdY>QcC1SF8vp%eClQY&q1v}tIEoeJ%COJiJ4SUv32vZ2> zIjgctaRgB~rH#E}XRkQ~7>?i2>mSFG8xP{&e7)vbX~pG!wZ?1khB4IFsz1wk&?omt zP>H-DkLPo9vcSm$B+1(BB`pUMQjwa?jiquC;T>GclhO_hiAO7X*+Um^2J zCcmZO`;YY$D;V^=Oe;`yw=f}x8t}+1Q84W*ll+!HHhtdZuO>c@K3u_6cIImFJN$oT zJWzwC!f|Q6DX$5_F|dI9QQBYF0(OK%h@XFPTq!Th+29rnpgnsAhfha<^{fBo*V-yl zKj8eW`r zS2y}wvm90)p0}lLdbJ!i6K6Y>lHv2)dB=Oh-H0oXs4O|7RS3%O9-&MJ|LEExK3-eJ z6GN>D4HFXsgD6oSlwL4yb>n4Xz&sg5lY zvk~hp2N(dcNre#(lw&Kfmuc+ORNP?ikweX3aMqX_MA3u@TB%{3~at zFF+F0 zMRL;hgiAU*y@kx-`hmMQLWK+d5)$n=!c2@J_pJ?~jZ0UKl16g&hXr$u{Ki9;HG=0f)AkI%9|Hg>h+1QqIBFV(v8fE?n~Y=lz#ld-+<_C6PDstjYdT>KtoE z)FKO-GPP8w@6E7Ps4M9vbOg24PmWV0v2N`0(j+OV zF@IpouJ`C0gGNoPxiuS@KU?bd(-Dt=)(QrDf_Acu@;w=oD zID7xacH*p%Yk&1=xC_SP{OF9{7aJ2t>|SLR2X^(*`WVh7_wwqGR92gI-&nb#;VTLL zF4^OoC-&KepK*e#nsH`rrlrGzsx`xI-FV zI&(;p{1PY}zRK|8_r1~s5O$l{K0J56Jv`H&-FO|!#BK4qd1fbWvht@2J|D}~`4$zY zl-{Ebad#po*40R{`X}Oh$ZfN7hI$K)Dn0wd3pgltk3e~gB7^7+TJ^#bV%hVzRV7N>4gilX z(8juS`wO$(f6D?B#VQ0FK-SU17^tulN=$TJVn6+88{g`p zOGX6JnZ~C7`ND)7mS+@>X&+;_@V(;{+u)ObJ1qbM=jP$hiGRMRBh5ICDnY#CP&T13 zmA}*wqpI-Rq5ME*Qi#Jd&8}ib1{miFQ%#>v@1<54JV@$=IEmX2q04;iB1B>cIMmv) zMB#Xn^eNhCLr0lqOjARCZNXTZ03RBdkYr=@In$@m1x!}hi~v4oxrLunAsaK4^szrz zz9B)l+P#2~YX4=~5o%5`IPa;&cq3U+bNn+DYOJF-XcF%p?^8m7$*CCjmK_c?NPvP= z#yaeu1M)o}Ru~g>&CR;4Yss_JQ5wPZ&nNKnFNYewYANo-=7{_L*>hZ|g0eG3$Ip@~ z1yEk2m0+(*bOCqyr?yp8-HiKApAe7kR~37?^xgi+iR9l`(IOUb=839BTr2ceqc4Be zz8f3td}~rl7g>Ol7P75lzmAAB!2WZi>==s1UGE$Dc$;4(oN*X*MO+bmrAs?gWf8Mt zgcy6juRet<#GqRUGL8o*!1+PtvB#b$OxH?%7Ts#fH0qD0hYoeg+CI5S(~<`oC(v?} zQ(mWS2~rsJh23R2k5`t@vaY?Gl>S2VL%5VP#0?qrjQSYK@u|lqZ0)eLx1Bj8M<{v> zn`je6ErCC3Us{rD$o%VABq%?uvN7yT1p1|4{9j8^&hW z9$%p|oTN!lvpi&O(tz2XiJk?#9=DaP8C@FXk03-B_zGRmd+wzKYb>sYno3 z+MK=2a#1Dt$%1N#7!%sVndM+q=Z++KQ=0PDmguX5Sf>1qpq%x_RQ+l7OA3?0aZrQ3 z0u5`*C0zV1s5C-i9E&0<)N0Z+qEksX#E@HLtDb;aR)Bm4py=8pvE{o&E|+g7=`s!P z^Jc{V8u~H@Nqv^I6$jGNj0oXxb)^rYz@Z{wStW)aM5hqc8v+I!(2U+C)1K-tfB6>Nt5d0OuY8OZ*=rDXKD_-oZDh}$`iKG_JI-2$jW2)GtqUKkWj@8+@@Ox= z9M?OE2suo^0fmk4vaqgi?-(mrIgKRY;~O+{wAQY5b{Ccz4CAwznwKH)#G~x9sT>DY zK`2-pG&N$=xBFr8@PemxdUuB5LpTvCAn4vLuvIfHp9}pKE`W5Xn@4oJR5cycx^NVB zzI4>^2bi2Y3Y*9gC@X#%D*w2Aak7+%TVyMFn!s&$E$XYT>+-1EULtoZp0i@QAb#8( zK`dNC$MS6ie#zO2Q^qrfIjh~Yuci|^>GscdI-+T3s*$0Kt@kx0rtT4kPnkmgX8*m{ zDTU`Lg+c-$k4NL~y6&8?_jm%qyuB@TQ1+Ts3&0E1*fuZKP1wKL4&V1Rf%Fckcq=H~ z9*k;^;6vs9tY~ZVbXgs9v`v8g>@^~UJKh%wb%0=qg*sN)0X{N`g&=%aA0CQ~i#)Hs zN6F>Ks<1(r@jQq7p&a?OTySrK(J{qhAPiseB{W+zD$D^+uIL^dpi=EU07!u=VmqUW?Egr=5i z8a)7X;yHd;-5!xr2~^7f8GD)-J;5ety>k>ZR(QnvI*N*~Iej8hE4TAsC#PYT;PrI} z0*02>J)Xy@$%5#y$po*w?Zem~t=yJKhyTU5YAvn(d+X~v4a1WWsQRObc?h-&$@o^z z&w9~WUJhJ#NfC-ugq&){W(%0pa}Abbq84dl>uV^?ZZ|mNy$q8roa?m7yVGSM18Z@8 zYAN3Cp1T(kl$*LqHB_63q8&S>61x|rTsN*s#GAH1BLG>-z$~x`Wr%ybfZ_mNs>sJs z*jUxN*!nWw%x!msd1^@urd(G?5yVoz$T(?1r@bA*2~%8Qv#;+3z zot5QyMu*9&mLEPL49k;5(Y88-s0HCwIQ3?uqa@7<){KM( zRHsr-i+!M1`yQ%1yJof*9#S38MCI}tmVrx_{iSzuZQIBq7RUx=hm_FeB@U?L*{=V( zF+;!qnq-DqyVAB36Ws9mzLtu&ZG*Y%3jND(lUyi9EW}(1?P`no$Z?$+@U;H9%avCY zh%~P=>utxZMu;k4l<$8knme0v6t~iagffREyBd zkXc6*sA}i^>UdqozX|oN5K2o#nGwpeU`tI7-f#8IIUwfe48n@DoTW0oSo+I@MoEdk zXXx?1{N}>l^Jkt@+&=+zRba^jSACDpc? zMX(jg;!1I<^RY{3RKtm7C1fpfXivuIVhx>t(NB z)=LIvC$)~az|O75L9pz(_jv2B_qe-r*8xiDOLxza7CKh=241e+i#Jd;x$}}L{op;m z0#sW&bREb7i>eK1Buz)$F;w790|wSRU2Fw^T`B#3QvZ2XC*gU#uk@v`;&h;qQgbUD z%*4(;jhfVZNADKq1vnEvoI05%zgOr5J<5FccZd927f0 zyA4ZU$&;NOk7UwZ$(!ApA{#sRbZ;7dIo&_$n{C%Q&Cj`HH;5Y;=(ZIxa18D z#6fm5P1e5Pgo~CfbvHLIYl0x1us^yF)YrgfwuV>Hdk^kj;19gVfG7DzuqxwCmHlRQ z7dW`2Jo;sLa?PB7M-$n;@MgWm(!i4cAb&v5Q&6v*{llVW_0!uyq(s~08Cz!d21{g6 z*7@>;*+cGt8vi@o2$N1pKW(XAg@~jV^(-7`n6jId&;0;*>Pge?`468A{omAfc#Hhr zbSw{@r&_h|FFzU`*8%2l+|>Ib#k(|dD*0Gj2u1}1Z(d#7+J4x0RYr%{5KS~(j1Z_p<=-m><6Be^VT8PLP zDgAW+{FWFbHY7&tqaihzP|gJ*H+Un_5IbDn^Am=~fG^$8gMJ*FS}QIQ#736NTKiY& zkR+_o8>LPZT~NbPQwzv8Cj=~x;a+MBbBZjEqqOTqor(mDa|_}GYZ3Vdjq6jetv&eH z@9c%=oAaE7@SO1xoKNBDrxT0!SdI;|QvS)=sWNU`_QZNs3HIoG-%RDene%Q#u}=BEhBe1r!#TTLP`W{I0}hCe za*=!ZZi_@m`7>^}4zbD!u}=ClyVFW}liD9S&WpR=jrLdMtDg;GYl4gRu0jc%L0+T< zs%G4pC10)7mS+w4ZnxYK%$lp=mr1iWp{g=G<2N1x;{jM>nbVHm0n?6r96=5Eb+0}& zw8rDW7xhh)BhyPAcQj&|?lfX+)!kF~;G9$U>Qc?P|E98ebk_ntTLe*e8}Qk|2`ybE z$S|)0{>|rl%5zL3JAV%WbTwo{V@tjiNKRta&jyGU=xMeDM2FW@Z(^0eLBDMCi%sry=^_2E8FtcZM^AAVp~26#O8uXq zbSyN9z*jrQ4kHbImRK;C+Y6CgJ7a<>Qbb69NBGH7UM0_5UV}#Ik`^efl%YpW8S+ub zWcc&VqePIdM$E{9NVv3x-YHUU7XIt(Af+YbFj|eZ@4JCu4LffKs@pRDwai}?ry!G2 zZq`nLD{&v+nwg`r6wR|cuPh*M6X-TGedXI*Jh}4%(lh~;ytJ>m*Y~;9*LOnkyr;=f zfvb(0>8CTNq+y_0JpBfwY-wL@4<1|Vr+2r$J_6&f9d_0C9v+wX+!P-jt>wQ=Q?giJ z8@p&a?G!XB%Ft73>(p{jrP8)P2N`daBjE-R9ViqZl%vaD`{dj!P|~)XI*@BzrV26e zPj6+TW^FXkqnQ{e&GMvsrT7!Le4p%jJi1Bx5?oN;;m*jNWeO<5n${`m4IRkmM+^$! z9o3=2-Uey{CUn^Lnea>Tu)u73!!5Vh%bL=LD4q6-7v^Qs_K=|IcVFYhl!35|Qs`p65MS8qsZC^= zmJeJ+rr;fEL`iOy{NJ$5yWL|U1Z>oxYfY}z{H2gCjt3nRk~Rch106JeWpX>I?;8n> zcWzMQHygp-ysVj^16wqgLr3Eu%XbHMUR`{fGKV*w6&wP7a_qVlr_7yd&hM`0lLn*P zE<5Ui>H_Av0~suNt-SM0dt!ZQFy=n?PWjKJ`xagY*SQVp{aPALo`rTsnsPe?x+NLlgWwyyUZ*f^!od`T=H$nO;b_iC(1DlVQu4ioD2@q#QymljfNryUKo$-wF?Zk8 zv}Z;_4s%5z1xG?AXaE^L-k-IFQwR?Ulrm?+*Aab%EBal<-3FEZ_5T`pwD=pOX-PMLqD>VmXnUrw8A-Ov7pdDj<;J#1wGK8sbJr1r#VL%Vvjp ze-QbVEc9zFY^DyZCUvrrEizV9Eq3({XrfKNGpexZ5u#ejvpeoi7bR_N{G{^Jm>s>! zM9AqdB3c-I%iDTo9>>@;-}3Q|!UOJS-D>00{CX1X{$6whXc0X; zeW@Bh`bnhs=@(4)c5t^lBG4EA8kSD>OPknLWhCK)btvJ(oDzTKArSqI*vXj1Y!>zr z8ulz`!b69Ns|E=+);f;3QGlAe{$&5-720Lxh3*OUOWx(i1(wKqDsN-LxHqhHZ`u~~ zeWltS>G|VmG_N&LP)j>yV#Uz=JH6p-7o6{XOFA7_Mkvt zc@*~nxit1jNo$}i7>wa8X53wvtT6GJf6Z7aN!;O_kswNzYXos$=8Z+v*-N9yKv~M3 z_bLT#o-5;@;j5fq0yY*HtH{1P%|6};PF5Go-g0Fc5T*0CpS?>6?w?sT<0~)O4eyxB zcePL=91P-|Bc%nJG9lKQnza_&W%U*ort@kSrn!2bZu2HcaCF@Gl_O@;oEDj^8ElG@=VqN0L^8%9k0B1=t9YK z?dx69Rqf}--NAaS;Z&7!)5pO?>rRqW80;9suaqqlhS?=`16p|5u_`zkfY47{h~jm` z#AK}+;L!*boldqF6RiX)O)@C$i&NQaw-q|EUYIstKdALh`Q~^TxB*$|PVLeM>$XbV z04?RI3(OR!_JbEkTLAmsx^0Ha)I};JP#EIWZnDS?K%&cD13W2BP0k`70|4{g3!WD1 zf`@+=_=#tNBdzT6cVi2YkfvENo@7gRX?-4)*P)O*-CGhOy|@$x`RRYRgsIS88l*&e zwd6*6sTb@DtV=56rxuaJ)R6f(j~$itmJLlUGX zlHDDFE>6NrgTtN2iDJR(*x>ZAA`<&O_IKRjcFIW3s&!k6k3f8dlFu{L-32kZL4yw~ zy%c5b{m5Sq%1n&;`MbHD7cqAO%#7t%0=h(oe(6L9rG0*iyWpPArOxXgK5Qj>gccIR zDNXWmtj|xf-#&flLBD)|2l@%3b`q1HC|LYH3i=8Gt3dg(!Y$tQQ{(9U5|DV_B7^;W z>R;*k%3YVd>Hf%G&vtYaT<7F!C7R;jek$_GNP625=o$Sm7o>XP`zOVqDvO?983v)b zk<1fJ9d3J%=I#THsaMUN8&98(wfG@Skd(v~ff4oz< zKQG*Rq$M1N%EC3$Kp!tuzh5N*|DumJRw9og)j+4QYNZ@vp^24tkc&)`;Hrn3MT<82 ziJ!DhoskF?9=@hYc<^FuT;2jDs<3!MCU+7Sa+GJflRnyDy=DfSH`n?;Fg~F-mT(CX{Hzn znZr#;Q;WOw3%J%4HuW{*xR{Gh@S)Df&{ZZ;%IKCmG}yw5cembuOL(^HTleW9++ZO5ad+3@>txF}BplHzV>X~)F!ay>};GsJivkAbA9SlBB9Ngo#=DPDv3 z3Xqf>?-L;D{h>+4>F;a>b%AAqXrx_`w{2Gzc zI&3gj$KOT;t;0(HCd5kX%c&GIEy{*y=`)O$hDAfP^l3s%MLRcOrE2SmE$H6*(SovDNXllh32TG|@T)KBNP_a{~3Ig#?D_JALU}qDL#5w=RS;&a{d3Z_$W8fetdLh_$c?-9N?qMIGufbRQ9p@ z%tE6+eiiED@3(qpVX5EpnT0Rc;AT44vu74gj@JME z&n(R7nFa2Uxq4>dM0}*F=UMEo@YdVRuR9ql- zdZ*+puU0tA#~{7;)BM`4a+cQ+XNkXQ`psx&a26)#S;5(zOdy`w$zQHf-T2r;%-vh( z#xK{fhfN-~UohDNKVcIWT~hC{rp}}Pb3|9h{A``B4SeMXB^SB2lW3haa!f0HWlRS7 z%1Ssk51lvDXB#v>GsWk8@hwNNP>Ld9U_KwVbx6` zsR_;$+>KP-G=BC4oM2-6M^xPmev~MSAEN?4(B$}4qO6CXBl5HK`9s5FF_6?oH%i;yh z$#z)7rwlt-hs!uxhkYYIH-dBJx|&S<5Ym}?VO(22y?hs%8P-(BUJq@XOPUUHY)<$b zg6SX53m-CY+4@j?#=@XL6oq*R4(8rqjkWM$1S`Mf^G4E&o-m5P0?evJPaa^$fKiP{ zDl88aY2PtbkmEhUDh^VLOTGMe?GadKZ{(3s@3`8%U zh|zJV#n~&OI4ni{nT2bZXL*9SvbQ6e z@B~pVuf-K)vev-+DDq}78VR-H;##GDW)!tG7xx5nTw%1d5#1-F+l*KViHlp^Nn9LW zD0AlGa3ypN&Tp?=T&#{~MFnli#nqQnDP~%f4Y{~#CvkCM(U6P7f;qCC8@M>N^~Bz5 zZ+-H*NQk*O8V2VyeNJ+p!P-LQ}1 ze*3w&IpyN^>>FI%p1BA5Zrqo-xIOy-7kA@+F7A17aeL;9i&Mtw>|=kjk5w+NQ6Jxf z`uL}0ha}e7D#~m>&vmiWs-=G1&eMX517P zh&>!KZkT5DZn58loZH7$&g~ZB+-@Px?H1zP?BJUSJehO>{r^otbUoV1&klZDb=%_F z6Zg03+@{|yJ#6x@{j$j(ez{)ssJgW3JmuETxsFqG#e#_|rZ< zmhn4s$)RI4H#wEo-DG*RY24i!J*3erzMJ$$VF^$Asl|80-ok4UKi@2_UY^Q2AdU}O z+4!y?qk#NS50OOlEuXTZp!75!4huQ7GI3}tW6%6Se98x7BY#$|sI-FIkG>PGAHe7S zl+l*Yy$=5tJxxw zX_j1k;%~PFSA62n+VUUt$ls%ad-{^Z9J}Lv9h*iCJgzE(sXQddjPg#dSUNnch{00a zb?@XVPhnr-Wrchvmz5X>>e3`&v7%;F0$S--=+__df*tT=6nJ?wn+44s~1qrq1&b+b@Gn;zD&hx`sB zU(T-!c4Cq^wsD;17vBm=J41h)&!vWzXl`l>9|sgkrzzl~ z54%o&Y1Z#lQ+FVB2mBX*MDRZNGUaQa-TeND_$g$D3a~`k-dRNNfCXdPNbuMNFlGGy zk$=svOXsu8ufct+Glh+`9#lR)R_m{x8cXNbBR8R&d0R{ z!DG30&*(tT&M*1LJk&aHjRT(C^vnBx4?n9tn0O#;=+pxAv=v4W@02TzeA7rem582p ztu&2q-#O+?814qF2ui3NqpN3w1H$7geui)R;I@r#%W&Hff0xy`?}+EOc7@Mx{m1mr zZ=oJq+A%S5U_D{X{;7ddeJlVicDDr0TkC9L-&Zt%Tk48~jzvt>H=3>HV zX(PH%MzMpN)gjkE@X?o#cWYn zEM$wmL2S{Jk?yVIi`14AJB7XV$JZhu=8I?)e5V-?6pQyr6mMF&$CdPpazv#Hcoe$L zPZ2|em9PC#@6o`t-{X!us?1sU84WHW28OjHV2%MGEQe7qmq4`OpH&Xj|Wj7 zKi!lw+VX4gmYVpUgJwn%m2!0y(bFvz@Q|v2hjWr5YE-~~F8%utE98DEdZ$)1ZTu@p z#G80>Ky48U+KMek%|@7LYe&oZ~v1*^su96e$}54}MB zz4K4f-_1)gr|Nq+7x78I+6VX~XacLT3FeGR8s_g7Ked~{>p!Hq{ZzuIAr-#7xIvPLcAvj}FgrccL$k4qRTu@gVwbmiVY;m4^+wE z3G*}(RamP&h-+1O*M^klJG(ZdH9xg$Lq_w{yEbGsKeKB?&d~fUT#}mK1{YI<>^I~r z)2i4`g)nOiVdbQ25{&Lz-gpIH30Hv?1JrrN%~W#uYy&7{Xp#+Xw&Er$APmtexi%d% z&-&}!HoyNYlJH2v9E}9LxIh5}GNTw!hzArYrZsAhLi!k9jE9#vZ+nyyM}bmYpa%rf z6`O*3;z7N;HaJR|d*h*foN~J28Wh|Y3tq1Wf5U5%p7I=Q5og$LgQpT$pY;}m&dYLkZ7B!XOAx)f>;*L106L73=7jyk&Ol||u^$)}c z`m1T6UqdtOvc1k~Y=1nWGnt^dxxrgkNolbr*Qm+0sL64#dF!CfwW!T;oIzCZi#57N zjjlzFu2G|FQKM_r=vvh1IBqy4Z1us$@{P`{e3d5U8=bZCjmq*#V&?8LDTje?9NH^+ z8EkF8LwFw>dSfpQ{!R;4;kISilXOj+PCB6WsD-YMi5)>bU-J@Fqt6PyW)&g~n`^G5KeSQwg=3 z861;Cc>XnV9u%9%o571Cp~MW+eTACt4CG%LmtPW-XH}z$A7$gKkekJARfiMm>d;E= zK}8BVWjke^FTRVa%#g`aVg9EK0jB`MG~@Oipk*W>^bj8XD;a>&7Q zQCxhSn5C2Wc_ZIjbPhj@J)8;c-H|tDM?N@%cI5yfh>!<8SYC( zM7WKZTL2-jnHcW0IPG?uuN^}#byHxbn;fA-j7%_}I#|+e=QI=%cH63xtK+%|kh-)I zK{-1iQr7Kcr_0+(58S-3jH4+~QHbv5D1T0^%SE3q&d$kogR|Z3W@i`ppTNcHf=Prs zUAG(l?+VVq+b-HNxhWdJxxCxy=6P6B?f4!d3QsCu7t4AGhH$v2gz`P4V+F@k1If^r zQQbIh!A&nLxdj##J;E+7bXyc^HiU+jXkkyT2xW9VwREB*dtIZ9O+!GUtR|4yisw z=;X?VUnq3A%N*`9oD(vU6bY5xR3RT+ZexFvOxd-Hc}V}==w)y;i+dmq>7|vPPK$)3 z=PO!zilLGTz1@rw%J-0XM(IxB8JBc8ovdiaEC;;`{1z64%ZUY%CdJoXhXWwHr>@_% z#IX`Dptb4|25?%zLk!nSR49h}yidTy*_eWze@S8(6O3V$B!=;vz%Vc?*qS}3Vi@m> zFpQ6>7{;y77sI#;_e7awGYq3?kcwg4yF%<+jKt}pt+u2`)V~d%T290F|J9B9G?1%u61&9UMNr?r3$h%48 zVhMOG(A5-lkphiPxz7|h$54hOC8`lcTlnuLev+^e)IbRaH5Qchd3VP)M5tu+KKnWjIijmodl`wBLVj<=^FxrI=8a>DYtkksm@?G_(VV`{ zoG!uX?C48pU`JnCXGdQev!hQ8?PzGx%PGTC6+;?4uOQDYp#|Mym{4D?RBTf}S7)52 z`ZO;%7gAWqb|W6L+PXp7wk))s+wVLj9qRNv*_~=)Wk~FNNNfWnR_5G5q8v$N{C3TE z!VD3SqNL!)t5CLndpzHU@>d$mFS88GKN>6l+ScVCZ7jbm8<)S*wEQx|y7G_4%fGhK z^gb)Jv9Y^C)BBe2q$DQR-1NrPDm1-~p?cGME3Wjo0@j({u zMOD+ALWSvl+7OxER2E@+H?@&5jvlSbX0Vw|%`02ktt@m&Bs9}>FH_T^phuj=S0IyxByvy9`^`cd{96xm+Nk^KAbp*p_sUA$*&ZL zBoVdt-|VJ2g!ZBwk|y#iL)9aT4lFosdAOpbJZ!reZdW(6C7mS8j$*bJ>>^7X$4KpF zX_rT?xLr=ek0+3@%W3AYT}~5C+U3{q`i;|UE6T_PQ_-I6pTTzD{d{frs}$S)s+i?-6k z=;tKgWWlb6o_5G3I+0CxAu4+~64@?IdDR^^-6?4>-RT;c?i8Ve^AM&xd9`yIipX|h zx+~7O>3&(wUYl-rqKz_5OA?$*zp7cV7M3dZ)s7NzcpJ zdcQKV-YMKuLiwJo_rH_YJB41#*87#xdM|=Sjsc=i*uiCH)X8nNYmiFX&*tYKx*3+$_jRzVu@!-6cwtbyZ@6|q~tnDv;0rp{@ zQW6H@R4W6KrT#PvQPxpUydKJUJ+Fdx>;!O8c7blO_wN@GbX+6?KIr*A3)RZ=iMKlf>G4Jg3vv!YH>cK;s5Eo?%iQ-t&^Rkwn7AKGjz1@@&niAELp4$~qJ0_Xr zbkcUT$%Dz3CYM-^(oq^+xr{!1m}_$+(46X|%qV$fVqWi}5sD)VRBtMrd1;(^nLX-Y z1dUWn;w$AQ@5(VOg8O45zc@W{5o|44Z^1S-i<=)~a~tZsEi44%5q&vG--JONzD^?t zdw~M{SeVe@<9a-0okf@7{Grr@$7sAzdhl7S5lhf-?ei9TpezgRjK!zu4Kio4OzjVK z{`iQ^eK>sXX_Zpij>q`>W<~m4m@NNRSaw_pDd8M&e=HFtJCWWu>g2vW82C;{zg~}2xsvqb+Dd=)ZMb}YG28b0TbZ0_FYSHJW1daM-aGA z8rGK&)1DbU7iL87l+ZxqSSj{0>$@T?M9CIg>`|c<8Hbbp9=%cdfYhN2v_ zY3WmvJ{i7Od^~E|tmZB2uxx5Qhud(-*Sg6M+g$pkCk`8yb3D||e+$=}pkBIO`y8q^ z-Jom6;Hy{rVlK)7hm%9UQ4aSjeswwE7#)N0bTjGHucC-f7ZVnsGeSwjThwlJFH$3G zwTGxMbjfH|?Ex%>ZqpU4F3vEQG`wY5FvL3_6uJ(a>4 zZOKYXYctHz!f3KW3rAYFXy^>I@j{X@Y;tFLlnj_{$x#Y`?E>6-qqQO(OL2{8isC$M zOY&-l7-bpy_!jJA=t!-uBlY0xxY9gCGutmOG5q;Mx>>4Ru@>J;i%+lfIM0c3ol7pi z3eN-^dCvINmQAgR+_e`iHd{Kem40jqCoOB|UTfL!@s?#UZXeZPsIJ&{cF3^o{IxhV zJg%js@es0v2n``#t8zkyR8uaAKsh8Au39T9&pr1X^laquGVq{Bjj3`u)5^PMo}V{& zahlb8TxfKshkC_|Nb8B=rD1B_9yY24I|M#Gt9wK9 zy3ZY4pbd*V8Uq_3?Tq%)@H>6|taz2B;7{g!`=YxO3rGWC)YrUiu zylbr5zv3E4rGxz|4N4xG7WK2xPxxNuTdCa^U<0Hl4qO;58vjYyQPiR|EYeo+UD|rh z1E1grxS*KDiZz-YaJVGU&&x_MXyD&9RO3A`I^dshP|J{$rXLTRr0~tFzC2J&*)DDp zw|3?pde;fQBkkkZE>swU%8}BF6@4^4U~xGzuqN5?zsT42>{tVJXWapRKQas{2VO_p` zhU>EF&o?SVNm!W;u{I}p^~>=3oE6Knk%txf7m$I&3-pSc@E-Jm=m;DeNt&>zZ*76a zce>yiEz~({2v$USPv2X()v|Hh$zSWhn&i5MBUW~j9%_#~C=+$rN3~PQB^_m%*Kple6~WWbKKGm@-k)&_ zG{-;SJRi2U6d?Pd*b*`Z!kPv$Z>kc&wF3^bB|&ji7dF0vI~k~Wl{xIy4u zfu})Z_h8xR=Z#*%=-&zfm!Av?)^3LQ959IipKB6uF$N^&H3q!0RZ_2NmDEX%NeynN zAg%UN+-11JaXdI~LYcvCL?ZOy-_eqMDo2#|q!}d4&1Dpn_3!2S_hJ3P&LQU}bahSM z-UpGM1VesJ0x`VR@H_doh48cba7gk%ND3nQ1XTnB=+bKwAQLQr`@y5Z^Pos%@C0oW zUTYukg2fLyTtn!LpseJV;f{%0K)p?T6LlO>f(H37 z?3nls`X8`pUPu*g?&oS9kmNHP{o+dQBg4wi7v6Nme7hjeJ8=GQ+#OknX7EgoYD986 z{n9gv^AhbKe+lYk@=SFmf@iR2CbZyKsEQ67oa3-m!=h9NCYhPUYwf%;A|uAepJ)kf zIBQ&p*V+)YMTf=`V9dR-%b@Jbew6JDJY)gom zCB4O3*Pxbcp1zTU9G34jhm*p>Bb!q@znl=y8iPRMQ}k_<+EPe`;)0US*N*B!)ekH2 z;+#dkkb#}IC`CIJ?jv3!;>XJjrHxWcLXq=BR92JAnzl69xnd5L>9RO7?5PXXp4y0x zR)gRmF$fOY>mWEt83gn$e)b8w{-9Xb9~AHUzp}nR=&!Nw4~qBwL1Et?$$byKJs_5t zgGH|oP_K7!1ahob9UHp1um4S}9fJvwFOC6pC=v99Q0RGHg$lNL0j_rW&6Gz%e)Ea! z1HI_)3UWKBY`n6qR-B=~oVD90%7Nl6oicEQ_nzAl3 z6hhQsnv6lYbPe9m?)(yK%P{V<3S2jinCHM+4J%FUK#$!dYlp+_0EuQK=-MXCsxqK$3aIq2Pnn~G3#51Wo&xU6fII9E*%vbd$)@5q9L*-3rRV9QY1oeuAUoD(v`S&CRWhPU zlg?;|Za9?=ZK&Ut-H&2+MF=KMlrTXe?4Kpyj%O84l|y){91@0vojbp=AYl%oD7Kit zxQDt6`30O{DY1fLD-2ojbu?q+BG)5Y*^F8_H6*5AxSqbDX@83KG(|b3q1TQTovEy? zvQKTzvUzRI*p`y5+PN}YYp@6EF%gb`tle-$%%(SE|2;cz;tA}`({XZ(wwmZ(EV?(= zRN_KywLmyz6mEB(SWjA<`46zt^EzM;3i+>Ho3IjemQzhET5O_ORlB%L@H==eQp0lV zwPiHUaWk1Tn@md+=HSmDAqc~h!+Cw@T3YIG1CI^}UM|-TBXMY$u2>N{fdmF_DEy)9)G`gr5p(-6L5>uU!s8U822D7J4u~=84b! z&|-c}ssTl5 z^XqEwpU&u5B6JyEYmawLv)^38O6!|q50cXH-{~Ip)j(c^*S-b8*ADJT@`fTBBStbN z;mI|_7j@)SKPlE8ks0o}zD+9(X$6=d`K6s%Xch$Do(C;{1ZB_n%ke(Bd4-rA7(@Zc^!!|mq~)sTFFCtS z6ypSKp~Z{XpcVug%}>SW5cD}c@(KD-Pt-2Kk~Vsmxj*v3|8@yZ?g+Uq44W`Wy~SDH z?-xY+h(;Dp=b04zj#Q9_FEg(F9(iw5K{$@Y!h*UxlGGIzpM19Pl@uTc2^A>hV&}ei z0oZ(0GzVf!3~!&kMI94g$NoM}g<)1E32)i7GQJ&N8E&ipLECf`735m>6;5%H%9Ry?zJxmtofWv8m0;yAezK z)*@upwye%8NxUejBw>b0^pts5Wmueo6-(i08ELr8a>xy%oUKo8S%#F2BSpt#X2Th6 z%V-YP4H2*=3|Po% zKnb^EeI~vWI_+-E_VjZ9qa1VP2NPQOi1=jOLxS>#r-ZpvA{De6G z3n=L;mIyN4c)+jrPjFxJhjG8TVj-kqZ~UQ=(2krBx2Dq88%?FH-(V`8e}<`a{z<0N z`7bt=&Og*tI{#o(>HLxzb^gMvsdQtXrRjFC3JO;ng`dd-5&m2Zby)tD1QsvqNZ$@N zW6wbZr?z!jO!k8$8+F(*c5p3riUGnG{xfQIgjKg3n?#If-S3wB&lVEBTFsIj^U2U z`}(0&KZoQ}%P&QG1PdYpvy-PEAOnZaqxK9#)<+?yP@9AyUGu|`BevYC#uWI6(0w3g{oJmToNHBIcSF0n_%&Nt0)G(E^}kA^YHPJ+GC|di+}5(;mNe@MutTY_UTa`rS8zq=I3O@_fm42xeGQsSOlX~>Ci}zLDZ3d z9~_5z_yw$p-!Z;MD?mloXvO!g!G|*`0Bc1-dZ9vrdJ(EA>>4!>13#M53t3#JLmu-e z4}ER zl;ib}urzw7RnUXEm8c%64SxT)xk1*oC}p^o8q~60ta+Op1VX#@a=cA&bkQilK}DlW z^g6k5bU~LubMxq;ULaSzEtT;#9F8wemd6&4p(2ke8ecLSIkvb z(3ggMhI%MxTCoW9iEtB>H(QV2!^QZ8!8?RQf<|nK+5sxQUNngq$S_=n_cDH$Pd|PS zZ#jPZBUz6=$%GF)p?Dk08{Ag(EhkMG>x*&p!eGZ*t7BbP$NCZy!oeOFYu-OAn~n9B z{Zl7R{R7MI8?l+@`>&q-#{z7}L%>IyJUI{Bv*Ws%9N9sWaPx~%Z*JH9)FMmw(~HtW zoks9Fh_}ESG=kUjOO!OK<(Oe< z%cBleA!PN!Aur{G9II4t3^+}Li zFb4j^FV_lJoJ_cg?_D?G`GxB?zZ4Z?kE{Z~lhi0&1J%Bt|uSjHdh9+VRxBeu{54 zVVqzbi`@o2HwrhKPXMnW2V~MxxSMVUNAzLaPl>D@SN_?EYV@}7n8Av?QdGOpF)M9dW$Z3IZFH}K?h|p zUzp*E`{;QY97d(!BR$^?V=tU zgRfvn;*|o5I8j_*A+FN@RkGP%B|J`&9w!NplcmSW!sFG_gKqeFL#WUFXwM9n(B}R{ zk&Z9?9(Fksr;LPlb8U4uRr9SLosnEW67I}vZ}R9A{+m5~!PL&R_Rh7HtTAjm1*CiM z>?&Jr`CQV<PNMlHSdm+NM)!D!rtX5NFf>6XZX~TpUH9d7R>zyy8{@&oIi7U!q&gFl~9G$K$8%U?)jx zL=)FmZuxhb_(T6T@mEshP7`rU;(q8LEm(#N3Dr*v4pr_C3-2e6SQfS-6?M38Vl#M| zEjGL`mPl*?JzbNB+SVq!8LB-|t8MJYCwS!~>>4~F^pcZV_$-WkaMI0>=Iy*h4hsKy zY}03Rn_eSlddXsI8IaOF`b&KKxB>-(dsqPiJAnrok8Ka)L? z6hP-ddh=PhW)8|wYMr!Zh5=GpiGKY%xIRd88Os`+P3yn5iAuEz%Tv1&ff}v$9=PB) z@Lpj%SLO_ET-OMmoCoPIvlim}@KA3pJlKUm%qpm&qAs|w6r5Eeh2|Oqx#Z?5MobRU z0e)E2MsAZslge`>l;?}2N8XE-ggxT{+NM!bKJN{FfSF}AxE;uBK0ApFYPf^^UYHE6 z-*?OY-GrSv+^^NHz&TdXHdSd9;% zSlH*oIjy#{TS@RH3c}VK9uXOmP9Lb>bc~aQ&Z&;eZ3fRU)ad*#rsu;&;7n~3wm^QF z$*NuYi#=nc*Q<(NuPSZ$V3y0^#nnUNEKR9tQ{a#PM_tWo>=~p`pe;3j3 zsq}k3{l15OKS#g+LBAb`twa z@xK%~vqDYc?!6}wK6A@_&}GSp8`_anpUDjtYt6!0;cY^HMkTGNrx zv;tpBd@1wA@1Uz!f!O^CBasNc+)ebL$adJ)X<82@Y5Huw5;NKv?x3#Z9n`KQ(O6S> z@it!-?x&K8``~&8%~kXrPEQn8MB5FDwh3cZ@Dvv&wsY;$bJ;6d3BK6P7K;ctM4rwe z4~}l-S(=$6iwZPURwej8CYGlH>qcCR%OOv{a1p3V*uYa^o%sD$_@9Wg^x%m#P^oq; zcrEtv#c;2^l`=y&b$3YqNBJ4Vz>_WbW?|Rjd4|#C;urT^aU$7t6W2jfdj>r4$3wlC z+Ma>J#Qo%3Y}bWPY2pv)6MPmk5-dMv--d~$C(I+G29L6DGb*|`>O)xZ`2Xkb&Ew># z%DwTLs_v@lb*9oiRXt0lC(DGQyJwQjkdU3QMMULBRGbO21q=p}!tMkyZRc{Yiq|by z6j2dTaRn7{-@S+eDvJK-)jgAdulN1^@te8 zmCKR3|91E`t`YgPJ}T!e%;4v=kEWfe_=*#G<6JbE>Nlb(o{})C01JPO23`&FGhEXR zuBR5sgwjy#Ht$sMHg9@f$+nylA}8*f3u19b_1+3QJvaEJ@Nmx?-XpR)p`$!n3x{W@ zZ@dgMxRDB2rz(#c{;Zdoh`AC;c5jqrN(K<)BG==96}mfa>)vkNCHd$GDTmj?XRL^E zpj^Z=Ie3hh^(NfLh03;Lv)BNz4cTb}V!wuGf3KnaBggQII&It7jSb_7ow~5zJ*u4< z4Ae;6)ky>gi1HR#j)>nkIhhH!g11`!Lt@`$8UF4*2-^vOOc#>XSxzz#=ZN$cu^0~+ zzTHpHwJgJ})bDroI?1hrBnIl3H9W<#T=?HvVScb@mmtv0JooYPTON@+(H3p1taB+F3Oj;K*TCxA9+FcB=6w0LJ&^^i25w=q0+-4lzmV zx2=frYkZ2K;nQ;1KP63aU*NHYQ)lWA$5uD^Z}~W+dLHCd3<_-bCI(|Mq7mac7o!^* zbiOzrxQlvb#G5GSJYUdIzjp$+wRU-&6PS&^qFLK?Zz64MMc&2TMx|a`DOz>rO4X{U z)w&zC`rMVVR$s!c{)}wxCDQziYBemJI#a)3Wz=f;ZyC`=tAE6)RI4wcR?mvXFoFZT zj<(M2Y->vQmv|j5d@j~PHqQCa{`-J@vV( zMA*w$#k%H;+%=cVF8QJ~FAed5PBIohCw%b5unQVLUQQ>&OVzB+R2_@w)>}m@%;1gv zkPMe|%du!~W$l`nZ#1z?Be)vcY#HAUX|q?-6%Ng*Q-t}8*qq{qg?(oDebk)`V?NXI zaF1^Jr}vX$z!{M5eWu+=x^n-rTa z+kYvF%#EbXMq)N8y)Y*uSCU;RYtnzPi)OGT)~e8Hk<%WF3TdpHBepDG#$d4ZE9mN= z8^`~C((s=sq;$t>U5+S@*}4Lo@sjYRckJN9Ar^(`O=RUcw%&v{GjLou7odxbT}L4G zE7}4ou2JrpBHlF6kZxd_9pz$hCP5yQ+I+IyGpV*^2qqp*%MCt>+zs$^7F{R>F>T8g z4#$Ox0@unXQ1x@jFPQxk>a@BPe4^7{TSJkeP7BUMMKIuro6)+u=KlY{Cl`)Bl#K$@jyGvi!tp z{sGud#EoG=8*pn zLYJ68frG2Ca>`#Uf|6!ALpKp-WofyadBrbF#x4|&)@lDcW{Z>aF`A~H25rZKou)d_ zdvuM|`l*Q*%h-O6uq#GZ-Dv(qI9vGWp3y`+e|?m~XkHWgP&$yb5E(DYkJV3G72ei} zk{h#KEi%XI&xfJs>XdVEq3EajYgda?7v)QCe}uQw9OEKl2fs#H{l^fvQ3ifI3WRmC zvWWwX;1gj8+bd_u5V5_#I0}<4K8u|i()ZAy+G;lazhXjd0C8sFzvkPhK7IxjxcMQpg|wgLWqS z^9m|rJr^-PE1Be`h`|0FYwK6Ra$nRNUmX#Ea|;1iYo{=(2PU>&CBwcShPfOzQ2)5d zC*jW(s}@}a#j+G&_e+zO=bKGlmf@s(2;hS^g9o5VnKcn1s8cWBLIAOahXiHREYtr- z7wx+d7Bqln{O7vVI2e#Miu_XYerYW74&nPU@}+Nr>%d02#FY>!+x#1km1N47Q_7c5uf5y2t53#x1;u&A z^xS(m_kQ996-H_f@r(zDx{_Zrbo?#uSO>A&BiSLnE@ZLX;IJ@UIVhX4h@n&z17>33 z^?k)J3fS+8Xk|oq#}#iv{4(MoTgIz&&q*&oarNZk;g*g=}18fYk5o3xum^dxu zE$J&UluLD^@jAGUb~VeN;Kc+$J|ashFi{o_{!`^$>5xakL@!rVcN% zKj|q=cbNKK%=izj>+dkD`-y$~YY3{%;23GXR+^J!22*iZKiXj48NG=%6dQ8^ADy0q z@Z27H5)TdW#^_D3s5H)ff$)DXQBP8E;}}5K((Shb=kd0l@Ol^BM`|=$wx*r)YpiKF z2b_bL+dtPWoEt>Vw|^nDT^icH6xzNL+TIb`-WA&36WZP%+CC84KBR1-uG^{n<9O7m zvW9=W+r}Po8{_rcY3v1pImHD{Kv+&jJbDG4!hU2V#`YK9dj`bpqHnMfQ47LP8-yRe zJ7a1uQS?~?zL&TlA{PHX9EzsaYyD|Kk4HLTzyWSj7^yJnkwY}>WV zG3nTrOV!L2AKToDU6C@AS#7~MpV^M*>XEV{JvdS1vpd0WeCu@M#_R1F;E!utZxef2 zZ<7%131cPqvfd`QJ}Rm{%IjxxZ|mnB+|R!;iTd?hxs1Yz4Hktq;kyNy8UE%z-a)*# zmv1te!6Cdn-G`;0piIo;S#lnKqir6a5zgaN+U9Xm_=DGBjl?uCq0e9JkH_YkWoPPe zg^z~iEKOmi4(Y*Z81kZ+l5gah`6f0_k55qE^L%(OW&c0JA$5r}8q(Y%&8=L;vpR7I zSO|)Ga0W1Uh(qF@Ar4{oh=|L8ufHQ4vX^j$Lyiw|2b>ee4@2WP6v2bKOP!+d=PlGH_fE&3 zPbmC(&i^(3R5Vx~$SuNP&(QU{`W6&j?DjYOK2Sb!% z1?RgU0+xCD`>(=*nhMjKFm?tXLfpz399_(&53LDluLcF;Qt5-Pq%&Zz_A9CbrN%`e zDs57wNiWux?+EasgL{Va1Y2QL71L_G-GxL6*Yq8(7V>i+q4K8UR0%SZUX%8BnYLzC z_EkL9cT(i}YpQS5w^2ONa|88zMS~5$C_1vfM_7q0ATP8{$|&954wKtKN8!p?y?T)9 zuf5qpzlENchY9~vRyj6V2EM|T3%)Mw60#i$*{CEF7R->2%K)9RYGPRVf<#j~6c%W+ z4`p};9+_${vs;!ah2v)^wGb~=k}OPhS+}opeXaZwF82l6oo7=?(@(ELPpk?=rjX@7 zywCFY(+0zK>qNW0RS(NNR+a+#d;g+WOfRz(E3*y0WZCzqvSYM!If*N({P{17Xy>Cd z!5s9*jrJMLTpbTFd8XrN@{{Fa5m|2V_6O=36ekMi<<^5@m%R`1TJo@5JRXuJxzA-c z!1W=5vCny!O%Kx+*y`6pd0gyfZet#OUSur8|2*&sUxa1ERK38Jd$4cFc?w-2&B)V2_K89J;_`8VF>KX#;MDVu~o`ZlR zI1XHRORyCGRU|c}?}Hw_9Ra&hb{ki@(7I^{PfKwOtD><1^hNY}|4 zG0kpviLQN#D`~$!5gXDw(7)Vt;!|gPqH#OWylxoW=1-v;65D@iK^-;_qGt!cBYc0C z3$2|S62VVh=;f!3PU@wHAks?oL2|PuiorEhgH-TKF;2nfTzcoh$@pJ}Eo%jLQ`Sy4 zo_8v^Nkr}&`vhA`6F!$!$mxcY3%&$OgfOp-=ln$%(yNLe(hBZCB(wRfsJ{O#s%J{n zb2-@YgdGDETqvr_>|mfuCS<#x#SmQ=wygdo0e5V*g5L=5qQ6Xxz5fba+~#$wTnz5S zc;^Vw7j=0|p}K@(+9F^_ZI;2dV&h|g zWrDhR&y~FiH|&_pVq=!&tc$^u;P{v2JcYTEqbl&12K3evUfM{=3^Nm@FvBmnB&95~ z%y6pUwi2#dYAHwVrY*y5Wki6?z?~?D8GN>Lq|4b@eJ_pGS7rXY5|rFi)Z9cRjQSah z`Wxz*9>n`I=JzrEo!RFn98R&L)}wBqB1l2{;FeO@?@xQAzCKwiI7$DzXl##F_M9FX zGA^k03ekCa>MSbv4s@Y|o-K%(1xqc*CUN=Wt)o$km`Y&vzk^I?S>=o~OJ+(*3Tgl- z;oTx(*a5prG>t#)(j&a(9)U_2fPM=fOTv(2F`%{nW~p)H^!|aucLo5bV(V;f4R8Q? zJv+9*Q7Fi43;wcxdbFuHnl^*CqJMg;J&xrRgHH=b@N2XYZ#eY^U+kktnTn1}_`TqX z8S4d~gtcUqyPcA3@C!~88`H#=v9qY>eric&n&M-$xA=%A`PD8EtHWA-ann`L7d3^+ZN&*5o>GM%UlDUff9zz63lC(@pg|Gh!;igvR%#^=K z^i#?rVJer69h+(AX{UTsgi%&(<>bR%d&D7hX+N*p#ob+8Bf5m7y12W$FzHXIxkfzb zu`b!PnlHU^T}dfM!)6m=2QvaIr%N%kmHT`73@_<{Q1}nQoQ(1qGK1a z{box^w2XFJ1cG6hRSEZ-zl-O;2;eT8qEUzb&6Bhs(BSTj$Ngh(6qh^yj#9Kf{uR*8 z$UaYjw|guojQ#2yL(}f+*iXrPGZr;cZ2b&@uCZw`%flA2vb3J2?I*RqWmDF)vbVL2 zi|3HwPrP9B`adj3y~G}|IqLt9fWm5*+rnnYB1W1l!=ueJZpf|;*uEz!Gg`1^rBBAH zc}klUlCb#Sb5-Bj!4sl*i`aFA3oaHaa(qqx4o6wzqC8qH6G(n8tU{#k$-XqeBjTeS!I*$$UjB;$6*rN7lsGLyD0!Q*E zUA?PUGAQBgp_=7LVhtA*!wh2oTAOQltu!)C6Atm0qE{uaiQhgjh!*_4q)-f=P(g-; zB$r=1z>XojiF_)C?8d@AEEW`6yqNYKrrml1J(gglJ5%PI5p*THep_lNpMF zaw7S>SXh?wtjSRnb^D7KPG4D{H2{UbpsaGX^`ynTW_+GKuIrFbc1hk_T^o@2B*Y(b z0^SMi7sDT*Kktg>tiPg<4lX>ipY%ff1X}yu;d~V99e|r&^-Bb&gv)3mcpOPAad2-# zG^`8p^&*dZL>}e2cuJx~$5n6An#|hXWKQ3)+1RmpQn4H1)e_cv36}Ev`-ruCrz55t zIAaVEoHCSdt`s{aMHZ@y2Q-4(KW$MYbafXF94S|pF zk^NCc=QW6b;9k%P(x$%xg*X2w0_SicUD|lWnZ_X*%R6nd1)G)GWtsj;Ob|=aGHq>a zDeKQ1(wmP;g1{rvL|rQbi@IoxrkB~4U6^0W;rwD8=g!(#iykwzuy0`AhcT5fBJiY1 zXf(qRA`o5s1eLOq3*^0s;f~KSLg7r=Zg0q#ESFE%D26z=+700c_a2awPmq*n+H}VU zO)2M>)kk|wmi`>Gl5(c0I=1h_M4pfKhRgSnUig_3#f@qZu97u?x25r5~KZSjo)D9H; z!u#>AOfqjmmnM=JVoObtc5F^eB+SI(u1ekWDX$q1sfJ*b zPkx_vlEL-ML7SKa={s!xLDfBb_EavEK9>`iQ>#_i#m9o-@bqwQlibSR<0JZ4p1Du+ z#m(Pfc)JU&=V1}!`bTVfzXFV~2R_A?m^C1;!`14F*>%{5p>~p?c>x5#pD{^H6Jp=H zO%|3xn&8SX#y_GMG3#@%UZOWqSj}vFPGjLAU8VIV4X%`CseR_Ds*O|vS86QJY1lO( zGcsx;qTNQU?g`laOAXB&K1X~79!kQ;RsFyfiT6O|J$e(VYB`-P)c#7mGb&$0`*zbL zp+;Xpbbs`Bun1(f+*EKMEmZ*4SY*8;^5SWc2Nqd)16F&0=$lCa{jLlu=O!}{xZkna zT4+fn&7w=t*xCTKP;a7bi}Ru()CEOuy*S0>6aKG3a86?P2ROtfTh_-(F(~T9*K<&_C%T;1+zLLQn(Xk*?%6Q zCBkSnJ0LSNn!IZ+vK;V-`}uj<;Hx+MPlt7JQm2Du@~+2r@7bdu ztL7@32tS0wZxrDouPcZKN~JoMe;W+3SIF7u=?6S|l{PH!k91Dov007L;^bZLij^{& z)*V{{Fm(rAy5n*NCIpdi>G>`3TZRvEDoreNQto+T3zhQDD+s)WiRWaTZ15b&Seep9 zUJrhWVzZ2no$RQo`#XitU0GQ)K(qFSyPki3&mOmst1fU-PL2k}n<&bulU1OLzISro zWFhC|Q2zMNyRLaY%4T$qgpnefPEynk@q(|T#0%q5T^Y3lfk}*a0bS zVW!&KmcZhfC^lYl)+-S-@1m?;F4`^>nB0mQ%8n z2yQ_d8i>kiVZ?62na>hl-N|eDfPCYbaFU8Qq?e3h(f^f*vddVoOPiid-esq?tg9KI zr;q8Lk>Dhi0m%#9mS+_<W!Te5SS-v4y%B#6>o!hQIFa>2BT>#wGR{eqb4~&;bven!o=WZ{ zCxv^8WDcEVF2(z6aG*XUb(CPK85R4CL^!#_9a=sCwYg<4CPfh~L1}5fobD_lq-`=X z;fmf5B|9Kl<#@lIGg2;dtjm&99&xLisXk&>w^9SX0huweL6`jNwksNHhuU?~2`Lvd zbHXJqlhb<7IH9~~qj6%TV;|2q@M&7wXd{=kh+#Nqg{yy}Wy8_`}YDmWgVJXOKo8EX5OMB zz+?*+%SbeCVDX)-y-CKwVw>YdHnq@7 zDQ)BkGu@OG+~D%M=#J0R%RMsDPXHR?Fy=pi63){t{~iEN^<6wc{ofNRV$Wq~(8Hn? zIalXt&5JdIaiy*;5k8Md-DA|NHuq}P)r-_5y_rE{ExoamyO1gt{LEzzB^oedkzZky zHVmKmh^FzTLf$VQ65eS8bRr^1c!5qN5WU$gLKiI9_XRqiwH&RyNZlVNNV(CYy2_vP z;TOq>aUsjEp)4_jAEGO)T2-ts8G<#Ai!*Qw7TXMd0Kz#z3V}qW2(8q})_=q$p#s=B zwLvqX!f)rjR4hJ!)S-)RSwUFEOf9D-{Xrb)ta5fTn@`#Y864oTe@<8j*@~gHCR3~L z(a2g$VsLe z-v>C^ZPCPL2G{D2Ey7Xx?4+nt@FPIM3OW4aY);P?1gKs-fZdVOOXm~zWDi~gnd(XA zljZEH2gF7LYHcVd{|_z^Uq)(1ubjpa5Bn%cEZ22JU-6otyLx5bzgTV2oJ16oILBfR?wZMxPVc_O%+ zA}hmwB*?+;n6wAUT><`I6}91dY`(Ko;%vMyy0hS`yv-RmYuQu0@y_Xno$?ugTO0pp%O70d@R_>PN zif^Hd^!GhZ{6#V54_7jOVB~2+jV9bo$Uk=946Gks#ftdH=8h@8lP;3RAiOXWLks2q zKkf@Lw5WUs{Rkg`PSn6y&)GwNns$OQh8NcL<}A_1Mf2G-#1NF%o;EH*^kzYLc&C}0 z%LkpX@q`*lZqa^Zhsf*AdPiP8^<%}pt-duRUa6c%+Hzj_TD?8v6I*bpdQ1t-Ac{}x z-f84tog<@L6q)?O3^=L4IY?Pqr}v&lHr?g4l{KLcOAf6OOJb2yFe{2!X5l0TxuT`y zWRn`iTK*(?Q(9~H$(!ObZ_2MFZ%Sz>#+%XtZM1JF#+w31j5mcZ2iW(GMBgHNCvOV) zOP<1FxNB7*0rrvvvzI(chbhTk0>`#OGIEsHJIOZol2nCxOWvhrKB#z0g#Gi1w?x># zs(4G@rLDbA>*Ou@t1Ed+t`bZ66GVIM3-3bME_qA%0yk^Z4D@h;Yx4!}^KBQnBF|@l zbyMy98-41oqL5BFY2qt^NxUf~CnYb$@1VHo@L+2nU02LX@hyG^xA+;pQI;{zMt6@8 zF`vIw#;v6&##xB5fNu6h@B(>zfyl)1P+hE2A}F|>E(6F)_x{j?Mwk6rT=p}MODB`W zJW7slZGkNGEx1G%N5xt%@w@yDIpnRf>*VEqIFnHrkAw;6>JKbI#x;kX5faC_~#l2R!n|KTgJz^NavhiF9$CC8{ z*6G{{R>YlPNv@*#7`!>Mq_+V)9FeCJ{M{u^lKzm9gfjoqJ~EH-RVbzh$~4AUaGTK_ zkeA8>vFqjmYIna3>5pAE_YcXv-3|E|(ZZ(W0CCqr)QB zp+swcx*jC#+=h1M8HpHX_g{mXdq2bkiQt}+f{jGb?9-Iqa**Ek!fT)#CZQvGBM-XX z{z7mauU~X4igso!lXU84`P$1S)w(&0G2NUP8cvat-DE1pot3EOESfFMzLnsXyTQZo zx_Oak(VtBKiqS-)cKVZ0!C{ejNy-jB3S5*FQ|6LB0?i5Tu3fop1+zTin7pAN`Wew0 ztJ*uR(7JdpA?#ObS*CRv+PB1x;>oB#(kAgph@HX8wu{*EFyHWrrh-SJoiT#_7MR4| zkV}=ulPT|nTBI!`RXW!6eGCw$r%7xJKnXZQD9#0_AKed8Fy#!Bc^Asz9$=YkI3tz@bqfOWpyVO5 zlGr$St-0Z>i_LUsyP7Kl9djQn45biXNEQZURGTfEdztWBpd!I1II}OjBb|O{KSHzc zz880AU!urZ-YXj!+}!b;g1guDlMqZKrqgTj#Z|AO{e+I|)!c!efv1S30e>d_feMt~ zwLHUq7VnI)VYRlgm)H)&xh>n~EU&jC!KN;saYmt__Qk@!pO)u+v9K@EJis;NA;j5Q z`)j-o!Hu9YFHf_F8CAgSs6eKp0#-PgRQWwUQTaXdqw;&kxqQ_jH@PI>fc=pjh{cE@AdS(mA?1W_s{g*vo@|3wBYSkE9i#ddr;z{ENd1~wXEpg z)WDK9^&%H4ML=^r66nhvjK=^Ejwww#TT)xeT*@ZvMS|ir()PrOLxj>OMLZ~*LK-j^ zQ|4k`dvJ%|CNMG#6E{Xr{c{MsHLOFj+_SK!{(E@l4vAIltrlGuZ?ovSxT$Dr3GKx2 z4gpaTQjHbj?bu9;(v%~?v%iuW~w6`LGoi<+@{XWqzX!ghcKJ*8_j6E*t%IN-7`p_ zi0d;N)BXo{lr3&x2n2=6Q4G5OV}R1QKk!EI-$gsh)owT(xfDzTYYP98M^_ zggJCFkOFK{iKkeumW#ZGp=nHj$^w1+^&(K%Djd)!tYTi!9!J+JI!V<`n5-6`-!_r` z5Wf3P>5Ks1F#(N6umX}+KE6|FnU!t2EQv2nf>F+6(La+%5_wPtc-M5yGq&!>g2=`e zSbSXD)8shXfRx`Yv|qV}Tjz!yLwnsF3h(uerFH6yv4g5-8zkZ0xe`=M)I}A35+L3Y zx>4U>pgeya3O0tH7m-=*caO{hSyhYFg_SlAVI*A~CRIVAiaVqE0($3vP~Q-*9)0zp zjmC*-!o=o@ zNAyMVks-fS+i`*4{ASX(UtL|A*mXY{*0FHZVZq2=L|3z=YS+n)#y;fXSLFWM3DhiZ!4?FCI z6W<+6d|#CKff(*p?}T$Fa=HnzoZS<-2D$4vp9!(r-XFTgq9Tjjt|GUKa3k*2o*^Dq z=AudaXAqE}Cq~PL=U0XAX~Wu{J$ueLfe^}RV`JfImD#M)+^03yWJ?G0vccS6dJ_Xs zcKyJUba}ii@T@3%KyLzU{5k#V$$7~}ma#hOW6oHg72yF~vVA4E9$>&q&?r|uCoyB) zBxhRIZmXScagFTY^$@Vtn*eT$`73(FWbv3^1oBw_5cN+cXbp$RJn~2fzgbSq9~co! z>WzCqvV1T^s&eFjVm<|#6853&7%Qcstw<_(2d0?+rZ5YDd3lJku=x>Z;zm(25=zgd zBTi$_(H;x{KH60=%Im2+^9h;9ddg!ahL(Gxils{|y-f+YZ6*hSq3nKYWW?4|U2BqK zEz#|wnuE}>V{=|kMp?2-?%+u%(cJsPCO#fjPq+s<`DCa?l1m0$F@1_DW+38;0S@9Z zTN}EmLd3!XoWd+D4@tbBOhQZ>*{ve(3?piM?>RS|lLWehy5yN=?}tQFW~{heZ#KP4OV zCuu$*%|A=?FVcKcnkxQZrTMfp|0d19OY<3Ng6veeOz)*TMPWR_#$VWYl8tA>MIxpq z`W;@RF!>AdbL4KuyL)5_yQN9)3tYBv>P-EsheQgK;lBkhEGV9Xkl%^&Q0kLmcPB<- z@%@?@s1Zz}hz`%^q4+wSApV+|PGwhMT-x%>q>{wvSM&}w%iDqMw&^a^ETcS9v;5~n zaN<5xwL2zjFnVZA)4iGTZ=6{N`3oGc6hA;oJMiBkz2uvT#DRY5RF)h+FUg8amC5^= z{@a0Pr`1*=G^t71q>~iaW&C=(@lN#Z8HQiMd8&gi`*h!hz9qtG%*FEujkeLmc% zblC)AI*cTX*(Yq)OJv9nSEeq_E@>iOBdd!|6yGe_k5&9GV2z1--p?eSKEwL+mh9`$&{Wca!CCFX>wSt44HN-iv}E{ zH<1#$GGIz|zrWR+R78_Xpb))DIX5ZGCgs(noSMj|alYJyC1vlJ(#%TJlBO-qlr)hM za2B!}B>@oFBrO*7?oNHFFYpEQR^p`@OA(C#I=)8X!% zCF|r!licd8iZ=s|t>e)4hEwX6abiNF%L|>p6WwNT3Aym4gXcO9Dfet-&l3ewCm)G| z$WxN+6uo7?kY=SQSB+13Qgh>j%RAMh@H`{d2t(k3P#i;O;odSdD}7eI~~W^0Xu$-4J}6w%7g4t;X(Fjk?2BtYtg?NH&TO0`K<0= z)C-dHb-3tTs5jwT^TeKMfNB6|@Fhf_O>TSzR&PWyjk>mS#`A42Q&!??QL8;TA%E8+ zO@7~NJ1DpJ+bJ{j+g0)Sn?ikkgJHEASH$s7v{?9nPSSr}E>5KMvftVtE!WG7*s?)y zA`0u;{-nS%qz?}it1Z6+^ILMZQsq)XS;5aez9^zZ$QA@UE`&5`uaT~p?(76h&t4rJ6*_RcT7MVvaNT2>{Q(#Z&Vqscpgo zc*b7eRLGmH14S-*(;Kt$W@#)}_4?ELP-|RxR*U5<-Vq~v{27KtyuP*;3$v6@Y$%x< zCNqY`FEM0C?0kY0=jViFGIACY(ruga^@XIcWh19aPAkUX#Lq75Cs6SO_rL)#9J95A z%w%h+4F-{dl`7cP5fMJYi2DE;yhKJvv{b>uBMo9`&>krloN`iPd=Sk&Z`00;oRp_G z5!r)FZz4O-v4--=4Nj_Y8+5ClK7`Rl0j^_r22>6aQwhB?#idL^Z=t0fBgVj>wPOi^ zNW2OHW-$QZV-`c;*rl=ks~csNOjo5~!DTaaLaTrEPy=kcLsR_TK_OKgG@X=u@qlAG zDZG0iS~ZE5s?_6mRAaImnS3(KEwzI!Lv*@F?NXuSG&yU1C`-1=0Z_vx50L^IF!JPy*q>~KJ6n^wF4||i}o7rzywvaBbchY>@ z3g(6#nTW%-`h(q66lJf949dhKso&=9}SFiccW=ZG{6OQT^BlPuO3 zv5t6w0a-f3fGnM1KxDPVxX2>13~zFHVh>M?9#8G7#~Dha9zS5_9zS5F9xv{r$GN|s z)mAR)3i(A|`0WW`jlI1+A!@%yBDI5Tc?XcxZV+Rb2yvG{Jj-kno)z9KTD_bW3S5Bd zP1xxcR4mDV!y3B+kqv&$0Q^s_m4vR$4SD&1gMbV&#n>b6Xpfl)-Xc7b^qri9jufD@ zjGHy`3Cou08V{5hw{dC_Ci+z7MPWd6GV81eQ7_R5Tik7un~Saua>+cjRx;+Ws|Q%N z&B5x?8s!wZ*~xfF=*-&YG&H&d#6R@1o@yP$cybkE)ztt1)3ND=6#f#(Me31#}-n$jGilzrmA~9Qc{v|(qd&S;8~tY zCoze)$7I9AbmZB`gDjARB|{FD3B{^3HZ0^^hli{au(4S7m6+Lg6EKO>OOfAPM z;5i<6=abSupPWPq)U;9V61iIl9soh;?!WR+klSw$j<%oY$d;vw&ZSR|EvY+~_4 zj$O!C`?+EwQXaqHt=N1y0=f%%;bV>8BS$bS*fD{XsNim=n+xua3ht(Y9l(mMo!13c zMvUp|*q9y^j;X2O!?dkQK!)W_l3s!s43VT#g#W{#uZf|b%879or;lE>Hc-H7dcjD{ zM8~qG981nFE?0J(HAO9OY~t8*cX!poH;!bXip{=C){jxzG+X1G7^T91b8LSvrgK1;!e@7q&fZv zTR>P%ce7l4dnLVZZzmDE5b=k37bO%&0h*R>Ol2neW zMZBaB;sV@Y`IE0k1kC1In_dUL=FmvFatnSs38S<=LWc=_S!1d|D(?@ySX1i3p_@fg z^d@{d)TMGkGU!3NRd`?IF$sE$PJ$^0=}S$UHQ!`?slz7eOU+m{*J6cmdEIP%7>TXc z1uz1uM3SkWAV(f;zD)OXeMDbB#HP!%L)kctjlldS^ z)*5uiY@)1EB)6(3g8filxm(tvN_3`ajyH0i5+~-2$l2{;^Lx@g(+`RW zZWkx*2@&U(u9@RNx(FsTp?qD$S!O0dR!6yMvoz%`X~-&1Sb8xq&|eASCT@My2FDk% z6gOdq%pgoDVc-e{Ju+#ZQsIhIJs{Z&f<|G`631H6g0RnBZHt1Rrc~wyzy`F zq^yk`+NX)aFF?QwMyXFz6uT&pA12OdPUc4(?uV=KUq=u^SA?UbSPY#-Xe!_+lm0fT zDb;Oail-30oR;HeBcz;>t}ZYk6Sj8P!5NSUjja7?drZPt-!OBg=k~G@Qg)@u1S?v~E))))DiFJY%oLaO)y?{l79Xl|oso80W zBQ}8~3aLa;(6{8Ee+mTPlOV-tJoK^52ix=RpDHamO~TAr9As%MQk72WA)ggY#3w&4Pu9{R z1&wcdANRL}by8z|XoTpfWhBd|)?{!W|Bl`rCFPKYEDWioc1V`U%{E-(QCNb&+TeBM&A zq%ujy?}*2^t`rx<;Ka4fY{ryHn$;yvOp^l6HBy%9S`L*+DJjzR4%k_rB(z`lbgGi%lunvNz2qR-sq(^LyiW>vv1ck0 z@Y3bLWKwa3lApGtkZh_=pCoXEjcZc$M2fUY##aG3=BW z?(X86wX0PYIPHX*tH*;#Su&h8UwX&XD(i8tFeZE2q*j^RX_H!ITUHzbfwmf28vj8x z{yjYYyf8@3$};9$z1J_5=w4pFvhx^}^}LJ<#5ee@jyoUremQx+oR*;b;9pr`u-j|= zVL4sIa4MIbxI7`A+@w!WT#fT(icgPVecqrAN&F>h-bOX(0+4notykEQ&c?5Tw~1hN zJ+G=V9X$*LEk3VGN?H-eF#WX{o6 zu!o}J>j~NT2Zs%6^b88`SKCB@J+l{O>&>I6@Q+Yw!$c+pXU!Kptg9)KTnw%+#-$c3 z_ZgxmUWu{&yr}X>lAE1W&Hj0jJfCLIrz6k!aLx_)6$afK65oV4!Uqul>zg_puejlq zI3llAN8~kYr&*mR_IGGPbwoZAMvjtv9E=>9`hgSS(LUKi4}l#8JyNNQMfAS-#4_ta=#+Uy%knFC|E8sMj<0gvGA zcn9fJ*@_3~^58FY;p=o&MEF5kyP4&kSITmLK3%-{)hx0|UB znAUk9ME5Pt+2ys-I!_Wh=8nzdcUSII_vp1AeaB{RJT1PownYl;bicQsxgCoAEY>w^8Yd${ z9fbZxC$*I`NlaFUw!aqLx_yei$I|yW`ksJqF}B_T=G}C)M>o&+S7Jvjpq({633z$L zr8W)e5?>92in981u$EUWI#Dl=E;>ZVo0PyQ~+CqSIj$>*I{ ziTXZ9RsSZc{z0;WRxA>|gra;5j>Bh*?{%@?&*kr5b$9-*>-e$C{8Dex|NOeg8GONTt0#$@Rj1r@0V|EB!|J%Wi%c~F@|siiDAhuwgz)Qc%q=0w6+AZ z@H(!480Pe!;fdGTD?geZQ7p=bBhrlVfo#BD%*aNIWHTAx5O$+)+H5>CAbANfCwquK za7c;i|3{Q)DR_xe3cggQ21yR*O|tW-aM^2QZ+pAGOZzX`*V}syEpZOeTRnAH*O})W zBW&C8@fV3i=KvSfZ#Y5(Od?=13;=ql|MDmiumJ%Z!T?~5`p#oS!0Qn3x-bApq<-s0 z5pX;Ljt>I}ui)-;wT4R!(HDm233Pp`S}Gd*;oj*ewBH!bnaOfbxk#I&YQ{{uNx5S( zgI^S*JDtT*UT#vQ&71i|lsG3`ZeDG;%mi)S@R+OXB`5{iU1?8q9id-)7RIBv+u$k^ zJJMLFaJpzn_R)VU#l3BVsC(6}Qd;b$`3=ab)p+N8P(CwaSl5@J;PA~r+DTlN1+M_~ zTvz0g`#N?aVrBiV03@)Ruj2>!8o$HmZ5a4;3GrTusvfPE({dTw5H3T)Gb25Z?O2<7 z)w)wo#}=K}@xr8a#>vFu9LI4s>NVi}7{9&lyZywKT1)9J9}Hmu2X~Jq*D6iDk5a%m zjb`e1)WdtGP-6#)cUz_Lq!m}YVJWQ}QU%0Dx!k!O6d=)R|CAE%x3-^%O@KFbA;~GN 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

!Fzem#j~EgS41@cjjfVb^wXy4 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

}4ni;rtP_+z=4Xr8Iff1MwBoeFTFxLQ%`%i}iF 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%0DNHS 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�m)&+p1*(<9Ww& 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�i&ozxHbMGs3~Vs)e1(b+Io$qd13mw0ao{h-6jCDoyr>>j>)N>{lhZhu@fs;91C$Q=e2Dj?X!uvS1YM|D?+tJs9 z|39(+2AwV+)){}MJNNh!;87 zRnuNyCtRf#9iUWy@(tpGW^BguFle)5Cq(DJva#Tm(X%th9#!3feZJm=&~ure>e<(8 z38GWI0F&lvUbt^Rm;hKyO)A<9J`>U(XHbMy{^8)f5Pdv0f5URao>$8QB-%5@g{!#| zLmfvEZ}JZj<2lM}XGH04)_skXi`$b2YgL*+B98h|>)S@$XtS%HgGuvObhXVSb$xuy zuSNYk)bHH3SVKnQ$gSd;kJm}v8o&JG0rCEcM~_??p}1p-_?tlGOERHv2UmP^OgHAX zjdNhmOYgEINEJ6C)iCGM#qR}v-1M7`bYKD&$%0Y+Y|ON~=q@~^~2(t#BD)!#w9FMRku+xqa(x{J^8>e}41w^=^rqkgpi=?BHtcP_X9UmU#tD?}|VRsX+VidmVcve%_WSFhhzgetvX z5(@E(=^Rkr&z|ipFeAaAHY)ga_=~lrsx@=>(O%0D>`u1+QT>f$ffofTdaWVp+)o4w z!9l#(yM84h%rKJGKPq-6D|+>B{Vaj(8bXj(5ZVJmBNDPc0eBK9fi$#z@NsPd)%t1g zj-CQ&uhEXF3?8 zH1@KFllV-1<^N5}e?7?E=c>D~jm4L?0&M{pfUy=h4CbA;pPFY(a7@eilHZwKp zr2%K7RtbIu11da_Wf~JZNq}F)v&lJ_)AYRT>)Au3DC04jPmGyBq#K1zBV0?s*1jR^Q5CK z)kCDx4C;P&m1FJ`9yCP?H${vl90e!<8`Iy|iy){!%KPH{q8o0)bp{&q(yAd_BF^OC z8?bO~`{a7g>IYJONG2NwQpDT)u1-4wkF%m>;K^eBCku}cu%AyZJK!_?UxS{c^O^ry z%qBzL$*?1}ytP8rL*fJr+q(x}wPSwz@IuTQNFBB2XMnQMba zrLGzx9ESVUiX*sWaC*a|JutXBPREL}$x3t|VA(VxN+c=9rmo8Cp(-S=y(`|bx(Y~x zc-YiI+fQVO)GNXzBp|vw9pg+u+jJw;q?@L$yfX(V_l*IAvk=H)JGjIY5@Bu*PUWqx z`$sx%ttgJBD-uSWtt4mv^Y>Ms6%9J~#EQQ5Y_3CegEv?Rfpilh_l&21^>22H@7?f?{RF zzj0y>3sYUo=zQDEE`;ST`{n)A%mZI;QtbtX_ z-%f#nL+L}253?_t1rRLgpXr{tigR>MjqnM6>EcAK_Hh&7cE&17B}34aXW@g5BUVYG z*q&~_IBZeV3*#eK5Mv&B_qVkOAk;Fonslz}xw8|ijr1Z#of)8+t)@&lJ>2>L*`}{3 z!dO>u-KX9wSe0msXrrqsdo|c|J^4{{e<5yWf;dR8!C-03aJO?eSXK4I1Mhy1RVG2C zvYlwky^g?NiAog@cHa^XKJy-ic;87IhP}#2J*J1H!UKc_CHg1k6-sYCDW;u_Bfm&p z9#n!J19;cDFN)#*?A!U`ydof69z5dv%b73!gQvE$h5mYXJOX@BI)e<@Q4xI5Smy^> z9EgIHpijMMsN1%6%q78|@eF!XBNB7wA|Z0bK}{GHrJEJi&B{nZu{y0J`aPH5pGf?+ zRpEz_=V{%`ukz5V18NmCx0bdq8mcY?eikLXn=%ya=e_T*FLIx;Zg9cu9{i4&xYqh& zXkusl7JvpBrz%vuCy(3{Ri}!ry7t%*Pyc($SAx7UxhXk9=8z=)r7$wRMYSQ~oTOZ1 z@s4@jesA_a3+iXEc2=uy(W&blUj}dJ#}ik*bO?^~44!SEJ9tHCgh%jAvGg9dn{)1W zBNy*_ojIuPXQ*AwE|!9AP1Ww{Ubx9E*s~EntX#5e6N<@cVs}WcOf^Lgu#O&y#iv)L z8O8MMRF*$Y%MT*q)+>Y$&|m&aQ?O!WBKbs>%R|szOhe-FsOL@DWXvko#xEL^y`$TD z%l%sfuXbl7x9UY}z~QkKv@r>i6Ma(U&Zk$*ov~q+t!3NHH}jbO8f@@lt&(xhtNM!B}_e~tSz|FNFz8t3zy+~X?AgAf0h1iS*_9%m#X$8H7UPx z$J4E_(*AI7MOeqP8y5QL^D8b@!O2NV-$wFE0{xP^NYSYxZ22BF(z_J2(j4>H*fO9V zg1f4Hk@G-zFwKbH{amZPtL=q4zxx-h$HvZ$*Eg=SxuW9X(l(3EOi-6q3MN3b1J%H2 z)%Xl19F6`_{(g~-YL3lq%VQ01`6u3HAK<>*J&H;{>}e^Hb1H_bXUUZG932XUDnq?O zIZ}f3cSGJx)nD99;sl}RlM9ki>8{{wgHrT`h%&%Bd?ex1_m5@+1m)Dy)5qt;Sjomg zraRq*KGdcspyvU>rt=`W=$5aOtvY|a%i7uufV}YwOgJ|;Gp%sLS2BBz0%qjavQvMG z@))zNwr)W0xFWgX*0y~KXJR{}QIjS?l64+(JI|xS%B*y&`hK~4@S@MJFI!M`YEfF? zKT}0&)I9pkf9<_uuEa%A6iUgji}Ez&*XZByT);AgtBc$0`l6~IP(p-AJY^p`CjY*2 z|1hc$cQo-ZUl{F4Zz;rhIIIf__#ssg;%ENt@ejjS68nKQ{>JUPdXXbhS9cUwip@wn ze6GT2d}qGwPiYOWqXD&6M19z2U+?_c#79Fk#ZN)H=Ned1MlelIIW}d&(}r@}ga35R z{g_&lzBKhk$M|g^b}}3_DeQ`eSXBxGUM0nBYaHJGh}}datF4%LwR8-1Y_&5>c zeDy>LeBSl7OP{`^l?o*8WtTE3{c_l$=+N~f%fDf3R4Ti0iX7?!&bHgC@DF};3YP~* zPJfLMlWy255uz24K&!cz9I3#^W5TE6);I6MdOP=LjJ?7OlGE91i^OkX&&zj5CjjLH zNE`Un^pnC0dgXkmxX%3K}cTrl}NzG{8o*(YD#5wR}Rh!)9kiQ5I{ub>`JHv z-mD;yr;hMzQ)u>$0vi|XRZf9_g!RJjqU#`WA9f`e!Q$FSl8s#uoEvAUI4f0lWL%{y zg{Dg`)7B8JjQXAd7*5pFMW%LFJn<;b*}EgShmwJhj3y|9lHj!PrR-qzs9e$Huh$Cr zqR9ew-vXWTb%`YvowAi|ln|ZM`zdSokR1nl%fISITciN&X?twFlsQiTwX0)Q+ZOXE z6ouSn9_>>&>C#u=TAo5>`R*)FEnM@XJ7!4X^l{^Yvt7L5=kCX{$KX+D6=wjz6=dGA ziuN7vZj?z>F#Gi4h~@0xAxqhG$BS)ABQGIF@P*++SDIKZjk-Jlv<>jLbj#MFl+AdKBG5nq9QlI_mnW91>yTLmgXHa5QNn|BRl!0_*cjMFK9Y zyb^J)xo*oG88bQ?X;8L~em(gTmEO9RDu{Xx&{^-+-lDJQpHO&hkweyWyPU#%Y0+}& z)W~JVoJM!K$?E-d$E)?&68Bih?U-SB9c{C)sRK3PEHQ4M%Ob>&c32;rp;(K79cunhcf8bzW9o&fwvKY)D;6uTP z``UMf%G{|1dO$w&rc2`=FYcM!Q*B8>%GOhVzBkZ|riD(T*Rk&085m}V_%0rtoa`%% zyW}EEw5P?y;_vB!@ID^*YGs8Z<*BEniZ`)=<@`am#S_ zS{Fa^i|9W%B1AVMiMHVErquabVH1WAHT%D289qn_`R-6oZ3Z0}_&u~mvY#FD2ha+_ zy{5}_ra+{vl)SuVJ~Xi^{cnoZ+K09Yd}zhe&QGsr_LkkZoNVy@QwdHxc;ChVu$_bP zhwW5Ec8^%z2CF{%C7c#Q?}DUN5{PR+SI!F45tb1ITs4! zqV8+|XTgO+b*1~S@IB+(-;SEC_SBM(+uGKz8JF{%PY0>h;df2b@c*bo{O=o!6V=a{ zMKfBpU&vA=u;71jU#NQm1ot@N!#qPRK4tPv`~s3UVf&+!J@93;idnOI@%AC?G;rAe z1Roz95M0e0p0G|>uQ;ZBVZE#g-Tp-dSA)RVghx48Gl_99}sZ zHhhvkr~_jb>})0?DjBxs`XA#dr>-c!pT8Bl(wbTDpqyn7p8O!}DXR`U>#&~$8~YYU zn5>p9Ahm0+w3EUHj|}$s^{hUXwFI?W;janzU?5pQ}T4gEkm z4iP3bZba@^?=Lbh=T|MBdk;`HmO#A*E4rHo*L7*2$*!zPY=_ z86n*ssCFjv$Fz~%&N#M*OxW*SJH~J2e$kyOKGYA60f|*~1b1W4NVa<$NPQFmw~AZL zjewwNa)f$kFK_0gQ2VOr{kboh8723!47&RL&fL~#E#g>E0yueVmoUGkiTDB;ql%&Aw{fvXK%`_GchzWH^o$A+Di zzc;r4uDs^vpZ{~FaH=ywZ z=cuOo!amP^s4)EZ*-;q(zkR^2ewNJU zI$#dP!=6i4HAA)#6rF!A(T(Mu<~hs*wlBLI-R<3++eEEe%+F|RJ_-{O4ALQXB#5_O ztTM{>!_#WCPJ+izVl&s()fRP=WTyu&b&3?E6OvyDS=|*JMW_g3>^D8zpH^gHD(w+A z{lBcPTjU%zof1U78XIU-yZ_k@tqd$Rw8?)1$?EAOjN-UzPbk8YC(TWkLgCSNbFveG z(tw~nuTnw9*coH#-8!w{MwyxR#rq%LTe(^CXda~rbx|hR1GA$VCXtGaoHziJMv6&mayiF6l%CYuEjWc%FEBiMkw^q2bZyl%nG-#EC zK^dXS4b~q#z3Jis%x@f^2W&IeQErqv8;v;Yy)a-91Inf}+(Fw}y?|7ZY+{KLvdJAa zrwX#k4TY!T|1ndE?mvpsjfO>v-K9(J=$e+KYxa&gA+bt_Y~28S@Pfq<0ad$(F&B6A zl<%SYzPTry%F>;NyvY<7`;Vgk@pk&{3l$q$!`I=w)s4pbs(B1k7tBc4SUFX(5r2V4 z-h@a2L~#>HEag4muQXi$Hq07W)bQ*1f-CqtYI^JXrAgt~;QilX``F7xDKCk`>z&qY za|&ckVfS9f0iC<9Mf~Gke$XD0sj}mpfOAK})Qhl3YfPcdGDcjz37=l{Ah-a!vYDMe zY-K-Ae{=UC@Zk#aEHWahqrb_q2FQ8kJsM?`qp~u^^e=@+pQtyxaaIZMMV&kon-Vd{ ze1hc@Y`Qtsw*CWNEiYotr5kPmf+KK^QwG>tt-g|#kWzC+veS^v+nFSx95pXpKbs6s zb1KHxAnO~a0l|f*Bn++|zNCO#PRUIYWP3HO^CHpct^6`uW~%Zr_$K?K`ru5R?+lXChcw{2o`^L7%`Z$~_H(gVv+Z@=JnNmQbGM_rM#o+ZokB6ra z?y@4k?D}!XZ{&Ytn>UN+K1k=i$rLqABbJR3<9agl>jc(?5R~>;9c|4tmzU0;aty2e z6lGr7&`N4a;gqyCq&a|B{zY@}Q2;w(?)=XG$9cC5*S4&P=x85O%)@*khN~f}NH}|0TDM_NdQ$58RL6K#N9u8Wri3z9t4?R0T+L^C zsczYQ?)}J6vZ%xBCIg`IyD4+8A_$JHUvBqFAoon*u1dW&>`ue{yC1mGdL${1ceh;Y zugHkqt}1A6)S<>)nzC7YI={o}0ey~Z-5?rMXKbAvv!=*qZF)6HPrITrJ71&91e3vW zkB2FW0B+925Z(3Rsd7rfS*% z*|Y?SBjDaPj#-Ux9`lsZ zXxp;@u>js3Je`;lLv?rV{EAA;PapT|sPiJpdcH|TCh*MQZ*|~xGS5K4Qn^1NR4A|N z2flk7z4IikQ9i_Ns#SS5G)G>dx;xaWx?P2<@Q5Y5F2wRBnXc()(2p7Sm0m)~hbjE) zqoaqfhp!3Se#5@L{_)h`ZjWD4>q6)C=xgcIM;CeQt~>T4Sq#?{1M-c|N@M-h@;+u+ zVZ#(0YZ`76p7q%w)YrNJp(Q6H@zSSOT-n!`Hp+GLU#jhR82Vi$7yEjgG|EZv70lUr z=pX$i{Aq0B=i?Kxq-C_uqDZC0af#_is01z|NJ#k|*E>pA`a!EPw=?-%PhzGO)OnTp z8czuaFv15zR+%*EN@J^b2rhey-Rl(u$1S+Y)%9_8Z0Pnc6LL*fJ5@NaB&v8^`1WVt zk}(Um&nCrF6RbUIWm8ADdz!|#zEJqGZXOF!_!9pf^HQ{)=so#S)=%5RAkYy}2OM>W zs@{!a@k`3o^C>S6Bl+OH~HC!f2y&;6nw z+!!dg7eif$HebD$9DU5Is?W3#6LJ!!U8^2)vZY;%Cmc^}w_r1$h;~Kj19_rYza5c3 z-6lb1Lp&?d;*{5tLh;P4o+g@2Otb>m%M+vM+3v6B#}Mxh%EuD#yVzjrz-VN}``N;$ z$kX=%uO;h+sV3hwZQwz!TtUf8J^4inzSyiuVYbyN z{XOrj$;h$?NWF8GtC*7_ZA4PW4%GOM-Zor{^JS=uoz*`K)0s_294>Fb^MHnDdx z3(DacC*B5q;iqrwc+I$7JL?J_aeuFPZ!ezg^>Qm9rWX6K!;-Pd%aat7R0t@@@gq`6Q%tsrr5KRH|_BCz6C6&MYSvnqA^1eJWcxz_| z4ANK&?I?x7Y}7YQMSMFyX^#5kZuxT%-i(N2>zCF+AybQDBig+~_0I{Ox;Y z5%PVt=H~6#Is5%#Sa+97@>(WR0vch=A2aA+Ep}qK8f=elvD#7|8k-Hm{?ViBV)QG( z9PO&W{ejq%*Ql^LN(=61X5XP*LpX0VfC}t&;<N( zv}G&0q_$hkfK9mA77q8*whKV;bE$96X$JR!uN4wX>e#&ZL1UFv0_?cwQ3O;QYQH)T0F%Jr_gCvq{zUyLzSpwC! z;etjLq?_16tbtd!_ckV?^{y`QWGEdrGwVM@Jc-Zvcye_fbx%dT5n>z}?#*UnLUxRJ zmxl@y(y{(zvau7D_ zaE{%4b?y$;+xH(Rtxy<$b#5f&f1GNuMbRX*B@Fl&ed`&H0(wpg*g|`l`9=tBjZ_}+ zq5_=+*7qOg{23Lu+{675&3bj-=B_e+{~yRH7t*Iyse9h&-jY?eQAh!1!^x-?87#L= zrF2rNYDqkJwSNGvNh<^($w7##A~SidluTb%>0^a#k7~b{XnS%nyXVNHJhc-59ZbAG zVK8c;9)k@zU-gl}PfQR(MEx?AjU_}F{fxl&3~abCT%RTp%ZERrMoPV$`HigYd{p!9 z;kL7?ook#;>5Ro6H>=XfnkSK&o5VK-vW}|bx4+dJ@QI-HW&}4a!oi>kkKmHbenCWQ zgvA%tzqwcVf1nyR6%S&my<{u?)0b%t^a3k;ew|lkz$vL_B(1ldAnBvg*U8?F zVo0@C<x_T|&GJ<{Wu4hiQFINYX;WUrH-ax|cD`Djs=KLa8&5HUAWJ}*?C=OYy*?;$7(Db$1&rkO1eNLPt2U?ZH^H$E;^9W)Ho%fIDPIWUYP3|O$ zZ{sI>uDGXJ-0NTth2O}Xk~bhLu0wv;WWeC1<%ZP$?` z$@S%P2o&eDZlVg}Ah1DKA!Snv(9ZhyamjcChn4wzZS1Pmc$Z>`X^qS*KXs#TasNq_ zk_z5+oRRqsdh9JB*3J~TVz6JVW&!jC`s+n%zB=A$PAelxqG2yp#%()D z1mSZs4PW=S^Y0#r4QytBqld#ggh9%4`_hXu{nPy)f6kmu{zvu6b6(dYZJLPdu!3%>n-dO}BN*BB+S+xWzJX!*WlV(TubjO$B4 zts{{XRDQ?C?-T!MAFZk>h<7t6*oM~6-F(Foke2^0Ov zlb7o4DnBmQmkAyB%Ag7Fb!eQDwU)S+TdpSL<@%-$3+>)hFZx`TS-5=-wQiIErR?}f+@yHS)WSqk|_X)!U$NvB6)wPbq704xx zy}WiTr+j|DOcoiLVqGFzN`+Oqt~Wyq)E10BzA_Xo^c~^<+S)dD7ygF$HUsYlLW@Gc z9JHX;wUd28k)n@+%&wq%%oXL7G)_8`f6-iF{-W-2UFGOW}+V?yt!@H@jZ}-Zi9su{FSL6a^dVN== zG;@8o?KOmI###Wmp;{{N(yzSbQDZMK-nDx+3IZgXpJ9x-g|r+$avT_FIjBdT?Xya5 z$puyEr$B__ixl4}p49@;U;CiZ={K0&!VsgX0zqMkoQl@ZGy`jUlQh%+%H)p1G@#T_ zrHms5T?uY|3{2iYrI)hx?BWn0!eYz$6~=|?FiM1 zJl{IO(J*aL72C--Vt5B*(RI{YqZP-28&exyud{RR}v&ZbzV08L7L5*^{L87_E!2nRa0XF@79t8c9lFpiVs8=5~DL*d_z7QV3Al!y` z6OJZuv*VZ=ds>ZB%*QTJiiaSYYB?DqcLU+6vX2vWphWK{{Zl$b5oyBDV=!eb!ts#O za+7M7>P(kD$UTtQ!}f7qG{U>*`Bz>!d1j^GC|P+hG4@18{*IErb!2qG?Y@N3*}`e4 zjVo`j7#iU?%!G3U?xJ=ZGWPNF#}!>22g0DCnF+Jf4&Mw6kH|`Z>yCeDQ3!iAfx^w( zXJ_NZdJ;Xfv|1sNFDcyiC4kyViBp%9KvSIN8|TS} zcI9*PeFqgM0jx&&o`Xu+gRPqu{bS#$6=%sjZf5hU#P=pLszQy8^vE_5v1dJsJI;A~ z1H^Jta7U7pUY@PsL0Qc~EM{tAGsDGxSr&wy_(pWMU-mcNF}5!{$A7)FiET(^gz*50 zNwI~kCvlLQ9IBxX4Dp;vNKxci5fL`M16c(cF7FQ#2LJj!DlMZ-L$Ra6%2!euh`xP701dK@TLh_D z(Iin#Cpr3GO{F)oJugKVS*#3Yjc5gUol3ckZ~oGIgOK6GfoyMq>rra-im7Tula?k@ zW}gQpON8VU`z2J$!bP@Y+S)DML4Z84)@kRyj3%Wc13TvgrK2@1ok-$^)~E_Q zz>>m`q)I|g@4>-c?;E<3?r?zpm&xPHkaDI`7@?_wGK&*qGJ6hpgtAr_mOx)Xa0oou zF&~0^^{oc_m$AyVl}V92<@G8wmp|C1N)meOHxj3~OXHXcfmLSoW%4Ua6S(vr%+O+`av7}1o41k4Pv+oe;I40>$WPAMci2x0lFZ$AZg)@0()e!pow}N^k z$JOuI^^v}id&{3fUXK2@MpdHP@9SLW75aGeit~1?TwWh!V-_Jft^!!4l+V6iQcF6& z2(GV9kOC=p0)PlXS^-+LS6>un!S%4R?t9V-W_CRv`uA?r)<=8f59bHqrK`go@uHKv zJ9u%BH*0eSm**~6JmqUn5LZA^Yd~GmqNB`hDgyIgyCM&n>300AhI3xMsh@W}UV(eW ziy{ge-bWFgPM+$P&Nt$EatJx)ns)OZB6JpxX#g98^v5-dnjtumpZt#Z1x3pI-W|Bc-qP>Qa6>x3_BOi zD|l`vngnrA`%i5sCR@qh3@)*cy7cnoiI@H7wZkJ^m61G59bHB0_ak_TF+yi2?m#N@ z^yMe(PDF7^k<)ij+u0|ClWR}M{<8@jJ|Wa+snjH$>CEY{)FcP9d9tavVpzls0>Bf# z;^KV0DO-wSF{TfNZRVyWAHh<%VQxwLAubhJ?}q; z<_6+A92tm+eT zz0f;JJ^JBado>=+j}C&^0qg+--A;B~orvqg4S6UpG#OQt^OIAXLy^4bRTX$2^#r=6 zG4hWRyU4{}_WSN4S55YCNpo!{yCB$}gCIT*GK-m2=b$L_Pi1ma1C*34&#H4}T(gT~ z{yFaj z<->mf?O8|cg2g3}L^54R`rI#$!op;Tkpof@GVtawfRvgdb+2 z39{mv8~KV_Nq8#|Z)u6yjqi7T*e6C$+Bb&515ddbNahLU9v$2X_ z&JMVC^JcFxtZVfXUnIk=Wwr(jrj8K(4-zGE%hs3J?B)IyytW9N3)^UVD%$DU>Cn?* zeJ|I3?J%IWe&XJUN{-Z-ce&@y7VGdBB-RWnAmED0n>(oYZz}dZp|T zJhR{tKia#S?L#0hil^E4K=<4h83cx_K1H1!iU4JY*GOB*i!-xZZk+jfO*AL;Yghl= ze$z_sM`kr8+e{Uk#}w{5Z8J=*NJ%9RBKPC7l9eo^jm?vl1s7#~^BgXR6vp~^8eNCh zSwtZVM}M_6e$1(XfD;HLFwQ9%nDfRp>z5jF5vBVUTp4kohyQYZ=JFY?HyDKtg4`Jy zN41OWrw*c=j4@+8;CaMJq1LH_Q=E*e`Xp2;ylu+AbzSCdjTrPAf5OID(b-NnCBayf zj#4_!2NA_co$;2V-;bo-*sEhVU0Q8hx=M5FATBX$02gJwV&aZrnxzXXXfIc&e)wmg z<4FB*(kEZ+D3}-;;w*mSdKwbiigku8jhKZVsK|Z4H5ad%=a@rkNr#P)0*M@ybE%BG z0FQ>JQ7YGaHluWyMy=NOP4v*kvo5@}G;u)Hpcr}8b2TjgNx*MgN5dt$70qmKTYDvs zE?M(~nn#ob^x5qnGgd2@>8JFCBa)nL@R*OJ|Hqbv*E>5<#`1iq3GM)C)VR(TC?O@gkDu zl9ot<{=98aBBj-R!eS4+i9*7=j}Dgfl>YZBM8kNjIkyb38JWH3)Rdc*@^t(A z$bxQ5UsGBm)^l(ucC6=4!;f|G)E1e5lFBO`u%38CTe-cs}te8h) zP*qbKo#JEdI2h#Kd4vD^kadNo0yj0~;7Rra@CbrKOJ4l(iW!iZwW1mdjiSZv90DnGRRtb_Fc3C#3;A99D8i0@_Z(| zFYHUgh0GA(NL^0_^ZnPo8&>&JWX2|kb)^9Shr;@jYcKy+EIOjnFLTj`VwCi zLVvAzjr{Qsma&xs;m6F2fJYwhrktfGex}v_3UL7Td#RWGZy;f zQvau-^{a#=Z4qwy3Xg z>uhC>G|}-2sylebUGPR3pa|Ga1)-jkY?Dne{g0#bj%Vw8<2YKSv_@N1TaDVIu}h2= zp;f-6VwS4dtD;8CwzQ}jJ65W+TEyP7HG>c{#H@-av162=zx4OY>%7l>PX5U2-rU!@ z=RD8nc`g(V-&+2fA2HMt-?*)+rC@*eSNrnmSemzKb;aegx-Xf|%KG4{#h_rvo9(e7 z$0)AQ>n;bVZ;MM@EsScR9_7uEF0rh{vX)TAd0IpgF{9;Gy_(INcEgkYxi0jtU|F?p zgF~FG8a3VJt%-9!r2P1auh6ndFHS4RETt)$z(2xCo`STtM<`913UNqlFCLz_dmH!G zw`XTww88$sS&+|E>P1LPKyMNsI;iZ^(Knf+w%A&*o4zqMvcdJ1@mn`K{lP040}qLK zY3x!xlVi~cFez=w%{+4Kg2&Qikv#T zPG(#cYvAZXYiA(mz>30KhQ{7fiSQG_>vc%9k&B3*_2f(sYdK z?h6W~xBP}2DQn(dy=19F{f|~}R&&e$YDd~kuT%9?;oj^XY@!m>FRiQYmtIOv(Doo- zUr-;GTeogO{#2{U^8bDLurkYkUoBtsgOy8ugcNzFsWLkf^#UBnId}70!Y{DJ!y@Z~ zmsgnqI^Zk9+aF!f=3bYje%vnntfC!Ghe!bv9?fz70FyGOgDd_2iZ)C#ThrTovvVMQ zmU$ou36pd559tZxXG9HHF@KHsSqpB)O8cA*#8B)YFpqhu4HFot{~sTPJzjPXeYZ6- zU~}~%bR|Q?yz=C7)Sv4wh9Dxs6yUo7-04(fholXOes2r}No0bk>OSddmSKYmXic2# zXM^tDgp^p*`n(J;vHGBmPCc$xvJ|{tkiJNjP9wCRdNga_q#KplwlM}@s4DZM!_yTt z*PY7D|JAtnsDjVk#^u)Sqs4x_n-}Sx@Ef38zK0F#;@C{%?D%phdvpEd0pC{KJuot` zF`s1lWP1mVavTbZ26+Re^5I71A7eU;LV>JRI>ME*;pUZ@2Q|`t2Msy3Y~3#05vlg)uqdD)KAV-oB0kU@ga=ART7nP#&23_ z5cN2&60tD3Lp!e!(ly}#57w|t)6K^Ts6+7j#2ij+WPCw#i7o$_1$;a)m(dW#U=ZZK zVIt;nLDUp&o|MJ`39qhyk^(hZ67vuc-U7ZumI;@ohfqyY#l&&w3VY!(qxg1|(N z*Bt5jHYz&KAM5S`6Qu@by3q0IwbwqCDXhVY2vL#)!AO3ar0PAV@AaR`%DEb4s#W-3 zBn*8Ama*cZtr!5$ZMsm)X$DmrQ)lmOGXHNjymhYbz1q<3{QXR+^C1$>cCOJcE+sD9 zuyC;qWW%RmO8Q|$b}cp0_w=Y$dh9w$XPr<#?A#4ctfEu!CB4z^wa(U_c~I&Lc6^w7 zq-p@{vzEEV_2Upx1&%hF4ld)!y9{FYc#Mt`PN;Eq`o$l>U~?VCjHrxGl?E#KOmaf* z*vyOX=7kCxcD**LIWZLi<{N^J6g{L<@kcz*q>8Ol6&zWMtymTONQHdBbLr`mS5mUf z4aVW4&)?TcGS@2&&ScZiW;^kr-+B#Ir_{W(@qO-*k*+2+rE%4ul|zK>MOb28!ZrIZ zE-%xs0y-=yx48bp3(NST;bqe}Ib2uS9F7Upi@fTQ@6k5+emUD^WoY73|$ zBQ?|2^woT5K&fv)ZUP5*c0-j%s*FFLmv7qvaz(gh`lt_V8OL>8$iw$os!Rs&Yb#YI ztycZXANGzTEfUl$aBAf+IrK*OY{*(7StQxYZS!-t1y{g>)i-7JEDC_VW|3zBXgu%q ziMy1Eacbt&IBWduaQu*YE`I%j5Owo zc#@30EH5Rv)S0HipVbr9kj+ToN?t_K(!QdP^;v;0(BWM-nSMS=cF|F>0$tprhbY@{ zUQ8({0?jzTyU_{Xs;=hzBGuj!zFEJgaLqq{L2bs1{_Y-Yh;?{_dEzw_e5&Hud`5o^ z#c0jDRMcZdQ>S@${pqb$mxj7R`6R^%!xv``4qFN^*}$X&D?vg|a|r6Skm?65)PkPt zw)FfXDTPsP`-?}$pQt-6>Ov|{t`o)Z_CQxEM6hAy6wvsYsptlJqam9)%2EpwRv@y{ zx>A|`MO>5;;b-WquX(NBP zbfMqk%ZX9HR1f{Yu53xAH@p3Zx%r|fzgp|e1(yW<7MgEH37;YBiY{)&J;DuKYm}3< z>QI12@IE_`wVLG`9d8k-x_G#gGFdFLmG=mjpE9?K6E!R)i8g6LlEUyO;>n4Eev<eUq;Q!n?RJ2DXoySvwpOUWkO;;wx4uYc!qi;=#Q$okMDh#$q^s;GPSr zphli+1Z-I~Jv1BIYCme{_>SH*a3{5MbfY&0UwvuwNq6i9*dqSZzt7#I>q3|U%YL)s zri3n9+htQUK8wJcY_ci5tb{ilmY1kXDk&4I4YES1yl_Efs+E08a!Nc}x$YcO@;!!v z!zz?=3lFJ`JX=v1goyM>T6|F!UM&6{D;`%E4se1WvLELi!^QtC53(@Rl-}|m6>6hzxq<4`+TfKD!EPD&ZcJ2FM@>@=C~=5 zB()T2UQL&$z&xK)#4Jc2EzypZ3uF4$3#qU1s7=b~hs=CVo-w);Arm}#IO>ju%#j+C zz-D)r?fSxM?*XbKRKpn73nwG%)&UsNGpV1ap|#3Sf5PqjHRgnqA%aNMJ_l^$FU|3b zcTc;kLN-=7c3YR~rtSiQF1Cqn)iubcXwHa+-15b`wH+3Gn0`=kreA3sJmTSUm7Q2M z9+k$%2n$qCM=?jW8p3-QZgno7Tzpbg*YO`BO{H!e?w5u};VbZ68oJqT}~1O_ulYSgzym?M5p#ixGu*7mKg)9+NHTOYGa}x?MB%e{DZoPnfRf6+%u)L zS;)uLHq_+!CW(wNK2d24I8XmheLg{PQJ%mBUuWwu)BZ7e%^zzr#(17JVyz1 zh+r2WYeRJ=CxX0Nz~);f7k~FVf|!a#lS2zHuL{PH>#VN~vv-|jwdSa@e=@|c zl)d01>Asr6m$J}yDD57No(_J}@)>h*g#oCySx(2rTGZHPPQ>+d{uj9s4M=P&+B_OJ za9Q8iC`j{C*ej9cYx=y=9PZhcHs2#xru+GyxH+8GbVhSy6~}o&!m;B9`i>yS<^)IvwDRX{$SiXI|03$&I{bw_tJMmE+$zuX}Z-XVxIRcB` zui;;_mbh>2HvM2IakTM3J<+IDJD=w6#w>UF-SKmfV1;&Xb#T|c~%XY-dXyL6Vi72@20yU&>Tdjpx1tq()q5H6VZu_#q)E#gzJwgPYs z%Ur%4t`>`Su0Q=N+uLTom)eDeq`nC&_gPeGJh=8l_fAf%%K;;$sK0P0(#VmLtzB~A zctO^yievLL0dox=AgccY1p6E;c->7ZJ~=ScKn^tH@b5tUTOayAFajP>^e!y1*1~Eo zSQtcRc~eU>Heu{Y7N5D`<{Uk(S}L>2s?7fwTtc*rx3R)K*7a?vk>WQeXPpUsO5_ECN_jwG}gV!%}(?w?&HXc~ADTpmZDq zx6^B@I;hTdi!q!xwOT_(QQkat$6{v~qW(T5Eku-W15Z7DzKtmE>0kzR^RWD5Z4b!8_n&ew4otZKAg}Tu=zq8_^KVN(R1lhAxctw}SV zK&@ywV9_=lBmhZrB9J&LYUv=C@TqQ665Qp$se2;+3Z7xfn?Aj$zf0(Dr7j%9Y(8=B z#5g&&nyl0p{C?(fwqwNm8I;8Cgy&K^%l*=V!w-RIUbhk|=SZm_yznAVX&Mv+U z3F6(4uU)o&$=dJ#L!4sCykSxsmbktP7rTblDRre>N;ixMxWM;#w093YQnB zb9dN`+6>MHO3LH~rrP{Ejjz{gAZRYqAnpdNfuFL%f-@%8Ra>})x5jIhH@M>)O|XeI z!q!XTz4#}n#)FWLu-q_9L6g_<4RX|&em7pn>nl+UuW;r11~lFXuZQf*e;y5h`t$QW zzV6v}HR+d^Jlt*m5=8;OfWMR!*MEpoo)a)}V@*!3pGHaqJXbHrGXTsssSfkYkoWU- zdZ;jyagKA^iPhrG|0e{H(zU-I8o-InZ~_1&z*?$%G_hgdc$!ed>N zfVo~Slqb`VUSoJ$4w5XfbQHOVV*>34M_A^Kj)-ny?>Biyv8&i#yH%?*`TzsaL&ZaV zES-8{%D!QeE0J@0T>V#>Y^6=$%|n^bhNbj*yPh>8cH>-F<+zQoyl=$GNVndbv!Hv+ z;x}hGFAjm-gsxA}yEw-3&A#)v6G%Pp$h4x|E7CP4^40zq+nTMM?YG~0$<&wyuGG6n zqMQy*=-g-s7V6DX{DV>(gz~wQqmQd9lyvQEoznDxX7A8f4Gh&YEJeEOW_eq;EoOb^ zE44~Dndci1hK);)=3j1jY}Cy+p+x&rYH^yQdCrqzeJ}IEsOudoYOE~1KWdI-9H`#) zyy8H?)y}13D-l)E@M!-hu29>#?O6juefy96*+?4!dO*i)j>K+Ts4mK<`Z^bWCIz>2 zNBtW^eO-U}$b|~moQ+lB%Y--i`E$tWFZj{I|(S&A1%~Vsy)%hqtD^zNN&Cep`Cpo0X|7XLuf&OK2k@gn zy+7J`9po4oI1x>KfH$hIcLf}tr%`+10D0l9#FMWm)0FB$<7(1TAN&p;epYoL(qeK0 zd+Lo2P073UE@U+;FM@GfXAkq;x8;*Ii+1Vt0GWrT`R`PnRGvfD-I88igBat7qJN&> zbLwMV!eP|`4fI2VIb!XZtsulFwD&y8EnqPj=uyn~K?zw`b9E)VBJB=fGa3pMDfc_X z7g&;E>Q;gcA1Cb(sSXY1!r!^D(P71S>qS6bxjpBmZCB+%TmXR@&VE9@$ADK{4kGF` zd2Ko%Q`Dj=U2?OJ-#bQ>&v;$j<3%fl{CcT@U95Fs>C;@S&AjrD7FYjKA^v-v?>Nh? zABBHxvuoGY=vH?!HhE&h+PyfrV}Y$6QfYs}`3!-rK7o8x(?^cyA1nS(Ew27EL-Y6O z--VT0tQ-Dx{WJj9P2GpNi^!X{LTcK&oMbyO^%{O&aFx;peqgZYA6UFenajN*XZsyVPYH7-e^|3nLO zZn#OU(1zVyb8ON|c->lCkKfHP>qVPDi?U^7!?GrWtDt)-B)#Ac? z)O7vN>Er?z$m{Bhjs>B2n=VnIW{J}&oyNTmBvZ>Tmu*d0M}*(i<-ewMUJnSMYgk}~ zv^tFG&T)S06q0~5Ws)C0(7EG3T^&0OUa$1O-h>)W#H><{>`KklMxtu6Ay0<<<=Kav zhuPO8iV`idSpe;o>#0>T_LhGj-Xu%fBgukTK>~xm94z!ezFA6CF(j zC_?(gVtbI9=wP$RS>NvK#3V9MU%ei3ot_MqO?}+KWN?ZVg_SNF7z5=mCQI?EZ3tbC z32o7J6tfi}vEhS_fxa=7;ka})dENT_M-jeXE5i|kbDslu1tVUHG-z@s|2aDTnqLBW zy)r2#RGrkY^GX)r_tg_v5$^DHZjrn`^?u+CSfNS0u;g$vb9JAgI{J9OzAH*A&=+xf z((<|++ZlMB{(zOucj2+BOuBIVVa56>J)ChUi zK!bVD{|@NkZ)Wym4$`Nn_B~;I@MU0lROR_ssd3LJ&$goQS5daxpQ-Cpf^WIGH5PEq zWj*ja*b1m}TQx9qGA=$1l{twNkSJ^LtJCC{sE8O?lhTN(Ih3l{J`m(<1k<0b8^G$! zo?w-jTo5-aGroSc5D>Mg_^QGqTGl~TysVpn`e7ACocuBskgZ9ZpyY-|FvnTjX!U{n zN#+0f=l>iS?F`l$HhYX!)vvdEwymz8Z|44ckR~>w=4RPfk2MeWZ#af5kF}g$biMmp zaUY{iWE09dcqqxqrtSbHFj&9-TZ|@lYUdH{Gp!^8$J);%3#|;Vwcz2ZPF(a{MtK8| z)GT2Ck>g5J{{&u)j;pIqx~-hSH`vU;hoJKXilFR2L&l`XD@06A#U-R#01ghemLaSp z(qQjp*44CEki*1Opyx-{96?VR0^sTaiXXxU;vdO*e9`9aRi*j_Vb(P>_WmF6XR=VP zBY~(Sy`Fm_xoj zxD=$~^QcW;NGwQe2<>FO{+Y(1cbR)|OK4sz9q9SZ=j>@v)>OKLn%*?jCuy`aBw5Jz zOZvIE;4YC~^TSKR-LqH;0NL>*$LyjX%))u}2K?xRTKTMeHCHk#Z!GA(+`0}?%_nhx zK(<=8fc2bdGBwysH(T9B=MlBu$G7SOu>;+A$A)e5iVkhcQ^5}f6dt1$3223r7p!Bs z!kha;D`@5utl;(SjkovIgEkKy#iUI?X3Sv`wf}vgk+q0=Z{9ns*xPwEXXg`V zK#?C~W?$835i8z22rM2vcCV;F$ezNg(u7m}-_L!rn_w7DrcfT8K(v2xE}!-C9azOE zcGtOr&d6NVsKk?DuD!YWCyVM2@>|r`51dN?2`>LyDPYLC6fn5j7}K&i7Q0$n*v`d1 z;{!8aR0a_ymez{4^MuK-#zMkrSC%(ELs|)fT{M@sQ(xhVKgHKv7>}D>FWc6M3b3#n zkI;__c;5Vbs)J2bE7_y1yx4{s4daEG`PBZGcIuk=YSJZ`?dWlox6Ip=Vlwr8H_>bb zi)?G(v=R;Se?-;Vi%c1toDJ%Ao_Knf7Pl`%N(Xqm zM?KJQhm(C_5)b`FUA9WG6jRyB@RMvgy>H=NPA6*};S!k+5kQC7otILXTpw3=1pgAz zEy1axpSoF~1Yq0WYigXa!Otbquz@CBi6l0l!#CTK2m2e3R!sRmaoR~{uCukxnKmiD z|BaR9IL}?dMgPvzK$|CqevGJm8iamGZl3B3PM+Z9D&Mx2oT3=CbptBf3kBk*3-_5~ zFqefV+1+^b%bcpC3-{j)62@+Q#y-2Ff%$<-!eM2uQF-~e^NE?yK#8_?b+ro?2@j41xCU_q^;v|lDg zUo%wqW&J2PS)Uj2#YXBK3Zx2nu-$eIx-@rbkp2g5G=DYrpGKliX#Y z&p&TqU4pC3tF@48KIPYNEiX~{li%i@C$qeWLhO#<1yz8(eFsxnht`Gg%v0ttDIpVO zqUaYjw5;x}h!=czGde6~DQDE$kB8|SSk9BI$xh^5TaSWvPoje{)pvIhQfwb4An{uZrJ=#=-hTA^+sa9K7#Kde8-U{2V*RlC- z(Vu+~ezZ?v>+hYSS%gBqowErIUqvQj0Bxc|ppMaL<3#BxYMFnwBbWdP{F{$07RiKu zcy?7cmq#EfY zx{wE}G(zKSzTq}_E>itEb9)B4&b;GK-A>cTLEDJ7O1pUB*?njJB56=P$!p3n$%Can z;CDq?X5S>=$?Jn^6yFKv0P40ef;`u^tiT`w*V{UF33D#Z$fe;-}-amfZq&{_GXfiFG9L}p& zzB(d^11tP3E|2OEeAFVuio=g3`jKSmhe7Cqt z&FtBGrJM^wo{x!WSli6arl)ehPyWw?26VmbZ&U*s*74DPcRITt5iwfoNlltcw4K;Q zb)EncZE?sMruqQsiRnv;wv$K@A&I7SzP+U5En^tT*F3_nbOUQ1Mg-%LrNQsKI#0mE zr#a_)$_{4?iKpd9WI+bCz3B5@?$J(T2e13-dkv(<_2+A9CX$8S z#xUbpm9o4}u(IrRpDTEYy_I$|`3xA_YDWA-FN=0(1EfglQ1Jf0j%7OyXyoC#c$t;b z0zkB1#|+DXixsxcjsK)ZQ&Jbc9`WrTZ8i5Y`H4i{{i%*ni@e+2wLJGB_ea)-PVQ{F z0{0^h8$`V6B6IhySj{LtGVN!5^{umxX!AFI72&W%h*J4$qf>_KbY+sDYA%lOm+VI> zb$lW%Pp-qi@6e2^rF2@#Ae18GYbv#(QRe&^{U5AJ0Q+O2=z}U#49`M(@_Ya z94a4ZJM+7#y(V>X!cKKSRnd03`CXyDC;?iSC--e1A?Vvx4_hmc2fL8D{hj<;3N7r< zMM7!g6HfRS2SoQ-=c>uG{5Hx8x3tIUEA5FXQ(3d&MuHB`x9IJYrH{GeAM_6*p;y6* z@&6~cV2VrNYcENX;NN@VQ^tCQJvvPRlH4YIX&%L&M$bRms&gbPGpsa!b?p{N0hU1^ z8X{AAqJ@jMn`9-qO4+~l0_UFKbfz7ea;3N)vkb1-_WzEslwEz;%PK2`TS|{Vi(a`~ zlLB9fkxX5Uk*p!cpr^d2kdFM_ZP5eb(5Dl_4zgxFUw`U^6AhFKyPh;Dmhe1dyS&6z zvrfHQ@e5bOiknBbzuFE@Ca8f{pyl3`jsU-_!sl5S+b%RCV@?f^wa-=I)w@eedYo?S zI^nAZj|+$HHaX#xr%gJkTH9_ki@~3bRBytAsI7+4gcn-pfLvtxndCFi9W4%mfB6|lST26`$1W8A=BT3wxXWPeuuyB zE#)r~2XS*Ln4tZ4U;8c^T0Z)(P0Ljy#(*v4D6+ROCYQtrJklvVFjTW= zf{u=fe_&ks^!dqFZEjpfZ{_%lfS{6GVZY5w{K#^~zu*`wE#m6E-$7%tVk$)Nq2RG9OGz zUysOGGT;&Jv!cG)AU>NPrBjYka9Npw_1^lWlbiD{U&%R`ZPmFTpx5Gcl+VrJh3VIf zn^r&{Pm3}wAL?9lMQRld0gBl~jQ-in-FeBI3G27q*7@RBRLCB}?}>_k!+%r_XMsmv z{b}<)Gr==vqlN#u-=Lbo8*;Ul91k|16UW&Mh+TDxxW`pI%uMoVG;&!kVZdYHvid8` z(Al8*uL)?LaV|=EZe$djMD)>>R&R~h=$)%UUFo}MdVJSZLO5p>3Mh+ZWQC>)`*6EO zuxqLZiUcS@L)camyS?=^mqJ(rv5LzrtXtl!fbA{ zd<&$5yS>lS!nPc{ZLjeY0}(m4DPdban065j=^m#`w~FQZ`B@ZYg{oz~R()9EBg}~6 zk#F=dPED5>xZUIi&#x%DKf8%5ZPM_P9W2~^E=;soG6|CpHoMSv=0Rr{?^1nu>2Nbldq?t-BKF_>1^J`nOWcpR4B%%yC5&-6emR z1B19p>}s8qkmx-Y=vDZEjS>#8_oAFG<(%h!$+PsqmqqN&lA&Ac1GUYP4GE+AZx*AX z!x}NS3ga1INMXkW&hQI1uQ&(9dP`$Qo{1xGJ&Q<1MZ7RNeLM{v?hkz-{r7Rb=7Q>4 zl~V3(_H)}^!DUrIf8$YLmC_J8yf#EL8UxI=oTFJEyv?GG`bQBTFwE4a;<>`2;gg^0g{QM%Ue)mkNsc%T>d}rGFhu4t8 z*y-(LAJyvb;s*@V!Odc=4^HR4Mj0gWJwNj+Bnng?U=uPT7)itUVr)W#1{yrvI+Aq~ zZOd)Xt@QT>?#LG*s(*oX?>Z=h>+C$O@9Ro0CFC5mNI#eJ5NRuQ{bBTkc1Ya#R%D9d3CY#T44Ec*iaiRdLtZ z_8*mlf^ym25~^k+RfWf_m&+J@^>h3$MJ^(I&-%Z6g?YVt1#jQAlIvn@TKJvFm>@$+ zK*$PFC8Rea;|Fuw-U`<&L=sleD!obkMT{WjTbw`x!^BXJA{NFXI*>9qy++J3`A(s& z_8;4XK~Lp{3y7C_-goz0p|bV2KC=~o8+x*cLcr;?JX&zW+eqmNLa3J#&b2c*OtxlH zmAVAow^99pvA_uL66`?!ImEq6d9xh>OW+no?yK*1*(%s0!cHBHIabqp251%8P^2H`9}X4*Jwsy2U7W-(ES>W+p@ndzqp=3Aa#p^8rT0D zq-I~7Fmstj=up&{XY;zQvCGq!wHYEYx%aT@T09}wAV}=3Xj+HNobRcFT+7#lY877g z8su=Ztq#&BuSLc9mGdM^#bA64W77341NC1k^mg%gbI}fSV_|H?DtQWaCc@CWNvpqF zeKiv10%dPmjG=|U(+fvfH-*aH`aH&z-^0O+@OFDAv#NM1*K5qW2LzRKn~(PcSDK&P zX|sKSDT_zrxmqWrR1LgzeKz$(VSXGEM8aDGeliY)8 zThnWoZN!-rWe)zQ5C>t4A-8AiTy4L!$l9B&2l%kCnai4_v^Xek zlcW^wltytYQ@dL@C-)2UjO!ihc@NDaCp-H5izmseNy>i}8XPH>cqV)X6%IE8FSHs7+X=rGK)3)f<_Fw}m@W-G?pB;dJ*L8p6Ul&3k^n&ZK^3)>1cFDBaM(bI}9Lgrqbdmg~ZGL zpQ0_5O0PXuR5;&&pL5Dp=_cNguaMNB$7JyWOlbY?v-}{#{bsXa^3mdxRlE|A{6oQ1 zHPdMf{Cep5i|k&aFM(e{OKA8wK~L872E24}*B=>|HY7puOTx<*@ASdkTl(hm&HmK9 z_ux=cSh~TYdhe&6`#jW!#Lta3iu%Wn99EAsDdbUO3ftj}4qL_rH zsDn-0(jvs6tb>ON=piCu>n+sS%-Rv8X4=d92L1aaRM`(cAJ|_%kR{#VSsH)*#M^oy`c@~22)J%t@krsb!GlZ3f5@A1ZzXNvyeTJsU1N=BZi|`mJ z`ZdWxrY6D;kF+M@TC26{Fs8>*sDU}K7x`W2cZFZDtl0IeyuE%6e@yyu6qam@km2uc zTKQNG>*=zMQy@8$PQPn}a_1@mFq~{_UGST6yaaRITCSIN^YSgkOcW2%l9PSg>589w zIPA}{+-s%qdvt&DMlH|@T;Ls&k;FH1NG8=nVpUZbLPwW?{oWPU$!lM|tge>bwXJS={L zXsFyN22Q!V)=Ns4bqv7uosT+Ii+7%sN`baiEI2X{+bSJTvbI$MVOb$i6ayw#4?<)Z z%BHfHX!DQGNFjiqBbh9e@0;!cgxKxNtJ|lX4;qCvXy>||Mi0>iJ~)o=9%pxh3U!-0-Z1OMq_F!fj2Lc01Gh^W0-QLx(eMQINBjp~GMsEoQFB73j0Ik8V_X zji6}6gj~pivDbA{jpK)xZM1xCHiu042^t_fz-;C<4dXC>`M}`hR~nprL(8wbJ4U#n zC)Kda?DtIes=uXQ>Q>8yzEkM%biNS9w_ebMmU3<%gSOi##ieK143;`i0Xn-#wxy}Z zPFzda)o;hmLv#P>yY|cvA`wH#0qy>V8RkN;1zB3?m0fA+v6PUg))-q;qJdSbTYV{_ zMEcOlll*MxN=(`5jfI&&B|kxcay$V<80Ct(p+{)I(CQ8dRo{t!sskB*am%75+n@Gw z*&^3V5UQLQ;{NCE#kQ`>Ssnxh;z$e8%uTV+qwMc zoJpx*XDL}S9AEP3YXvPYmqR!~N8c9`uQnQKw1gHTZhRQAcF(^^S{`~AqtOC(JbMPA z7mDt9PflJQI(U6?;XB@;74bP`?o)3Lt3^r}zmKN5;UA4m8{~825|LA@Zg?y)_~+$# z`_EPBya>phIVlAbfWo{~R!4x-UP!W++6B*QE25o)heGD@L@0aEoY|LQ6-_gY3I|cb zc{^mqPQK@Kw2REQig-btpDAj9A!&0fe$tm5Y7mIRJW6C?g~odfDPn_?6?l&^7)$!z zdpr@#&&v^<@be0Wxps}IRvtLBdVwr4d!+>3l;zQGrzd;dM0_vVxmr4h(@-cVsT`JM zm<}cLv!-MVBXgY1#qV1C%K>Djw%vWB!kRAy*wr*&FJ5F;A}t<=#Ay2jQ}t*b3@! z)-{4cKEK+AJcfS7r1{*^F47Rn+=||I!euLY44juKMNg)kS$TMuNu0V3qbd}}C$7PK zhTs)Lp8Q2JAY6{9#~YN(AHO%`tAm$ngoFfuG&q$kC69h8=iUD?+T$`w&X4FbBve;$ zX)ze&Sm6gL#IwK$=M@hV%qDazSX9)tDD+3BR$@qWs66{Sug$wz9{{TuJl zwd}OY*}^s$2mfwWtyp23p;!KT3wazf;2P*NHBOtyE#>H*SLJm>8=IrqgYZq_MDzF7 z#0E?cFWw>ls}!ZROJiH;mjpB#hAP*j9s$vp5<^}1t5$3` zldh|zBHJ)y<;%Zw>i|nuaaL2m68#bKvn4hM|*j#+|ku$0HbsCmmyU5Z^ zoBOIz(Sh*mr$NZuW9v_}nclyJj5wK0 zjG@d&4Z` zXU(vS>?iYwB%%p*@l$WFVsiU_$87k#MjYdrH^rYE%IwPXZdg0V1=n*En&Sdq&R_w= z1MTb`@0vH>E!|p%%EeT1!;-66_nI5HwP=q&EkaD3HiPN1?58h@-t;*;7eS9y^!C~4 zBvr+X)d#fL%{^R@yzPM)}5sy0Gtgt2A-m zsJ;}K8uDWvH{uPI6L-H#x^wjQ1@6;7!%b$5YNX)y{%@ex|8LCv-v}FjyhSgH@@eTO z>q&St#O=SZPjraky)QD`C!d&JZG3x=a_fG$j!6FCMOy;55UG#Gbf#o4L*sgSRdy>q zS+A?%LK#iP4*)JimabzErUDwUjswPYnf0FxM5?MtEqHA12@an{r=$FQbbO%gfv*C- zmRR=AzSel(kp=DvW@2x4ss1p@oV@eQ+`P=thnZ-_%!hEI1|=L!CubN9PN!U!w$9vf z!wm(-Ag6a$71{n5;mAMku%b<_iF*D6 z!AVsUFOn6fTE+<1qq@WcNx?U((eBb@9R{w~25Ji?%rA8toP|so*av5RIg~fYR#D0x z@Dnr>6>H0z7|R0Ip`-*<0Z?%JDv4pbi`UIvX7hG!02K8F7m#MCkTk`T37fcwzc4c` zq`9cMB-A0ecXukdSFil`m{<;RK(XdU2op)J$zUu0zZXMsovA_0rSd|QO4j~qK;&trkI!`=I6++6Cm5|&Rz&aZUB@@smJZekv(?!B#RZNQwS)V2TP zWP1{3?#Ij|NWNl4gAc_LMo+$(*!rSvigRWf7&`1#om4dpUJr+cgb$T$KUmnijXX(~ z(Il*fcLtwq^AW7I@WGs=do(+0i#fFQaUp-2Cu!h+glGd^3;S3nU1ihgQyUvvSJWoL zX77>UYJE-%Rbwn^PQljE3`~f{CL_7HHmSk=y5K9<&byyprRr?3)T=X+bG^*O-5mGQ| z;AVv*ifuxo(HMoYlm|{k1URzb?eXQrQ0F>6Nd;`(J(hIDsx?*1gCUo_7eHgks8uaC z4Az(6SGvdmAPY(DUO>R$=`LBA*6Cn}EX?U=rI%UH!_$Qyp(MH>L=If81Axp_N{j}O zACl%-orvbReO7w14X>3~*jWLlb$I6FAKjH~ozG{o@7g-s`FP!u&7$~1A`ix2B4DZh z-i?^n{`EsRrWJp3D2#x``R@t;(1;SAEqf{qA?AU5*#Tr@4-6yXSe-OMWr);)!4HjW z;g+&b!cIgWxCss*^LwlrAYc{g&S{udtmNH?@+L%dIH~;!fPA}jR~&JiTo;&z37wWy zvv$^ep>#_o%f*k7H5pKg3GG~0rH(mN-35>hNpLD9O3Al=v}Orw**xe&V^+)VIzotk z;BQGzL^2plB{S|%5ZT`>~kNdF!)S3})j2l93q6JGwzaqA^tgr>Y1w9KW)$b7Bo^QYyj> zKNIvL^n>u_fb(5|pLNT05JC;r_PiC7JIrF7j2NGNcZZSqh_~N$3L&WAQbl^4jHsDb z7eiyLHao975k2egK9RRyHDIB{#sbLC0$Tp@uqPJa=RKP%qOe+p%ofSIUP5oFNy#$= z`02F#6+tw8%=53t*rLOOshr+YvyyjN!UWDDjWQ5%cr&pK45Hz^HuenWql%)^yE2LFdUm_W)R}Q;jRS0hnDWd5^ zTW|@+c2ZN(Tt0IZGr37Jb0S&?oGMaZhXwS^#@NnkYCLu>ck~#i_q#e=HhWw=h{<^7 z*^KeTGk+Px)br)uR*2rXuW+$u2tmU8JEJjIH-i-*#P^58TmV1emK`I+arkVOM3w*n z!#ZPvNkjZ~YRHjL_&eCHYUUh1t?bf|dAw2Ve3?khJ!YrmSy8vPEq|pEO-*?R3W%n6 zXZtPyzeg>rE^m+BhEKE3`l+Tz$ofCFjCmrC4O^zDlnCkc{BbJe;_Xe%TX?HvYQx&ZI1Hu zyDU~z068JQl8oOK&zv8=&>c2@*OqsFXc5Ev=yfhjrHUZ*4(;JBhG}&T%&Z^%v^Irz zKoQ7f9l0SDqbm00TB0f=g_mvh>>D`^h)(=#yK~VNRrb2_!Rc`u#<%yDO+;`FvhQA;VScpegsrAwZ09?3Lbo$MaQk)dx)UVKG1Cip%-P`Ke#i)96_q zc(GL}O%B>gf9A41TBC5oNVDjcAO==yxfMmNu0>eyqE${O$5(R-rG!0vJw!yihHwa} zU2@xCPK>YW(1S35GJFY+6m{M5d4cC1Y5?3ql0gelkQ^IE2VaYcuaOhl+bras#lUw1 zM&FG97=X84Mu@(A>m_|-#Wshc(I4(wFt>hZ)puKwTaB#PA}}zLe{2-; zIvT%(aAPG4_JqIi%m6a8W#aMUIbL#lMP%1@mNP_^TEMALnOUkcD9w9VF|ElG|8_qsI#HTDcMCxdvzf$2PWz`jHc_uDUtLhV`HO$6%A=fyFb8gz{E607 zk22`;r{z2z_1@6oUqOe5$O#QUE=a`Orikgf_tHV9+g}@`N`Lq3K6iX~OEjN=exiQx zkl{_>S;zUXYUf``=3bGBgdIvHn0S?3~leW&ZtJRfhEkrDqFwtVkvEo9b4iz>pcuhD%*_q1GXx z)}T;pGnTK`WY(|NkEm@b%-W5m#M+9r#9E8@X¬)|gT|z;9aT&TCp%_Mik@(p3V^ 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�!lCvH?l1ys6<1On0#q=@tu1*J+CQ4~Uv-jo(f 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 z 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 z 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

cDx=I)$51vp?l&*D0ua8I?|o-VN>^tDs=Zs zDh}mZQ}zx&Yukrr5l;Yvwb)P;(8`wixdXo3OMw9g2NTdL4V)KWd5w$dfoyXh}3ob~Q2c3^+D z((N*^(jE7{T;fd>$)=|72n<1`1MySe_o{4BCHNmOUEnGK+==cZ-)2ih`}ch3$&l|@ zA4t_;TmycoNFETOz90JkiO2t)I42gpN(p0l=u^3>Ox-hPowSG73e(8tX_sGW zahrUQXmp`>^os|P(;>6bDbv!dYCS|nutzn#lqYIWhDR$a*{(2^ZI5ZlH~OP7z_?P) z{fOK=oON%qP5jXRSY)dgt{71atfR9o+Bu0}iQWy4(G<`7VWTw303$+;nZS&Y6%O!c zh}1hU5u}|H>>O&$0@j99kePrW6~rd^UDszRd1}D7fmr;NMgEV;{>FGxl_vF<1 z`|ODN`vtL>WBG*S(6LZeW&Z*qbN;@@*8uuEeM4{LyIWd-^pb*m95mfh?ejWKfJ74A;K{RQaWkg{q|NF>c)X+0Vc zj{#IXM9GNtj=aft{_9$-1lrMMuPof`N+xQ!D1p}G);0LSJ7zC7u)oBGyjFz9oA37Q z;TMD;tE||7&VC>HKI7f3pYCkPt_YiUhS}_-{#|Zl-#{3We^xmK8-Ibk7RgtC(!L_3 z{fHgnW_U2Z>TIV*;{MBnk=UGigQ*B?A6bc>E1;cJSDkbwm80;FTsRN^e;txM5%1gI zhMX=t{DOybar-XLek~$frKGRO z_C`Q@BN*5RG~+A6>MEo{M`bWU^AKa9@KyJutof434m9*l+E%Ey)f`z$h_J&Myv>uutY-gDP_OVyFhI2{^6jdGo&QA8>;g#Q1`A|;4x(V;lWKuw-?5r za-^l6PSy^yjHd;3709H;hMwQ4k>VlJ&g{%iy!(}VWg}J@!*Os1)-yq^VC}uiv>vpR zdvCdCuv@)xg#N>oHdA`5gWy}=_P-FC!hH$d3m}x2Jp>PJg!!tYZB-_K^i;%}qC=3!_L z#nj(X`-QovEPby`kf%zRGBTO+nMW-wct|_4*46`&h!nq#M^q8|7mi#qj>Z!M97SVW z!gnYUZBWufkTL`dPz^&ImWkbN5*_m+%2{^)oP}dZ5@&Uyrfcl%1k_qJdJd2I>Q328 zfYe=#^e_B z;y?0rM8k?i`N77l6uO@#BznA8x`qsTYAt&~{=*bHDw#tnnFq@DMn&%*vuCKhIC_qK zdouaowp|NDwOQV_`No?Oe$wj);wjy!^{%(DD0(}5E@@&R!Pl^*%{YNU5KT8A09smQ zt=o`e#kUo?f5JSuJPWDxxT5?F+}~Fh(8druR$!oZU-?(@B3R)h*OZ|dw)0k6yo~6U z%LEnQA?m^^kjyBJyu(O}UqJ(tes6{5VFG?x*?^v>iLcwW7&+Am)E!d2ogbztVyYT) zEGj;qQ{a)&%?YjC>2KpSK#HlwsBj}(eq~{k_7wjCcJQcxmckW`jr7$As==8}f=boBH+5Rm#ML z*motOxmZ1u&gHrB8)z~|e}!GYEqkj%S(2P}mWnYsts7H?3jw0}oKIGV1Frx@!G8oq z?+16hjX$z}`^)ZNYt`r_O!h@#bP|4%el*m0)0i+Fs!goFC}ZM;QX_ zK){JwJvX0!I&r8b8u+xzKRMMdW$jTX-S%he*nvfRIHPw%`g@Pc=kcAT1Qn|dHIECM zAJ!7NG{?k=>Rji)sgr9?g7RO5M<;`l7cs=6eEbvg6tZSZ;wL2yzkEPUZ{f^QZwOZt zE|t|J*k~VmFl#$RKfH&$qsKe58ufAF78TfSh=7e`%%_Adn*nuDn_6LwL{K>4l?xnz z(i9KZgrJR~5(dC!%oARS6Aw5KwJ8i{gYB#Y$@B&H9W#N6Bb;p^4Vcd4kj!^rQ$&B+ zg=UH1HB2yTaC@X3kO!fO1V|Z-i==^mhJ|R0aF-G6XElO!f^3nULmB?U(i$K9XgPw^ zot1DDj(t`52N@xQ#|0nhj1LhX?d&ZgJ|gd*Df;3>$BN(}bf5?#KJpm~B0l<=FQP5d z-H%`;q`R8IZ01j0R!RCu-M>N?T~NaPQ0oRMafK1V&B6Uh z-amu;5xvub`;qVBf_bICn{v=Yb$(ZW^MT2Ot^ zPz)=g7eSGn#m>TmxgupD!bXv@P(Sfq@c|8Jb02 za4NEQS+G9BT}ZG#k^w+1Oy80V!&@kL6v+%3wt{4a4WmS?LgodSgkkfsBf4}IqqGs` z5uLFhND~4HV}>wrS8-t6NUKONL!{N1c+;-sk7XF%62Wpx_GfqquPm@k1T#*U=|To- z8&wxB(hG9eq$gz?`f_OSZLST$8K9gW@f4oqv>lDE3ylL7R{RCUA44AD9t3JP^YJkN z;$xf;LZn#0N~pJSFj`_LcBmgUuq&gH6^3~?b;BfysJfID%E}hFJbkw4@T0*NafGS> z62z#A;!kVH2*VyALNu38!MG!;{Zfx+t_W{o!7HiHe~dvj!GU2Rnxj_(o)}rtaT}s9Uws^lVD0 zezsec!YeM|%NRB%>k$B?bx#4Ua=MEy*^N^Az3EQ1Nlz7DF7+YG2XqWhQXXz~n zg;m$8)WH^RaWcsSQ{|j0*qG&c8aPeSZC`*t==d`$ z6Z@iW2NLKG?-7)9lla)=T9j_ypE>~WJ&7`+LPuNqpg9XTy)X-%9QtuyPeen7)*sFo zVt>9_93e4Oc1}m_##-+NEl z(wi?whqUF*=b95<;vh}d2C>?(u;}l#tPWXj_8$(n%Nge1R4!Y5xuGT|Ea9VX3*n;= z_r)m|ZGA7=DwsH4goj=4o_s?7~(0GP~B?S`=9jro|y=bxp$pup8T_$Dk3pXqYXzN)KTTnNlwcPQp6e#Wajsb|28d~y*GsE$_Wlg3%tOOlrhV{4agv=~tMh>ar z5I=x+cw927!>5fnpw7S{s!9gmKY@MS!TSk`ZXU9kdUuB_S&7>Cdzb>is`3=dbgr7x z+rXEW=QB_g){+&Yt<>KIODm=N8aOZCu^_bXw;Om275CC;L&CKt77I`g(>Oz^II!W_4J?6Cj^N_$8fy88ajUw7sxd*rO%MgW}4?-%4gfTz0TiW4Jcna ztmsg_V91UDBx^VOsU=5IQk;mb-~lj`qyX6U;)PULHJVIUgrhyce0Jl4sOaF_HnYFiFWp`%P6^sIdI@v5*R0&WhPt>+JYT1lnxs|ETvs)F zwvf;4yEJ=KV?H~dx!oeod9o<~8r8d3l30^VnBFdxwIa+#+ke}qHRlVlC6aY0{`b}5 ztDY_u*d}QEOa$*0b_T+mcfVteqViZCz^5iVTid=YONm&k=X|0Sz$T=}3EDeoGRb`^ z=`>2@@>h$*D#9X(SNzS_dH;1Wha zwV_>oAfxhDzd;<+xjA$71uztUt1H5MgLGz(*n1seCL-;Li z78ZfK9X1La>~^%f6;nP^p1OM=BZtc`JAV}*TRBGfk7(Q z%I3mnzuuC6DgPAkPY;jsw6CvAYd;(x^fZQ?@0npH3|Rj3Z5Lul5vY$9B}<&rzA!z& zZhh>g^)gUmIPTX~rooJy>w{=>F~RfIbNluxD7|k&r!&Y4w0zL?loY-=d(z&yFTl%s zowCllWy(q=9_RSI`zvxcN^D76&-O9bcj;FMRtdBer`y8lft%ma<<|%}i#o;K0K(7_ z)cE1el8!*Vi9kK$7@h^Yx`gDQ+*%-UfhThFNafgi6@U{g4%QP|{MB4*U)2)M? zX6%upkIKH=h*ECk)^aP{&OJ$T;CPm#wL3F>zjGmQkr%Ba6W@D1_;F3-}X!f0dQb661 ziqms#(>uR82TBPViAl+w7?V1Td(Z(Ya-J(zkScZuo2OC8`34#Cwd-)uu^0M?THH<>Yft_R=;}f@Q7T#~g&TIKodf=l&v0wXwDa@- z+sOZKBTGHYd~L6zGw8Z#?#fB_^j3M(eXQ*=6*enOXRrDQUaLNs37 zX#BKBh=EqeiL*hl9$}-#H&7Od-jo-~v0~lvW7xkSZ{)l(wb?CHZ-+s5Cnst0x`Thd zi%H*wZ9WMPD+?_&#{|YejdxAz|E&oo*Nz&s5<{^gBS)j=Wh?nq>~*i1RiO2Q-Lqm7qL9%P}#!1hj$h;zd0g@Qn<|tebtR=8lvg;fcH_W!n`p8FMJk zC~M9j5XOsis|~DVcrNcF_`9`n4Ue9ki6jJS@e{m55Po+_4wm?3X7KVR!H|Zx{0*T< zkI(I}c*m0cN2xJiVdPp&n{CT&B!oKLpI%=mklIMGWJZ)n86QpG6%PH$NM)n_bJx2dx-mQ#<%30e(@(M%I2d&zst4ox~FPnX4yp|EQCKx$=o%l8&~am`6SFR}Ic z1FIV!)03m$4q=GW>xf2*An6g-iek||6x zy%txAmHki0XBG^X7CB+)%U%)a%Xi)rj+Yk18xZ+{x-}7YTHFPu)k>=TXcL&asQkil zkzKNPSIxECXQ+tJyOD*#mDJU)HZTMdYbvph>a((lTKtL1=F2d$72d zjSYWEvU-$<2kWp-2vGuxNHDv8t{LHCj}_cIeoMK*`h zy4QE8ogwQfDbAxSr`2hd74M8Rolhznxi)S@9f!RGGP-+CSdMRWX`yIGY>Ga-*8o z=_{I*cpP$S?r7WqI^Z>}Py7^$1LPe6h&mu~wN-5v0zbLr0=7P_0*Fdo9rmBt0t1u( z>YA)<=nh5PISpVRRrD{4Xigv>9+PU_NFjm{svr9(p@dzds8GzVO%y0a*D@;fpT=qL zoM}i|qh`s<#)eMJ_6h44{(W31{vIYfL5ujis{YM^^w81uHpH*DtaUrlX314 zjHiCznNC{V? zvmyDpSnO(|6be_bv7#(01)nR-7*quiS|9ps68kX!u{@vJ{EBh6buEbUCbftGkWIDy z@G8UZ1R{{Ts}b%xK@^1_hECpz$~C3JMidvnh6?yy7h#V%B4sg%)?s?PK+@E^9x=v_ zW?$1`BYm&{R9j)RQ&!PB{h%O7TKfa~e?!tAfi^nlvj0uRC(BqY3;G5dBZuaM3Q+xc zbsjp;?4w};r-e$G%xfvV{Ix-v9MSle03^CEoJ{ceKf3)Nz5YW=_}%wwy&>GLEx5#| zk^7`BDR0R7ef(BCFL_|s?`z|KSTd-xb=mGw{$G1v^uN)mbB$bQGqMaAQ|T2^<{s0* zCbPX45$+99<`z@wHBp0Tw4z_M5!{B|F3&1q9INTS99&$HJm(gZJTPyh;YoD=Lt<2A z%Ymy1Zd&cfgl$ z?vwC;tc2r@Q`UcYj8q*Eh%LM_)OT5dw|S2unAHT8cc~g!T@>NPc6pO;xiQS&)$ zDP{D2oRj=t#pIMDZy--Xa=Z^i6uIlSJEbu7CRYt-_pPljBZDjHdx)i{KR2GhVg=qR zPtwM>MHNGr6^_$mcyTWF)fB4+tv_cmNLOL!8h%&=1Hf`*7ay#Tq$gh7(Bp*e%#a9< zjAHEFj^oX6Q_3$?cZ8 zfO@xfm@_%_J!FLyOoehA4s#}fYt5}HKo=}$!e9=P1uucNi0q?mVkz}AvM$f;d}U`; zqPxL_j4g&{bu+cA4loU{Pwb8c!C6FQ>@CC=gYYQ3kHOyEmpp(mi=(o@IUWtRicGk}sr{ibsP2=!V2>l)SYIDtjcvxuC ziv`J^kSua2dZ?c)&>Z7L0rE@_PDQybf|-$-c<99YF+1b_G_KoDKfr0n^4LW6A1w^y zm(0EH&;Om#9C}Co=*ODPa4AmEzKS_XHTK&-awJ{m%7&G%eVgfGQQZZ;B?r0SJMyTo zK!Y)RrG7+Zt1dkSF7=w0_`jh0Kfx+|Zyy!j!gq1&egOPRaW;Z)>qYgl{|k`+6Fd-v z-=8v$(ES^H-;&sR@>qQMlGbuE!&fcpC+4+MB9v(!QA7DzKV9BWWt zdyIPbIV1X!=B8&hbHw$c?YYt?r0eY4yse7c7tb3GAxBna^H|5@=5uGC2FaQIcjJnG zF1B!G(v)TW4LCD5)XODJn-za?NPPk(LZJ8k!BoFZ|6q*NezpV6Cvxn6or^kuh^g#7 zWy^W{VnG6mY4RsZ4XA6cWiG|NEHtv@f5c`o{%R2%V0*wG^%=eAcd`Wl&VdmK)5(?i@8slv56^=)*~@RdWoG?u2N8=$lxj z3KYShD^$ktQPUuwq{CO)en788tM)6TYcKftF~v)k<)?G#&T#8HKQuQD-f%W0p!PQ* zws2)L_d?XJApnAh78mX!yF)?)8~jC4a1bKsSi8nDVr&p>^;%3zE7>dQJur>7*ERTT z>VS;?=q>YN<@9{Cg(wm>FVpOADS`}Dc(jHteU1Iy(8X@}hI#)lz7IltcJ*md!-&3j zq76HO4E>4M9F~PxHmVynN)W{^sx`k+|GE=IIyLGc7}bwfEQV*EBco zc&4!ZUH&NJc3Bm~6(?g#&cBzM=5ph;da~0Wx>C@wfnLaI)3tbJ)>s3IAL;&npSZxa zuv!QqxqHOZ0E%!xoFl{!y5V<0&zT4@E%HX<>%LDj6AXKAhPqi|DC1-;pQO_5jm+JN zA0vA_&w~R(j~ui!4?o(m@tbk16iCrLH0*th;hIjS+lcRj znx`1C{jmx-9T8aBcwkQ5RS<&n@cbpoj|0^8E{*d?QRfwG5U{aR=m-=b*OaiZS_bf{EG)-)(X%2_(%MWne6Bkxr zddsOm*}&RY;)so5-Hm-!Z^7`d;y>=?+A=S04DBIV;X7D$DRRsNkq>)+EDi8x;&rFi47twh%bE;DxlB9D)hx4Ufk#LvQ#XS~Ix zt8a%d^qhPDps#i*=H{X}F?HV=zS68u2YvV@>*%YB(z~tiNsu`gN5E{a==~QB#>%6y zrMAk5*KNnxWt*R)W;KELk7*KbWvx*Tany_L3S$Y6)V^BIM-$`dnKIT@_LD|>;FgiZFF>@97F`4D=ZrAFCZKe9y=gnmAw0(90jgO{;Et$9sohK z7F4d53TbowStqr5w3uY46%$=uE`D1r+4-av#eX1bo>pXr_VShIB^AcI_1h%6bJK#Z zzMg_AG?$0@xK%uSOhT96w=(-n><=D$yd$xIN8dlF8)r4-1#K73X_&@AyaY^#)Pl*Y zCDE(54Sg#OzawK&$00;}(iE&()klq1vHmvK^zL^Z?;(s&tZ=9H^=~aCrX34+<4PFr zGZK$GCp>P)M=dPz=vQdlT+LNxsYJ_{Bk4I4#5gbI3`wRHE=BjUX##mTPGD$*i1G-nUFsU)UUrLmewA^)jAyX0>ME&$t_Z zPL6+M1s@d>6u!a4+GYOIf273Ly^SzrALc;|nif#RXQ_JfDYVU?m2_!QMHUrWxMG@z zC9lS+cjVL9LlalZyU*unn51Oeit+eSnPz|ob^@j@iU)~{oHHFEr&4lw-U3s_> z!QteoBpHUcl|*njVHT}BSuqCMBwErz(xf71gUfCTm&u1JN_QwK|Jb(aU6v`$S&oQ9 zeq6s~4z=_Qqs|(ZrDGA!2YkGAc4m57h1%E}tCWs={_B0FeE7=PyKm%HUy9NBn`1jd9n0EEe zv9q_Kc5trg7Z&J)1B5OZA2VPbI3qsK9u`r&2I`~wH~}$W@umH-_XS_w|HHsyrFrsi zkJdo-4V{Yz&f&v4Gauae_da@0!J5`tuHO(o5!02ciuX?T*2J$BFW)ifcu>({Ibj5f zQ)=hKbpnQeig2AEDYp;Ka?#Ew?r69m3s738_;HFO_$Yx|jtVRZ?m-w?HVNxNq<#m( zKq$f%CF+_+DMvn|MLb0G*X+_lAal-vz};n>ur~;aL_p5qc`Q-9E)i5}e2bS9$_xaU zH=;;iF$xr=>ku{L+cqhXXve-3jTKo`t4keGQn73FqZO7YYF8=>l-l0Ty-ItfyD}+( zyX0m~q20P0uIo`!sgR0vVPo@-^H*Js@o}gr2JAR-NMh_I)@;ROTyD7bTz+QdIGIzNX2 z{--Y@OCL_(Eh+-xuE+|QFfr6CbXgX-jP2Y4^CEyUgf43V`!SqZAq^OC$7JSPuqg_h z!qkd&;tM%u0ZaVn;G`vl(uVqJ0R6B|)FH>r;9sHXEMOiK5mVqR859Sy?Ns6Fhh3Qt zyCF2u1_lvBEg;7n;P0W!nm}UIrcPKRArvumSq{z#J)wutd^u1CqGQ9E;53Y2pHK;1 zU@GRxX=v*wU=-$w7leiz9EBpH1AHZ+7KWsm>AB{^;#NREVR1dzd8oIIz3@z}aTB9N z8H-0=aj+4argGS7@*O2yx9l2)E075DOkkmlcX5U9BvflFr={-~@pWggF z`H&|PfKGUWtEe3SQIux2G_>AZgF(aF6TAP8bYLKak=~WiQL&Ws>x^#`SY|ysgI-Yx z24CQw!9ym2C?y{LL^CGZm43<4>Kf^by>>63FD%kysuL838A8hIAoiYJ*S>L8lOr!I;8?Cp`HPb?S_frw<>Am;Q=kcYM$^-7NL7OzA;4 zJ}s^=vYmCoo9BB*WQRTG!nNw`hmw22C`lVj&RdC_)JJ?)La-=n9dvW8BBpW8BH&ts|zksm+H+ zwcIm{1!Ll^nV`z=~wh8xQ)2R(6C))9Ij~vu`-ahY7 zU(0d4Z&mi52~uNm-{9cv2eV|n6KZ9zoDfg=Vx?0)K3qU%-so`drV~q{D$ITQQMi&| z5!}s1r4P2=jNu;W+tz@0-%)imEY2GWn}G)UPS~gdnoeP~+F&KxqtNkq#~Cu60^4$* zClAhDGamyh%I;M`{lnpn*t|65pI$K>9M*`ln8)O&q;Gh&)+kQbcJaPuwY3|T%>HVT z`J(U`<~kX*8r)Dl<4j)%3P<|BM7zi_qnc|mseV0vHs>CrJ3MG((1e|@*i`4>5mKUM zqP0m$YQO4TOK&-P|2%^=|GU8yvyl{PG3P}p3E8%G((fUL8qay*N2z^>?$|G03#bm1lkjjGKYF*?cv`mhTEg=8xqQB<40E7jUU$50yzk&ady(i{7!;n_N+j)N!@vCatwO2ENF3H;N7;nZwIe8Ex$~94-4!V{6L^ zPouq0@zC?m+;p<|16`4oD}9gYS&5y4!gTQo^+>=~--k|TU*&eD7?Tx`k zDhNzieAg66=J`?jzfW}wdd|o*BT{gF=Bz!mbuZ6W(3T!PelXlB%bqU(|3Tq+W?Z{6 zyCC5~jO@_XN9h{b_b@}_`cwCjM)eMIYtPjHS8gxSTR&g?c<6^@THa|_ z$*sU&gEMEDT+DIbBdPoj_Ac~tF82YE#)j4_BLXyMEjey)j%7kqVPJ&!0Rq%}^@E77 z?Yts~Ap+b;Ya27brX4$Q#)Dzsb=`=TbcKO*`YF`%5fkETYypq3e;%stT+Osd^`ok; zp$M#@AuF=d3X+f{U$WF)vLsn%pzZns+JnB}Vd048<=ueJ$C{5%8}XL1bMV{G6FQ$w zEB^b^kFBH5LB^jSTh*7=B)s6g`IoVVr8Ot7$FjF?&{-42&Bi?2pj!P!Ry3~@t~BV# z^QA!hR!=qYi;u&^FBZ@>{UcBmzQk(jY)}i!8}){+z|>{SM)thF90)DQf9+AF&?Yi5 z+e+MqO{qon=FIXvxy_KbDh|y;j;Ko=+yT2@j^BU3=cUVwRP>gJ0s*~?76>gRW513I zAvv*xJkGn!$B%cQ9O4Di74>J_f-W9Wq#jm57GZ5Y*S86IFJnCq5|*j2I*($Wth)22 z$BFsru;-P}(&Hg&#vOKRtN*k!L0Sqcqe5=vQ6SbUzze3>&5CI*whAhdXCdc%{JAZc zN|)5OE`_#CBN`6L&FB{``P^uRsb-HK-j zMzLmSc3`cYnD7aDfS2;QuM3~L)(*nBYC&fl19Oj_DA28Ubg|qUyr7Z=jXU z0ZY>~S6~0z+mA1RY$7q=BO-EmX>O3|C@`v4e%qCYE)V-rgb#+% ziEiy9{w%6#ea*fy1+%@p*I0|--Zl&GZd+bm%qVjz?2uWZ_=FpH^JIP(*YOeQ76}y0 zgOy%^cZRxx*kLE$MGXiV@PC=uRzkS<*R=J|x?h6{s1tU;V?>9C0c1+I)jWa}Em8kC zoZ(OpC6Epmg!5tX6<)o?a`~u}NWGKFr zfDvo%mrBb)lVlg?svu%}lpXGyacq>vlZlkmrFw=@cap?Mvu&Y+>;tx%D)I36HQqA+ z^anan_QSg_#i7o;{@dE4UbefeyDTm%>ZG^WUB}h z^Qa6=b@@$IsSWPy+ZQd;+|W*!<2`cmqcAWey2ms3Wxe=mtWC|{9bB&6L3xJz*$$2_ zzA_Hqr*QIEs;+b4t);jU)XyJ(L`zkstCr6{clW!65Pk2PsruBW_-sov?yObk*x(xk z&=|gO0M!RZiC#1Eo0YWiCN-`w&cT9Mh_XFRTtJG|*N!witjTqML}`AQ8}}+dUaG@A z4yrJo_wGmtlMZ3@BypAwYmmIuTi1sPn8!2ZY56UC*6}mwI6>m=-)Duz`C~7Rk#=X0 z2>2tplw3P<`=SO?B?55TuIJx`EqWem?=MhJfnbk|4M7B3R=ZMPZG^y;59~+?*k5r> zYft7CIi~83?7Pxr46CJD>}Mink=FS>UPEqN!_m9MnCwvo|tPTV5kyZ>ezhm+9)?E1&0bN4zk zD?dDtVOEsk3{O}Ci|S9;U_XMm9!RhNl%X`)L;|WVLtt}QCvyM!P!fqc1lpwSgXTL`|CFsu+?`XS zC7d3M;k2QBo4bqlNB=1e_ax%61#PG~SBo@jhU`si{CLFq1~?4gbGKFNkPJYSH}@c# zP92Mz_Y>$K`!?rAG_5alrN=674tJkWn8QtYnKv(RLxaTebA`ZW$5sb&?y30T-K_?r zxtcWG*hld?sj@YE*O@5~7}uBfS(Y`khy)CGEUvcDJRzy?x*)w^S=0r0B6>#zcOu{Y z4h}*9zweSpd@}61Mo2l$gWw|Ik@F_$!bz(;hzo2M1YP$?kqG|EUA(~@C?n`+AjG!_ zH}~mic?cS0)d*e4D4Zx~f{3vQZ7N-#5zGmydmkIqZ=Fhz99T-6Yu1W;wQ z>mujE|BQ#}{lof$-flTMh9O)fPq;l~h`10B8DFW>eR2A42J=4@>47 zrFnwJ57ft+3+6k&Rp0>^(Lpdyj&+9q-{e%*63U{}#l*CL*1GV`6QX$`L(D|LT-zIv z3Hr$DowuCme)!n$%%pr{S^X~}5`2Q#RFx4Dc)$oVXl5|S#l{>$Mj^I9C?qTv7;o3sofnqL4PqfwAM1Us+>mStHju?!%8jO zap-(e(;1{_x0PrAsn1qymKyICx5z8$-O}B=^bj{;rZ?>Y=+mz7CW%^t2fvIF;QDAo zycieX>U~bT($;)Nvb2^l^ZzlI6_R{CJ^N7N8q98J?83k;u9r*=Y6&bA?U92jebWS} zCi{CP1d8vP;JXS58V#s&{En|^SMX!NbL^i3m{I@!RxukIMr0i%ZvM4Yl80MJX+6{o ziqp02kYQiju9o~POxJ)sA*3d>1j(Z+rEbYdoy2{Ex`#%WNm%rvn9*VF`Y^|!fxJv! z^pF3?sYAnK;HTD8m!?O=L4^B%qC*TpdYSc3S4hhH-jv>*8EC80MIlz*vyhz*=(oqk z<>->hk3wxxIKrK4%O&vitF zDB0qrlNow@b4=?0P^(cJ#FrI_(dC;BKYS}Wa=d=yKs{zm;W z?cLa}VuydB2S9}XUNCtBfYEq`-zIovCWY?3T^Sq7{cP7v+HGWetS+$2?o zWtXM5;#TkSso{^=q5JG(F|g>HN}^#$*h4vU#omU(KHpJY7|rfHnSA=i+oL}(6n}@= zT0Ej}9L=$Z_y85(NHtajV0mY2Bfo?E0!W1i|3lG+-^j-P*-2m`kfoi~AnH<>4-Ul4^igBcPOu%Re!ffAVs9d*bpWcK#a9Pwj-VDB?SexH+5@ z-U#O1Fb;=vID&ZT(oMs3NryXi(}>*i!@3Nt(brnC*D?}|NXs)l@?6U^B?Vg+1!zx1 zT>XQ0P*^1bk4*=t|5@t)Wc5E+{a>yA$AL@YV3e*XYN=Dvk9*k0)B|P_W8Q$pt5JZt z1Tpc{2Do!~G+<6;8kEutfahaC=#Lhvu>kG|B;x@b2jI>CMj@T?0B$DW1OV#*{0N9Q zPU5XH>$&DfaX6a8F&vKNa2$u@Ih?@Z#vDSu)=bd8hc^K+gN;rt6Xj`=JWZCTP337b zd72_mo6FM{^0XyBVH>^GyLK3fDKUhEQ%9YQSFV z?Pdn-t=>*CU>^l;Zop~8@A8;GMZR5plD>&odZacvlU(wqO&iIPn0l?LBbT)QmCHgya_IGa+Id(LkpCteC z4!u3EPVsN2q}eYxob@;QjH@jdb&mGT&XAm#VgyxCXpAU`tsQK*BdlURfXei32DoB< zNNIn3#Jm7pO>q0?+;?)S@||;4Io9honkP+vF#rC@Hy79SB**@-)K+5@E89lnHijZ?2rywqMrV8lUi2N=|&xV0rxnR3;!Di4SxWva-!Djs6Tt=5rNINA!3&2}!Vpx~A zt31Ci?I2c^ZeeT3*Xux!V{ZyjO)4-+{inB)u46Y);}Znj9l*5c{5=5dEpPV(up5AI z^+3yBY&3D=$h8UC4I4IShiRz@L^6$K^iSsTpI#X~L(6Co_rMq#Ed^)fiMf^mwHryx z?$qT&=HSMiJ(G0f&R!UDdP-7u<8XHl_uz0(4)@{^=~15k#_7`?nGnBqX=Z@zh`m+#RlaY3M|woA^-$X#`s-t%&z;WvXK+SR`&zGk zQJ)2MoRR7l*kl_zBSmA*^;{3@tug03?>J~WF?t4bXgY@oUt@MCOqWu^4uu&SqH-#I zzkyTQV6`fJUB;!I>ibY28}RxBv^JQExd7rkEEuBOG)@L1XJ1lMETjVUtJP3@7iDB? z=7w^1{_N{*$Owuvq*Pyt^weN8grrG=u^I;PY)dd+lK}qhE4s^?XR|&l1*YyRP2G;7 z6y(pm0{JtLf9#3I_2ds9GS*xk0#-YEh-wFRAyz!T4ks>}w%v8lUVh zy>298^}73;UiT$`uWOB1A#SwE_fNJvvc|J22iT=UHFF@BE{{u>=P2F6u8yp40Ky%E ztz)ZH&)B$R7|azc^0tu!sEr)RZQ}qA5w=QnfG*L2rbJNx^8@zYnjnc|%V7{{GyEz! z*XkS2jKlTwW7I#0jk3{0te_9q(k<7Srd}IuyqN9jc4PLYGXbY=Ybrgq3bJ!qyl-5%0{gyzRsl=hvQCbFR!zH*z zJz6s}Lb2rf96rI>E@z`q&!%=6=5|@C{(JL(Iu*nntu0Nub=?c>6XV3VcKv3>IX2Tp$`Z-jA*iUF!~Xl*IO zAzB!Wl9VM<GA@q2#Bg%q!5*G z0oB1Ls|FT0<_M#il1LQkNn`7=&Co#KsWesCi|_B7rt%TvJmBsLOtUyWkPfVs6i|kG zL<%TJs{bgOR+PqpEIXW7svS;Pj&&ktKYMv#ILksEC4&N4!$9NF#9PP@*m%=@e6jPi zk2g=76&NOUOIH@+%kprfER14=B`>5bu36Qukl2)8mao{9&$%oxlw6pr6|_aGhy1M$FNC)0CXF!d?SYb>M1N-EoXu$w3pZv3Jaju%2oAlEeq+ON6x@37|2 zW_ic;;o5L%BvW1*&V+G{ADCy30Hl6_L~+Wsm3pa@$&5NBNu&K!Ny)V(Y0!UKk_P>! zV;F5Y1H*!rGm|{;4^#3pBF65tjl4GC86G3}sh(AQ$i1GThS?Vul{a)Gho^CPI)`U)h*`ou{oI^Bz18Z|!K^!38_L$I zRh#b9PQk8z2)u<6^Ql5hX_NMV(evrnn={OtB;|$PG`^PMb)R710hO=4=`MpzN9-*59^T(B#JQNOii!C*6di(j^!BQKhsfGlr9z-#~-E{8d-8Vl36N37urNbq3=z#StH4_sT4 zS~La?i*>5(i6y~(^vL3#i+oeQMQ_pKB9@O&}SbBb-t4LNv7kX5FWQ?f% zZmjaVIaGca$g#V&2T=4b2yyK;XDp6;PAqvjN4}A==k$|I{tizj-R7-{9Lb& zpJ!?E3p_ghLZ2o#dhQ~>p1YWHd9g#!%}43IM2q!BBG#A43(<3zuCsr4K@!?zt0gCe=aQY7%)IF1#GSC4d|p#2Eoc-qq=9Y*9~fK!ijT%Imu zL9gO2Zfyepf|n|~)??x6GI%-;o-T){2pD9hJAChIloj_ga~K$~*=)ZTWW7 zxJ~!na);IAp%Gv=+Hxmn;C2r0;1Kat%5pAcxucXDjd4umP$`9Bz{483_vmldneP9A zw;!4kx+`fG?#Jt?A)ft(^WB*Oo(1lat+~K^PcKdRw%nccOd;Jx@^UwG;VusE*19{4 zix58FqegcVWu_+_cZa9O)fqY3jv9E8x4N(p|F9|snsLiLoGQG4u_eH?xCBqCn9#_r z`SyD$)Ax}zaKFwg-C1wh5FXaun910$ud#tkcm2!i9IiH zOa8rFxcfNd>>_VB4fyw{-K*QdeKwQfn@l-&leIL4lY07Y!nardH)b+>j4gd zpk_j_8So)euQi_ro8nylxTE}&vHX{~%8!nsCc*n2*E|4Yua3+*U=dlWVm{iy! zRJ)G~pF)9of&Z32^fr?)iw2r(k8~g!XkR_b?0T5PM>wQhyX*F0UAK?eb^9pSZJZu+ z>UOmj=5T2^wbK|qS@IY$>v3Y%6Vw!*Op;;zlqF+Rd~E`v!5PS|#YOh*Q@V}i!`z{@ z7uPkv0?~Cozw&s}J->p<+w&_}Ax|bdnd5lM(`RiBB6n)ADZyf!K(R%gLi-=4j-kzi zk8!;{&fyarKFQ%zNj*=oXO13xEa|mjAr8L{`-HA@h|scOpGxM=IphVlQ)%pra}J?! zCYY!R;haEGx))7kr`EtU!N+5GQO<%QV9&nEpgv0(f*@w3TXn;4P;n|N2Ui91YF+r;n; z-*!k0HZgu=CGN3_jV;=7JpCx-D4e#aSz!5>>7Ts&okH4EO(>SybgW7NDMLJoglKft z@*JSEOQ1jZtQuCaa94R&4QUO3FVxAYHSH}p)$xM=G;Rl&^hFeANxs>*jny- zUN^ZHlCs=&rmSy~t5S;TCDL>+C-uD1f`E4|nC%DhiYgkYC=#EJdy)1(C_j~hC>y>|&zBnwcc`(-d$Sz$cJ$2$qa2L5&~2N% z$Siz`!IR%*elGaS2=u*Lrm&fb4u(L z&6HP@Je+wg$p^$18>y7MHH|TQR1ed9fSguyPOCjRP3;3+_pxJegDN)rzCklZTr2xn zzXr17ut1ky*qMW`P|NFN`f2bDF5BxIB782vuwfNKvtjiOQ4r5^3`wf?H>uj+qH2Ge zs(lF?Doc%BaiOQ}x$KHJeU<^1GM>5;Wl7u}6f+RGL!-)khbnVLm)h_$yA7{^I$NI8 zhTq9)!x%U5ydU$tpM&RTBG1QMgNRSm3!kK_9M+3-PHc=6`;m`6bI4tGc-hj?W!@ob3ueT&%p zdO2)M!W=5=xIc5Wf5fvvd#+w?z%p!}(+|9B^#f)G=RM85_cilY`a6U=`nF*ppWJzm z>*0M4S9%rDDsFv^bt6>HFB@a+N{q!qDE>qv*tm`LMdSl#!YK0Gi)101%%Q8s1hh}% z<83`WfH^gQWDg7;kUa<+=aU}Zm=6j-*mxP?1~DCkjh9>cT5s-JfO7kJJ93K|J(@zD zCIXnSs-ngG4&xle@9d7iU}C9ZBLd`jE_MAF+|6ZuJJ|niyx#lq9b@#_t5u@*jb-)$ zHG~h7JZ^yFYy11=y^5n~Gl4r(*yjpII>()@ezcN+bl7<#4q@WMdZc>?BRstO0Iekr zVM5sv7l&p=a*v{UFD$mlh#%O-r-i5J4!bzl%35Sp{y-Life!U^BlWQtyQ}d77H>@E z8nXfP1Ff&|tigvGqPAiz;*ZE8E`)}?8lrISkN(J3uMwe@lH6%ZGKfnu$ZJ$!+rJ%4 z@?twB`G`xh+Glcqq}%>#qb76q#|`FW2Rj&euWMS>GE$t!#Mf9wZu!_&1R;7CCalWv z8V*19Wqgg!_{S#WCX!Dml273yUk=FW#V2+SKK1bX(J|Io=>RiU8sZ--J?> zjI`Kb_<{_EwUo`TAcBQXiZ6*`E%l{e={__RIJ*Oz0>0J5F4SWaea#zp-F%s2XROV! zGcZB#^zd5iGmA*r_mXK*Ddu3xA=)pXXooLxx2P|ewO?|$mcy@-dfsX4oc{LTdS+)E5F_6*B&tTX!+XKj9Aunp0d7a`bAHh-iQmnk)zp?yBfX!RBvtUkj%J@3P=bPXerkhZ@4*Fb}%iZ=}mLCHdBA_;|4iCpPKC zR@qozGRUu;ZGNShUuj3ZuXflutJ_~TgSbyu@g9hKh`$xK97=#~7ZgY1(`7S$_W*6g zhtu`xVahUSfqBuBG4V+1GXNR@P;XuY;AH?v=hS3B8>{;I`DiC#Dyg%8!VAR}eljrrjLXj0uHsT`zSMi^8`e3T8R%J8C}P zlj{5dYD}rJii*_QF}YJ;4&p!ub6>Rc1U~wY=f1vA=FENlU~5}L5X7&Lu|4OzHSc$E7{o%<9R~QUfrb8&9QxB|q9m9xm1Y8#!6QZ({y8LxL5d)KB)vDMX}Udaug;BZmlI zYR-E8DAp;xvyLRG!VTlX4f8LotS7rCg8SO7emfX$NUK-*rQy>2)E|(+->BpNowD-> z3FMzi8bq&8($=mG1UJ1xt+6Gq3djUhtt-s?HGflSDRfz^C{`RRiFFHS8p61IQXWok zSr+zfs;uWtm2jbl-dGtgN%v+5_HcGfmok)u9i6NCsYr0C<=$15WntQO87+%u)IV># z%tTs$1uo`iHp$mX_vEB0*>Jqr#Pdlz@kDhzh3erKcqpiiw_b^DaG)Z{6v4XOpNfa- z{m<~e^(PWuz2|e+L+HAZU|?>b@16AAi}z5h3&L3gT371L>q@b)O8Zrf<#i<}u31=m zznz68T33n&RIB215~08^pbY#z>?xihK|YLuh8xtq503|2e$T;^FoSfAgIi0P7&=_N zu9&4|#gYPcjh~4W#)tJwZxSqMT5O3)uz*KKV#-h3KFl%nyse`!ewV!#-g*33j<#cH~U!_&oZFW%kVorQ=Kx zJB^JPt#Vo3i1iWW*xe(z8yVrSyStCgwYz(a&9%GBP*{F)b@R%WgLK7~TVTOpcLU(H zyD^(}6q22lGv*n|c^>I7Ig*%{>Omdevk=5}etS&YP_DkK4aL)Wyl7H@vfWZxg?(cY zc6u$vRn#|@R8im9t%|limsV*TeUJYnUfOoiPUQ5GQXm=rQiYkW=y*uWr^|c7DtBQn z9>?2722W_M;4|K>&Bg6}4>?blD|yGFL=DnMj23M-!DkXd%LfOifdy7km9k1H;INRx zVh)Qq?8adUhs-drB@fHd?+_X4_rfaH?+}eWqKD}HBl;5k6{KbDBqRT7U?kCSE;P}yVH)L;U1(!< z+{WstjeW~)48q2NqyttkZiV1Fm_K|n*bE6#L}dhEYz;|rynzUas$nebgxk>FxjfLSJtD-fXdgffcchpfcR!`>jU=b~odUlTHDzlF&4;d{tYjp@(w6mve5fUPl1}Kyc3F**Bbz~sn6pav5kC_-@6jOZ6Xg5gkcG({qWh^4MrOl9 zOBIy$Ntcl~)?wt072YM7S4j>rp4)=Wy}%0TrL2(N+6tkqVpuc1&>rdKZ907b+*b?b z9B2fCW1)qFhc+EX4~z#{{v6474NxLgtcWkY)CY+1^ms|I8D65i6c9(!W8o}&`v-{4 z`Qd(n;XBb7NoFuM8%x9JF)UVNyka$(STmJUZP)>_QK7O=?KKY_QJ`Nue9vC-tRa3i zHNd`5>Mwnb3>JcrK<^_@c;?J`mjr$)+1+ZaOt_5Y9FKKaKU<;}-t;4>KwAR6ee!98#*Ufc6m1A~#Am?U0=VrVkH@kF_8{==`V4RDDI7xaZ+5Q#)&7PN< z#^(B47-;qHFrvOVKSvMm3;Y{o`kJ~~y3^5T4scRRU$xg$DG4+=z%O3QVCv%ua}8jI zRM~4Qb3Bw%XLG#did7SsRTCVn+M^Rz(fsE$pt{YNKy8=)KknWHzK!Dg1DAKDU7fbp zD{E!hmK+i%!txQzAvkxqDWwzw0Vx4;P>zIxQVDt>Y-kI#Pza^*FD)Slg!{hQaD>uA zTcDgtxUX>EH?-U&|M%X^?5?DB?37=Bpa1`#PpqBuy*J;PdGls=XU2B6+!)qJ+Snj9 zmRIi>{%qq<3V+6GtYgX>Yny1SbRgQ;@}|pd{lm+~I$1!*4=|&qIu4o0=6iS9hGq(* z=mZ&l8d}*0?PZ^XPT_b>aX3Wguwn4BUF&$nv>FQ}lFSyl(vDz?V>FIG$^Sd%XGfc% zi+vP^@TB6_H>4h#huXjQ66(n5!!7y@c1Qc*Oy`@m^OiD|mwc+z2av;cs_Ju`aWeeG zWOILk{T5!5!MuXEJ?^s3Z9bCvBqm^6S9Uae=S+L=+|lZtr&jh(vwt7O&doL{OtVvH zw04L{|#HbceKIMcKsUagOCnW8#HDP;f~&R-g*7pqQc8H z$&Tt`Iv{m0w(icjef{4IGEe2VazIs1<5fA$p(+;-Q=D3aL z&mMta^*P<$0-*7ZlaQV&*l13%zoR~B?2T4`?3syId;&_~_S*Feg-qZ@pTUbh!=dOW z4PW$3T)fMl=_Z<%Jfb{@4lvYI(nCw-Wli}G`%y?d%Nk~g&3LMUD2zYFTA^rC%{ z=-q63zaK9_A|T>u*N*=x_HZ` zJ-}wu;@Mzxs_%**l{hO-cSUqrcSYbzCEXE0+VsFUza!#a9HkD5m){ZbPb}?jytKPH zl=e3xvPzd$Sf$DZwn1nX8-xyIy7wU7b7t}9f&6)pSzf1i)w3Ljodbn7IjB;9T2(rm zSLyD&kh?n+a@jD2+}646vrV~Ko%?AHJKL=DJ?(bRY^%;!JIrHdm$$})x#)Xv(f4o= z{SPCt1&5OTU`N>xc9#9%ZOcxy?sWQG?~u4PF%OyF?PYo4_T+`z)1h#yhAEu2I)FT+ z2qRh%>Sm!J;vxK*72|aE8sQ<1!*jNJc&2{&M|d7RM8C{Yzhs{SE7p9_I@nyC0F9M{ zC*!6ki6cyD0yQU2uXK43%?;*a(8RK!L*sOV1s(=H%ncS+r=Rgde6I`8@5Q0t%jxsq z;cb8%hjR`ehwXEQx#pZ?r?Jkq;(9@I@F|fs7Y(Goz|fit%DtCdCYSbtQyV5 z%jUdu;`TZ3T+0{ZOsyF((mMiZz3M6d7Tn0O?L9fa?R({UsBQ!4on+OT`tg_gopqAe zU>|cH7N;Z8!8?V{{>I`Mxquq&z89-$Z(dD%J5ZezIH`NTgPqlBT91w*8tz)<@=69`ED4dd~>*!?`F3x z*1A(S?_9Q@Wj<2@3)tX8Lck2@2#(2o{#?MH3;C1cZM$gZi-BfAoUe#2jPqSIN5svg zF(}JEye#`TELhw=Oj)ifKd$$bIK8z$g|sL2_&ZQ9oQk3yZO)w=tzX znp|vqLJ(tI?CZTzT9#^(?^d~pFc^I~A2f(r-*9jI@jc=`!1qm8#XECx zJT1F;B~aM=0`V5M@_5>S+M)1o!=M$fWDQr`^)RM~y<4yy;fpGSQe~vlN-+$Sd-h=- znWmPT!JBI^ALK8aVd@!{igS_xVQ|9 zyqCw>Wmw#MMVwuR#l2U?*=1Np>K@bi@))_+|?;CHCXZX+Nir=7(wY zw(HS0?OgU1@P$lyU&NI6THft0LIM*jIcSb;^U?DTIE79h+HHFk+tPk$i-zN@+D;U1_SDtz8#{Fkf@G_ymw8R` zm$TQfn!1+N)ODB`?*+Ra{p7lVT%gA~ylliy*F^HKBN2?f(JAqpzU?As#tW~bP9 zMeHA)V&50Be=_A;M=n&8pWrv6A7cvi{mb-Ws#_>kLLz;{);7~n$BRIhMEp|67_zPc z(O^2HO5PRhOlTt;^h(e$-ct!?Keul`bX9&sbB$;p*NXOWoi!Vg=r}6yr#{^o?=ypB zH&{MMd!yxp26B_-g9dW5<%0(DN6QBd^^@T%pamej)ap4fDx%Kh#6_7vUJL~+~ z%u?@fFZCT(sXupEiy&GPxw1;BePv~NkeB5^UX}w{SvK>s;IpU>Qx>p0kWBv9eAoAb z!nUY!?Z@?gw5R})Q~!ZFlsWIgHp`s%q5;92_r>uuV{-m8j-MHm^L}tPGv@gJ|@eyt(K4h<=hj}l1#B66y z>x>V@oz@v27QF{EZ|8lo8|=D^LN>;o-fs~Un|Rxt&1-kIL+wU~X`7b$w1J_rkyRtn zc8>J0NIVdQKR5E{rnq>|Q~geBgFt0t+-cElQzceb7krc#^I%@ggB^;Q7^ax0Cs3wi zNl!d#>Iu*Iov68r5f47SAjEJV+eF-$tFpNT3Qp5;~Ajt%|cUzCkUD zN?{f1FqyGr-u>RS_yuFwe}}@ zvwng<$#2_^`-EuHPsYtv9X`)q?A*t_xYqlWU3$FGy#HytV*DQV`e)*{^)Cu}*3<)W z)B|xA^)lX1^&Bt!9A5Z24u$U-rto+u3@_%>{P_%jKFgoa*>vH)ynkDZUQY=yo)-4# zGjYD?^{iu$f3C8}Z?0S{q?1|*2tGp83e>RJV4C-D<|UuYOFq}3p!PA>*?y%}`WNE#j&3K17Xi#rCCl{1azpi{ z3Pbg7gym2U%b^ai%p6v^h(3HA>6RDFK75c}x4dBW;ZR@YYP!p`Pmd=WFPir0izc;C z>~A?=w5UyXxYM1{V(&>`GHJbJ(kgpn`ci!8H>S4l*CY! z?VmC)-Mu80UJ=f&K;gOzti8;(9F)e*a|5wgZNwN>$GOVBk6^ipxs3vG>4?$o*sq9q z`$o4{?THNLuSmovS+qpDRw8!&$csB)v7DH>>VE6jc*i@Ox3I&VzAYVgOdi_4f33p4 z&r_YhX4dpvdmDVs)@mx-V1h-rSKM!XpZKQYt2yH3{_Buz0DlU{O_%vO<8NRX{uE*> zMcA7dhCjCZt=}@ktaHoXHp8s@t=}=jth3DDHN&iXwcj(tvS!%(rhFFP4@~)5P5C~= zun)`AeS~2jm4|(7hFLOyVuo2V|H}-sWd64qX36}i8D`1+nJJ6K<8uuAyj+$q%rGn6 zmu8qH%U5QYCCk_L>czT!P~vr)S}E%G8_f4jInON^wxv95s~I-tGeO_gB*GruTVPyc zhIN?fBs1)Jv;D{zwzZsx+YGbH>cKE%WJ{-*VOBa7!!U8-M3aZt4BOXi13okCU^C2* zVQP8afEi}x4VqzA-cXak&yuAU!)nWAuEVgp^02TOX64n)Fsp9sO?p;39mDi;dJ!|s zO4ne9S@fc2nAKJclZTZqhGDUC9*t(0#UpNpS$UhxFpEdCiItVE1;bj(c_hqqR^B9r zCCk&bHt~g_NF+78uk3Z@s3tN~c4(qm+2|(rx^hgD^)1jZT=qL?O*`XId@n({%idie zp_o6tkK-o@bRwCSPT*zeThZ)9e(5-R*J5U5n+_D_uQXrc*vye@aoubIA1oG>ubUm* zC$_<$M6|_#KS%Q?mB_X}h3UxF#DskC#$AJ$-a1cgOjFt5y-<=i18qEj(FbB#4! zn5FOsKw}_p-_lBW4m^EO>&~ zLkDN6O8zQ#Inx}QoGb~R3f8_SNy{_s<8sxs?@A$b4_|S;Z2Q1aJa;WzW$MaQlTDu< z--=(Iob!F4(zfC1W+=kXA^6l@Orx~NQ$OspY})T>Iy$7% zG!&|YG0MhOQfWFmm>;~%VPq*MHJnx#4AGf8`I^b=Vm?*88>di{krt&m2e{VsPqF;7 z&_AuhKb`!u_7wgZ751rl^`Is1R3sL8L&rXz@8MqvhRiNhW>r^m|&LxlV-dYL}qhbB@ecDME@W69;DENSP1p zX@5j%1NOADs?)Ol7<9*c={q1rhtvQzG>Yn%N+>Fw;iE#DR{kf>@=9&-5PRru{siJi zZ=0Gd^tO7Fd-OK>l6}2V&7Iu8H>`PD@#2zRRZ9IB>jPxzZBmoF^hUkOT(9O!j_nOX z$^&~9&6CV^g;GDY3n-;d#RhR8)qd*aKHSsdgV>!>L8>72&a6RTo)Wg?{NGsiSxqi+ z=ZJaM6i@MYq&S;;5Ya86yUUaM8RnEqh=Z|^J(I~F%qL)YI7_>LVYN<3cM!#}--B(m z%CP4ByZk}#^IL^{rMrLDSe6*z6sfIu2NGcB!pfw?e&m$gBFHgqS_CP-(>r&*sf1 zY7mOF6IsTBJaXo0mX>>S$>h8v3>khG8o7Cr2&Eii-=fRqcGc-FZxXy?r3BUF#`deC ziG|!Vf7>qlo&a5_O$S83_P92nZg=51J++=dx-}Y1>$Pt0GPT$1QM{{B`O#azS~c?~ zb=_K}=UM2`Ubh-uO#w+G^9ckrxNF_&G9!B~Y3F^6>_IHKnt9y_q$6&XN8smSgFF(l zzJavlGFl-NB<_QR*+I8Dn9GJ_)o0{Z`;3JlA;L?w9&jO98R;2WV<9G8E#lvRe&}_5 z1NyKC{g7+MA5m`(lakhbz&LL92vzf`#>%t@9?_LdlyK%HR9tM(5TR@wcn2c7A?bM? zZGcy^Nu`!2PKM`rv&KpS4(Plf2tFvKj;DTx<4P>6D^ern1TB!PV=hmWRe~Ec3&LF= zOC=l>RPV-BL`(Bzo^2+5s{5mQFkP$pwV)PUr3H=bMjc$5JM%73n!)oegD^<3Ob?`W zN(z5QZW*S}QTpikH#L7$3&2o_qmc?O!RU@?D7~B1#Ka2$(M~Q_r&kLZSv{0i;F;4y zrnE08z7?t#60$0p*L+4c>+BA?JvQ&^3 zvg;r%qz6qcqy>jlLq_IOyBac>8k(mEBoRP~HNUY?3(VL3nxEBz=3Sxr2B#gib?a7E z4H)2OHN)a^g8;r~%4jeZd>znvXD$WM8}vFu5BoZOTAdco>UHUm4~8PGE~bU&fL9C0 z=IG&VgQan>v_ZXI(&`ylIs>a7GSwqk(K4{2Hn5^)U`6!?3#^9!6s$-ESUP|enXl`b z&cV`FX!T`aL4eM|qBsO=(ra6`ZuJ>cHp4@!gOb!S6IF>WTc+2tCa2YM6{^)`4@!>) zz7v?0I)S7jTaJRX+EqX!2awi9$3Mlx+%pyf?bJ`8|_o&`d)(l!~&7ehZwkp1P_=>;TvErL5 zDn1Ss-!xy3YjIxju@ze5;Iw0{iidzWuXu`sitl^;>#bYcYw&Yc*E(1D9yY$aT(8uG zKdIsFx8?AcGP!ZQ-Vs7hL_Jm`<_CC2&1x``=AuQ{20Cjl3CpT(E=f4JTH?-Z|6DVi zRAJA4iuO_aM&v>GAI?g4xEVup)?QV}#xg^r z;pyj?1dT2^nyxVx2)2hXN{3kK*c`5r&Ed!tXW{vKS$R*ap1RSz=M0Ckk3aH1DEQDq zHE)klSRe12GBE^DimnDJ#^@NV!g)nXr7UAhf#iwLxQNxAUF`Y)2lX|-vc5Jh*vJ@1 z`{&^!&ZpSFCee9$SV6EZ4l~P5sfk{9M;VrtAWAGPNQn=VW_e{q?TGPu|D`j=P30J$ zF(k&BDI)~9g;C@P(44znu;IP%f2r(E+bX-&-z7Sy8`poL^7xpX^o>We04=@oe)dfI z#^P6z=#)Ea+Q}A_=lCUst-(;K6}Eta#cdaB2s`lgiUwTPh)OiP_?3pPI$3pRl}&7# z;K{tMw%0}%LoTJ=Z?yZP_#XpAVC5QBp-HS!{isQ-Q56XajG;BE6Pjp^3jMT3RbU8E zeB~OI>UtGg@sDwwaEoz5_qMvl@|o_lxnT<7PB&{{E*n`{a}RbX_zO)tv2Znp;cfQr z%nNQPvF3%bM)Tp1KbqXK+JKz15ZuUkf$biY9>#Oc!D3&_`uo|fy6UR?$w&6hlyuctEVZq z=J#rTpVFr5t2OxVQ#7ADINX+EFn&K_rA6tiJ4g1N>AEqB^)rO3{QdQ;50 zQdURx2$;dD9s%Z&LA`-0j676f@C#8st$~RhF)J*hA(3gvfFY?+O9I0YYYOH_*d%s} z>K@IlE9nrl4P{VQG!IUq$P?{;M}oS}X`YR%G>@l8Ho(9$>;4{1?dV1lt=Jw16G!MC zL-WMuVr~e~JY{Y2*}kK{0sE<4f*zi_fa@8z>)++;vrC#>W$Uv)vi#K7ixvJ8$ZxI3 zo><}kG5IBPeYPL{4gJ5wN3xbLPq&HX>Hf1wH}MtMpP(nw|5Nt(8GDpa2_<*UpABi` zVdzobo{$q*mIvQ9nqTjVP-CyFmg~}yo>2Vn7 zK9sVdYd_{tddGtzIgKfj(@5RmZ|fGEzs`_StB@=&S(FmA^FV_oS17KXKg(&cx-cZM zzPpI%{~CU$eo}*j0M!G@VXOq*2MT(L8M2YIKj}3_H1iUB(tLZZ=*jVTZ~xZ?ykcP1bwMUBoy|4U{dAH&9Wb*@pO#9bIV~h2N3*;u6xF zlZ@p0f8At#LvpRPo=ya5J^c*UfsijQp5v1i&wpiwOC?OSfCZ)gNOJdZ`FG*Z9Dk1G z&jZWD8HvxFj7~rxL>eJ#7EjI8BrFVy4Ge_ncoX14NkehpL_6UAAj!8 zp7ioUF#nawJaxJCZVC4%%tBi&;PIzNN5O1xdzUG_UfHYCP{mfDJ(;&uV_|?$u66f3 z)&66!-_B%pnP-pV+2c5lbraAQ=g_2gmr59&j2+=;4MN#Oigt6&NfL`nEMx?v5|T^g z7*(ls97Bbg4Mj!A-^|}71YLDat{R-1;~Hb>zrZWeeKXJEPPVe39KA4DINwe|&Ju-o zSEXEIrG!k?$md<=*~tkR#A9Xwt7ZrYR|F&~{5Bu%DROhdc)!4*ip%wrinaEr9$;o_ zEUO2hT4P``2NdrLHCe~khJ%?8sdAe$uS%tp30h`IFkkC^z^~gA1M_GS56Max(g-2r zc*qTI42eTX0}q++!;mHjk(f(Jy4<#doQI_+Sv@oaB(b&b8z)$5zjIT)XM zRQLCN0nvah*p}YtY64RWXFe8aYZ}1K*Q!mlA;Bw9H@KjUS1>Serk;aFwkMg%qVyWC zfsCI$sYJ*{_eNKlT(ofWOx*MtZPOENdP|$$+@?3R>2bYL^MuleN~Mz^tM7MuQfpMA zE41XYW3tCUTwF1PC$2RqG2v;_nw3W3Y1UelxbU=S38hJR5^Ql_=~<%zPK~QHsK_|{ z#if3S7yKUYlA zeGO3NV7dYF{7&gN6sBNEI!snsSUTzHt@b#wioMZ7BzoRC(l1yh&Wpt(T2;%fso-CCP3 zx)LY2O>CU@CBt(xclNvv55yQN#asek(-B8}O$Yg!A@;luzZe^>(NH9M0TNB4M7>Bo zRYBb$r;XJnLFG=VQ42Henyk|TRTJWtrE@gaM#80Jb?mBf3lZ3j z1)ZrgoBxf1gL9ao^4YW-N$TGQ(#N)l@#6u z>Xw-eewh}j4ji z`BeV!<_1^8Pe6tAMy@9&S>c{6%xJTzKjGWa`+2bDp(#BO{)g+oLwJ1tf1j#UI)zM- zQ{i{|8~DDc^mA}ddJZ?uGxRifbn0Kw>k|8!XuZv!?qQ_lK|gn}hkI}}cPOi6BO9)P zS_w-q0*7T!bo>MDKbGA+itG;8z$Dkxqqsd`DJ(;nEJHv$u4%Qyyzi&Dru8N`&N)bR zNjQiF(_vgdD*khdOIeF=!10APCCR)2Lmb4ZE9Cx%lcbE*74H5=gwxZ%0i7^7>T2J8 zU|47>%g411y>_CMCCsjSnH%%#KITROpoV>#H>P}K1`dvb** z)Z97j!JR!(e5J@+jBv4sSJaVLt0iLs+d}#}4JwExqLy{Vh^7n?$hd4 z`;1%&SJa4jMj?=d9{l}Vc&# z>V*nZyt#}Ae$sCA=^m&y&|Epqle!*j-{;HuR7e3oX*c?GMS@UG0p+48ER9#mdUFPr z+y}{WWI|Sn;<1Zj6NJZta8_C{9fuU0rx>b`_LORL+IUcB^%2!zanPzhe36(BGm&;{!ums{wYm?SMvoMOqYygd){CxFe-pX|yAP*p2-0zGfTRPN_A#R2=$-;X^AN=e-*%92E>i-D5&0THMfa}v%z zz+jY1Hqlz~jcU(3T&!ha0Q=KvUOW&CzsA7inwnUsd2Qb^X{yJEO)MNN z3ju$Q2L$Y~0gM=bHKq#KainU61uzZC2Ce!2atDF61 zxUOYvtSUlv@pyhxUa`{vIzkYzS*J4x{FirtUf-sUNjgljZc%)Q!{L|sRb+P<$*Kje z|3_x&FusZGmmQ;gftEnomd!VEJ)%(^IrjY8zbMldHNUHq+;akSuf1c;5Ye*VeK8mX z)B=^}9`>jUtk|WqJ1PfCj>oSbS6R!P%jsI}41c&)#mD#G%3gp-Ugp9h-AF8IF7D+~ z5XvRJI83cZyd>G$dcW6Reug=u{RfGZh7)uq8b!iWS9|dC)w;s3-1vG84$e%jG=i}6 z>*=N=fyR!>7r)!Am-PW3*})Kcq8wg;z~xxPH>-x*Z|l_SECY1ea^ZAzg@g4$DpXdL zH(%x|3AR5Vn^J&de6p+!HJ=n`HTp-)>i6ZKTUE<=-R}Jodb@wk)wduD2;OB)1+AJl zgnGDgwuDs|HEJm3NHRIT^NCvrJ|L*!m)%~;mMv0L2sRPi?4GF^A#v%hFBU%i{L^>L z2oXy^81KUTxyr<)ly8P&UA1Wa=d{!(D`MVUOI~Cnfqb~SUDw{k^h!`+v29|F$jn9O z^;%4lz0^PPC!I3;kY!Z=r{R@i2a%uE=me#WpL21Hhw%k+^3@d)e#yqr%IM<^+Q9o- z5Q)C+Tey3w`q8B;Si!<3F-{)TzF_5RgFLwYs?Q8Vyxn5&a}8L32EwHF)r<_I-sD6| zJjo5!@H-XIGF_hg{*G1sGN0y~6ui8{>uBnwv_BeKc1@@Lic$0p=v=aZrT8p_@|1J~ zlQT>SaK3xTL8P;k9YcLn_`Rm+q&#kM)E7N85VDorVba$`?y`FAL^5NKvsN55xK^`& z3e$l^xsmw27NWQG=Kf|yM_mbO*NaA|oh;Ivx@rD5o)p?J#ia16eAsRm?C7-<)FZkx zxX_D1(Q*kkJU%(;ZCMQ(+v~TfTgyGkc)XZC=dvXC6GR;zdyIXOqeDAaLy`IQP5!m7 zAJGd|sSv2-$_Qd`jpN&Bs{Z6`h`?AyT`vWOi&wIp#orLwMzR=I{v&)rfOpeP2pqT- zRB@GK@6Rj>{NVI=&ssk41hx*>6}a+MwjeviHA`7`(< zzmt;|ug&UO&HB2`wo^4=K>CSn@O--^<*i|L^9y#E{rUrVtRwrxI%VC_65rs z2-Q%|lr#iX{J{GA)>4flrqVlFCiW`LhKqJ*n+m^}f?Yzkwc(PskZ@fjPFV1bS*WS3 zT-ZTy^5%2qgPqQAOP`sa&v$m<((A399Q;P5IQ?=MGU4Ql`2w^0#+QsRy7kO3kaI0sA63udyhvnve%tUr~I|ALvm z3ert_w)^$)U1@tSr_a~qi{E@<9UdhRX7xDxD}-m?VVwT(CByx3xNwxb-wv5zl)%B+ z7dB`yXo$W+!-Gy3x7_W>BDA%;6sPIhUg1$_n$u+=RJpk;k2)h*kIXX?V7830pN=`A zl%$vPZ^Gk3$u~zd$&EN5itqbb^*6aD5<#F`l>HdIox~@D_mcc9K>M8_s5r}tI0qK@ z;Nzi0=+d9O!hon$wvoW7Vm2}kQaAWd+N=t&vrg|~+!YnhlLQtYyG5#be1U9D|Aa!8 z4r5rXl9pzD3wwvYzYHA`6BlRfUW#{^xd;de(3TmG1L1X#>>Ad;ciAN?$bIR>SKQaW z=V#k>MIk=J{DM+pb>E<|UnXTAwWK#Jg_b_>9kj>m9 z``rFg>w;E?-^6rz4Al4dM6~MO^I<7om}Ww*mfORn1DhW1SwCuJtaeri6#Q~CjIE^a z!8TR%mF*k*&tV|mCrfFtNqm?{4rD%x&4P&E$aM76w?Ou&n=)G%#x0Z$7dxfgANaFj zC-}-sq4xwZtl&4{A%uXD0p_g|P?romm+5b)la?2X6_lV_iw^7XP&bJ*0&x(+Yt)V< zNoTPE2GXb>e^y`L{_MX{Su&4`YrUfJ4&Q%M7~9|6O`PAhOQ=3-S_ZG-bBKO%HR_{1euY%`_QatuewB0ym+g<= zfoXLaHY-fB(F*n^PdoOmfv{L!^zZq>>N^`#7QFNTzT@qsYykY?MZ9>AaG0_Up!WZxVWb~ytpR8L% zCBZ9vH%c=1bYT$>^jZ-LdL=*yHU{GTBQrN&;SZ~sf(%Y{8Kr}y#t&XHvw}{fv%U!WIaOX0j>%Nc$ zG8bHi>5P8Ka$R~Cu`AK~37>Om&Rxk=gYTKKf1_@ZVMSHR98xmtD^$=E(nd*CRAX0I z7S|x^`%48%gwjdC`y?(uu+qIgxd9g7buB#u57cR^bq5qg(Q529i9 zst_oR*i1JpUU4WMZ)-wGhN5a5qhbkfNj60)9Is}dDEJ58{cYZNpI(!O-+hEFM|FVN z)4-USV675am@OC`Q4A9SMb{iD|9rHqA52GJW}#-FsQ|!sUN*J z00Rj%s(l4dB~(=){YG+lXJ8r@=Q8)P<=S-cSbK@vJR(VYwKtK6`fxE)z%a! z-dXnd{i*0}wl;s(;^*@8S$XHrmlH(0=m)V9liyPRuuv<%)=S3yqQBUi#?EDWzy>Iw zudRR^*BhIaSd7bwy)@BnWy1XWm$&7K{*IXOND|uyb5?A?AaELAUQa3#{6lgtf>`%@d3V*PEe zmen>ysnXMgkl~nM>ppy5pQ5eGleg-vvM6CjnAmCLN}&uj=MV@^IxKA4rfm62U&y^T zRDlJ28_pX;Jb|Md5p6~^u&Pr2yYOdOJ$>RJdCyGnCv$CVQre?6#J1&>6I7ICH^K?b z**7bX9?pylmbE(e7W3*{pL^?_V4(g+#7DsC%DS^{Wbs%V6f%wJ8Y|h0mbcE+(C#DW z__@52IFG)M{)D$*9GtVHm-{GhacMm`N*}jwHF{(rD3YHQql!EDt6;A=^LkY@{CWFI ztN>Re>uUh3<+IVuO?wwHK(}JX?)ReO0-X5dchAYCOKXKDOl?b$+dG>G* zV5JM74#xyzNabI*hwix34IX_-1Zr<#0GOhNjwYa)GGc(?7XwEMf+D&Cdz>MA?$Xw; zLfV$cd1~DfA_7bq?bn>&Bk~_D^bhPU1(2)TyKwjnfuT@Ik#j}y+ zXw==;8+)5)rQK&E<>!3m{~DZyE3(27P-pwR-gnc!v$o^@p8RYi`Zd6r{U)c!_}R#1 z^vKUPpxiy6jwaxeA>i8EEEX4f%U*!9#q;{qO?x{rK%RD?6nn>g;lGL%xkXr_Rcm8_ z)AS;p{5zIu($0;0?rCHcGm}HVB6gZdMvr6$WGkirD~F9C06caL!X30F8@1hN8$42# z+`apiveP^>WP1gLtLha1-j4@vk^)3=L^^Rro(0+0J^~C0McSaX?>( zpJ~G?5%{WZ83yf~`DGT)2{-s@Wj?`8{6Q(TV!yL>`D#-Vu3@EPk%O^wHbmZ$hRIQt zE~|pbul5tGLhwTDVDBD?*--$n2AfG%ry;L?})D(ELPPU8cw{dt)5*ppx5|b_o7T1{N|;JY`x`p zT)yF=y| zFdKs~9a*p*6iCNCU%P+5Kd%eYiaaGELudN|iT_vwE?f58>p4YazXx1a4%yCr1O!8M zZ2K(KcjH?`44^!jFl*WL8aM(|-4th!I0O*G0&H*rNYK2V1OFM9-RMye)VMNYRA~l} z^b&!h9|1?m6mMjDC*i;_G(Z%g2&Q`gIXLrKh>KPPGXWV8r5upyNFai_dgD7r1fU}Y zATiyvL#ve~6d{5B_(e#1=|o5(hinIml_lWV7o&@3nJRK?aa5xZ#i4Yp%ore9OP~&EL6$ zA3TEY-AUWR0Wd%24@9x)Es()`zX+xT|w zm500F-U zTaaRa2_X)EKqed*M=zoXO-yk9+_fDK)JO!{4A^!={)c`;<+*F<+BawC4rTNx!zBhd z2{p&t=xg8MA=_0b`X(|!R>6(_$c--)y+0Iv#?Bq_;E`t{@C=H61&Y1}ioPQTNYRQ4 zSb>&*7!Rc26RF1$S;2yu(seSfhzonbrqy%T@Qv@}kgeFZJI1(2Vhk|fY3J_nKSgMA zi{PO?eHOF9!?#_cy?YhGrO0DGID2&Yce7KY6!6^f4)u#9;i}5QyHI^33GUqS3_`!y zfSsfOZ>T=5&|-js&>mxq3usvj0}6TtY&vO3izB_5XGL(t6^eQcQx0Q{`~A@F@hnB9dW$kT3#teAq7q z_Q*W42|}qQVz91#MoN*f0wu7V=%b+qXv`2TVvQ9zLiv&}DW$s7)_2@Y#qr`;N*L&D z@!MID{bed~&Q{X=ccSIJJ)I1NfcZVb;IU%loG$6ldggfW&xcnw!$<>{vh1CetKP4p zpog`VAc%FGQ)R|ol~J!L5cVY$MnF#XKU?Qy_|ann6F3O-Zvgh6h7FPvugDfu&Ac>& zwsA2)Q)o|eIe!k=iwBzWinkg~Gs{-g<9V zmV;4{DARe#j~c0^H%WE>em*w1%5#Q{Yodsz#g4mriH^qP(qhpJ_TK)(*EyVktztCp zsY<4}&hLT*9O;^DOYEN!K~Za@y^ru~F=4=Yk}7l_dfrW0qtf?yvXARJOau@jcSf}q zdnhw;{IGuSd=hJ!W=1?112J5zySNv3f#=?PwRA)f%6$2_CP$})UB9Qzc&Pd?%7$Lr3Hu&x?17^MZZ_+ ztoVec=9Nkb*|$rdOoN}yWj*lvML?&1k*t*ciY^cJpz^=&$6m^uYm7X_e2*i%>VAXg z3E2ykc)Yy1wSOayJpGJ22k%JN*>-g`(i*ij>wcs|SPoGz7GI2={}FsjMQRwnCp zkfEjsSrpmm*4Nh1q&#uY&6_z+H!{(+X+o_}rg_Dqr= z731HJc_|rVd^r2DtvNF?{48Zu(1|Q^uC(AjIT0cS7cZ@4oSqvNVq}`L2+vZ_#Gg2a z)2(WDx0Yg#oA9?0^d#4ye$u_``+)@d^c{`|dAj~Xs4@ZLj+Y?4B~S1}C=hvV8uG?wVTmq#oUArf`{=nJLaq5R;;RZ z`Y(=&1>AGP8=`DGu`lY59|N1TO2%-?nKw7~H5{dEzEXFxQ+K*icYde-WcV)uyZFC% zBD4EVSN>ZC*sEdKt7*8aafOB8?v%f7l~R=o=@q|uY2@Vadp-~}G46H2afvY?I ztef0ImV~M*BOo*KN(;~FLCKq=Ey1;YdH=&Yvo0lU9)B1qJx=q7nZuX2cmzu)-K>;c zMCT4R^|3myZn}I}!f8A}hrPAHuHsbL2G2D_$gWN;Rx?fkg9(%Q;GGzgTj^XK1x>=``(D7Wq+{QDKpqJ{CNDV z9*Y7GJs9g!ufn!wWW$xYz2#oY0M8&DznRi+a`fpQ$SP0G!W(z(P7!(IKm!(Ms!T!R z1D_;Qm6_wmvGE(|O4y)|Q5UcJu^|mx%CxkY)KpS(?^e;xq!P5tUGIhp_@;yWTdM;S933jb3GJv*Cmn z<&<@|t4ip_fY&dJv}w;III;eGReuEzyb63JJVGDpeK#be!tkx+CJ*)bm9kGqG>)h9 z(#iuYvRP-&t9o_*`+wbxQ%JJ*E^rk*_%BT!K99KJ<@4RCr~h?Z5^F1|RG=BEj=a3+ z{24ieK{|x4b$u4a@5OStKHhqAspZDyM5CT&zWxbO90gT_%I?D@eUnE2Iurj#)$~@4 zoq&ys@{FpIB`xKu+SE@TiWF?PCNzJHmflK?a@k~pkPpfh0uojaa-W_ZGo!h6P&ukP z#Eh3T;Hy!&+H-Y&=jwdpuGRU4Q#{tC^!T+wgIhyxN~emC2~UZ;!EBSzXnyP!VYgUbo6j;*H4CNg1u zPPg=LX5?}7{<+S&5_{_Pr03hYAoK5X|JiMWiI-(1(CyA`gRPBu1Ph0;t9+e z&&FhEfB}pHft+MA00H60a)kmqmK@KHvAWI(%s!K?Q=JCKjH6f>2$D4$e|b zlcZBegnHsi?d(L* z;zW>6J2Uf-miSP$izapo9nOU}wQdQ2e|3L<{bt&r)PMvv<_OY-f$3^%S6& zoYZlB1$tY?ocuB?x6IUW?aw(z8L8tLOgZ^#aoR2W?iFP*7%huOYKpm%EDwB(^Mp|b z#L&=BQisa%;!FoJhsurO%nniq`*=x~6KF~uZAI}0MlozcO{Cts2F7q<^JY4`r} zo|2gQgsP*sm0`hCk8{8M5QfY~RJ+TWD3x_q(1quDRmIDqv*=&0c~O+9b%bXkt43C( z9@y86`KKarh@(-c#PM~k?#P)oy${P0V^74PdM zf3cFs3yl|$E7RAo7bBNF7f_58C~D!9t1?VIrL@OH#%>5l7W;T6j=Y5PLDms2{90e) z87B9m8fB6;B`H8wI{|oey3^j~<|E^2$gy}<^l^~ZUQe!y&KsVHOA(QI_fvB5Oe*xq zm$;gwj<1A|b#k6uJ3?g#E%}XxZA`>i64HOk(B&?oy(0}$BgN*Og^~wT`{AJ1a-fMQ zB2p-`J5)xultjZ477xHH>xscBbctuvqGy)vawr?50_?{PuQ+eu2Sr;AK@1@U^ss?w27&a#baZ0NqNFp zjht|zBfY5yQqpB^lrfNhWK0H8QsDB zIl>FQx5YsCP2!CE2>WLj#D(N4O(4GE+ZS0qlR^IKNOv9dqZ;BFeeV2b2R_>+*O{uF z{MtzOR^pjeXt?@+154cb)pa{Yp6EwKk)D$R%Z;Mul@%0?4FczCdi1Aq%u0jg5lxz^ z7Umug+|Aj=OdsQZle5hGEoX&45J{bJjtQhSXndPfsI~5v*DE#uEjOt2uBCrPhOzA5 z7WS~I%}qjyM>|0>avPb0fn!}g+O)(;N6U^(jVN9oA?15hf+2K^+R}>bZke4|=_IZy z?uW9l7FtMg0?OINZ}L&cXR~)!UpHWOX3^Xzu`_2j$Ubp~6&IFJ1E#lqcE*Y$u?jO@ zg6}_K7q@fIrlhT=N9Nj&*+p#pBhIrMQ?g_+=dha0K#5EPZ_aZVv%75h{VYd1rI|T4 z-&%d2IgZ*^{}caY$(TOA^i0!dw@m0OXhh!si|XH>-InmB>jp}SL>BjFBd9Tq?Yblh z{>>GmdJ1|J+eEQ`@;a7CfW~Th62uBZhnFbwPj1KJf_(QyWMqD`pQ6Z1`R|JwF@)v3 zkHv$c$bY+gVh)^$YZFv?A4^0^669{rMp$4Nf7aTFz`+o%=4aaf3(m7sy^^O4Z#WC>Qr`AwL^%cn%eT|AjP<2_Y>0R8(bk zCrv%C=b=Xm4J6cH3vqA8$_3fInEZ&Sn~PifZHy`t?yK9*Pu!+(y$UxHQ|sEKoU3K| zFO-n&BwQ&!L3h81Q8sv#-gM*GULW~cYN5*#bL1q+0n7~S5f?-k*p6zsnE_8RY9iLn zl8*GyZ?z|h1$U*BbS=`TuZHH|*5U``dFpcxn{K%tnIoVq5!*d~J=!*Z0Ho@|n?40c zjgsJ-mb-HS`SJN8m8Bb}B8X|fFX9*lI1F(+A>2A?Ui_!kEW4(!kMQ3|pQ?~_{B zYe~MG?mQ>glCyRMWcwWtyE%~(*IU-H-*ikwu3YG%g{?@HcG?^IyuT?_3jvJu6IN1m zGt3(gzaVuLvZz`DHQ4J~kB^wW&!X^ry6s2LLaU?tzu{z_%@yCg40F?)SURwDk$2h< zc9m0ajJ8IsynL&@RqCxHuJ5d48kFeSgstzcV^f5d^PGUE>$C3G7Wr-BMxbLkQuj8} z{5m(}z%RhAYh=@I*Rv759%*YyUB&NA)I`fCb=*To-56( zXg)T17&Sk>Oz;2@=Uy70DRuO=%q_VPMP7QRTrNm12w&k>L;gY61xYvFlP@_X7mQu2 z<)27MHu7A^A}?X(o>q%bF8%W4SC9=okX%S2FU94a+P`$P-UKuztRJsMQF$Y$`UjEh zfy&pE`BmGn$(w@+2i%jd4~r)u$9`#-#L)lR1S5<63FiaN?K+Y+%;(?#%6OjxqKXA6 zPI~ybHi99mr6h~Y9sV2qXd5)imx^mu^}alAbG>Mim!D~$Zh20b?sYY1(j3E&-aQEi z;*zhK)>7}NNZP}$h$GiAQ`W1O-2NS3sJYC&Zf*?DPSSL*w5ng?f^9PWa}%zGgGnM? zVL$fv)Ve{IWiGpWF(oghXrD%S_DQ=&)9)Nepld2bk=Lpz*LiEH?$rtF{7>kTb>aJ) z|045~He4o%+LWf@<30| zX>YRfjqa|Twvf?G%E~RJa+kFO9E5q7(^cZE0i5wN)$O??(F;X=N3ISZba$fTSdCJv z(iv$9|J&??@g53VTjoM<(x4#~Dr$>Q61OYRV|X)ZNu!^}dm`>uwv|;{?VfqvO+0S! z+XI`|v5(XPD5`SIz~_&#*|q0eriasY<=&^R_bOzmn~Y+ZYr|VqOAZFTBRHxCD4Q|^ z3rQlg+Th)phDrM4g!UF77^IwmP3Z zn>>ppw2tb(4`2`H{Tk8>_3G!@hc@V2-1w2<9%q`$5Q{6|nm(k_gKhhX$_qWc`XoQ_ zZv<~;bMcp(vuh%5R?&Z@3_{Rd{A>7W8j3fT=P$WhNYY&RGeyyV(qC$YsXa-8Y$2^$ zLbwvI5NmFpcF5MEkiPdbm-yQKb)$#61?#t5fZ@BX>0Gdt!k|WZVSg)#@mn6ieC;j1 zUGx_%Aa6Pgl+v!$3uA;@?FT+;uFU#^{y>mH62xOg1M*$lFLp@4_jAB_ydsu2fX@TDB`sALC zf9(`*%I@@F9eM#&X;5Z2W%x^M5Ua?XQ{NuDleaq+LvrM)tWsQ$gA-`;pS zVrOhBghv`GF9j_pSs7y)r8rBp`Z1-nTPQ|4skM)(LQ`)>0aJa$RgL*|R_)>V$!@8C zJBSQ1ZL4XClE2s{&EfmsetZnrQot^x=)hKtKNzUUgdh9m;Yr9=(dcWJrU<@lyuN!; zVP_2N2uNpij*un^314K$_@wmqSkq%o8L^o3%TWWyMTBd>VKZh z{I!kh;EXMUcB>@Yw2xt!JfaDB`T*iOcI$%&A^8N19!cI}p9CHxnH`f+6hl-!cZ_Ao zOy~gcb_?7oKS;F%4Hj`-JUVH+#HXfCwKapIruy&6Tg5(b?2{0p?FlpdnfrXngjRTF zFd#%_y7O`81lbq2bS&bhqPQwdIQe9?jvbeH|4 ze@J2t&SqRb3`A7(c4jufsDi&E7a6PT3ARKxKyT0gQS!LbXo7#(t+dx&Q&_0btD@Q> zDxvBUEU9sBm=0af=1|u1XQ}oQ9N#VITP=VHZu>|SAf;|{%mksb?AgY(NiVslc(7`O z$4OC7r6^>#`0$rnW%-LN4?D^g@V3gO7Q7bC3NL=Mhx`M~;!`T=d3`{cGROT=8E(Y# zrxYi%^1cOXY>q53r>-4kc!b;t3!PYu+z@!3Kfn!aw{JbWEwk{qo#N4liUp-=B-NBV z)4{6eacK(C=3t5+3Wh;&Z}_&MEI6^p&N@Abmio^6H-}detU>s7Ao=enu7?h@?#qT#taRP=r1#b>p-@>ltUN^|9)?`aw z<)RLGEv$`A;WD&ix8ur@O)wK&z0VD(bktBsW`b0`{}>txrcJ12;J%M zv>WsOI)t6-Y2GDSbm@LE@BDCbjjK!iR(HXAZg{}(P17QD293H&Gx-`Bg3G94FL#qOXBLy=YxT*2l3Qu$~1HZj*qsbKYno8zFfRQpL`SGHO+Z=MVM8Lis8% zna@x1X_5!R&5E@@{M=Pj`NY<|zvvYzJL&Vv(bsqbY2y{LlBd5;G}ZoN4y({U<_RL< z1@$7|8CLuh?rbc2gIf;5m&c#5?9Rl56>wBp`}h6a!^-*O zrelJw)7s?6))07dFwovWTUu)80nT!6(LEXgzZQmq;+Mi@P#IQb8M(quzF&MTrgX7SG)Xi66d%%1PS z3+U#gHH@{IDik3y;oCY?P6r)wLMbTBo=FtG@?)}1m0o|=-ij6RnwZZO`A3w*{fsGu zZCjEajHRs(hLsO+-zn$k&S=BSLolpAk($t2YtoWXO&88&Eh*pDO`UTtdq#j|dh#|q zwF@Q?p`>5gD%d|`Ldv;-4Kvt^RQa1QnvcbC>vlW-nI!{;UMl`Wn!18GX-w(1`tJRP zMdvM6g4v;I3kfTaY)UaL&R?}?7n z5vW2`BulUQehO@a?-GcvT<`=W7*ae{Qi{GRoad4KYcEqmT#y|Pkk08NPoIYgnl zy~O;M7S;H2k?#IJl=w+0ea%+09)D9_7jg#Lb;aiz7dzOxO?PIHShl7H=(Q-w#4bxE zE)W+$J7IRb1~s7%{Va2mV!cOu(Ub#Y8n;qR94V%EM7djtfWx#q+Y;q*O=FbGTiXxp z4Ck<=ZxM@O{+f4!(OnLWnpXHn#ZuIDgoa1S#&UNGsDOhDJF4sfIl6P< z;UNF3H6+;x=}JZKQpq)XH#%|P@bZq*U(bU#%zm+B0JFy>Ro~f{UG4}!9+~@H?BFta zrJok;XuYdJ9u*+Vxd}CuE`)|-_ywZ3O<$&dqt;((>pOhsDnFbN!sAY2?%K+) zKOgw?g2n?sV^ucT_a>E`kxBF7ebCflyu~p(M8tfc#4%7TnWEc-h2QO=?xOMK!r|p7 z^H)z>hVJw1oKI)^C1Y0Cm znKgdBPPc{4_V8U-fA_}(Zz>9&?2~k^!7#p8J?NXNLINK)1C#h~O>VLa+RkoJHYsSX zgj@Ulm-q0xD8hg23cL|IZ{mhNEvWL{id@SJUL~kPGxOeVx|4LtigJJ0tS)rhcM@_s zdKXpIy#|x|UbUcax(Eq>*hDS-zW;vC>9yHz%j6Rr(e<>6cvTIk-QIY}-+rHU4}Agy z1#g4yeFd-h^O$^G#5cDp_b)uH5w5=R<)uBhvc(M{Ckb#UOOq88{cdbguZf9#O7dT?Ce3cZ6Qytxs=tJ_{)T2n$k>!0lRZ zC?M-_f5>Ir&?fM*d$c*XS|G@Cq-aRzi2wXV~d{h5T^x3ut^2%{7xceYP_^W zDi@?&Sk-=?8}WV^rQc#T>?AUkyr5V6dxG2VJ;;z4ko2Afx5cyX-w;O5e)9lX8}c^o zzqd2XUGH|yivIF;uPGbQDe7*PBas<}7IU=*$T={w81(+gbaXx-4L~iA3fj?A*;7O+ zx3|jm{CpHrUVC3Q?hWRPyL!-D1mM@bE4aQttRzYc?~)+Z8IN&C8Px*SF(j`Fp%c#E z3K1I)7QJWqlpU3$#6Tozu^rEarM8UDA)lT`Bm@D}Fy8xg)Wx_DWG0F4W6uwN z*4G~tcfK4w@geHo=0(39qK{wg6MOUbPE!}LYvR6vWFdnt8J5}L7(K8KrChU%}6$@PFg}mW|8Qz3Uc3xsuQnn0Dkb*j? zdubx~+xm6;uf%${Z^KU}5J*A71g_g{NVl*3!2?$rMXqFcZmgzbAzPbcS7TJ5Kt02L z7yW|muN=%qs!?R1f*StoSJqp>Q_-ELHoxY84jNI@p^&Yhv8!V$(8ZQoziLwMgKftQ zFDZzO*nQg@=2q|!npEMZt1-U!ep|(O$d>q+%iOFFkM8wrskAGIi^|B9mJAfQaoTr< zwcqwEy2Fr!&uSg-{@%iWop%Re_a@j@H(uL%e&Xkpr%#jrik}lcg~iMVk3LUL_Xi(Y zV?9>!vqq_0ibcdOMuf(C@t;o3_2SvxWr^<~z`L+*?aqhpryj`DyD;!d1la9;m(#MG z*_<>L{;{c-=jw?eII>mm(N=ZVjoJ5i$w8&HGMU(P^5S$8BSnu><>ORjq=g-;yO~FUOUm~3j_=lb=R4Yj#2!1j ztmxO&T79rNZNk3XzwRgI=NUg{U&i?F_dZm1q$HI@yO5a%mIw3`(K@6a`L{-Ou8f~{ zkgMfE(Zmn>zQP^02M>CHjFrL63($Im^DBK)|)hp0^XJ;1x=@NNQ>+dx8~dh4Lwg}kipsdxfJB5IJaD7s zoF+!eS+5{IdRTgJhfXWz+qT}@)$`@EC@E?{)Z5R|U6OXR4QLtp=;fB*GjwTM+9Q$> zg4@ONmd<+jM~8=|}~{0r`0zJQ~R^k72&}diTC-dYE?_e^>{a zd~IFKoP%huJexp9I|{#al0WqyjiK9L5(x=C6_b<01W#^dzRce3z_gBI<_>OcoIZmg zqb~reSHK(a{nwBygv1isP$!tyMUO^^GUQnpmf|cp^E~(;(z|YHi}(AaNhh%2W-ax1 zo0aXs)&*Lx^tNTebV|W=03=uA$u!BmnM+6+Z2h5iQPEx`|1e5;Zv`!&=E%3{X!Qyr zqznNK$sV@zUk>_C0LV)V>fV8!WV-~|0X2gWO@jbYA50z4-n;Ts&|lM0?LljTh zyK7zA{^&`|rm@~zd05gzi^5~et>}62&W(^NI0C74G4ezt{|MSRT`FkfxSNhlMZlcf zNmK3?FPKOAQcKPs8b!`Jt7Eq^t{cJ2li=m|QA`)mnXZ6QHB8XA8~SERhbmOIq{P3KP9P4o~f zP>9TXhtaNjU#=TSy_aIXZnC_JSluV|k{m){=juh?Ung!MH=ZBBk{_jCC5`tmZv~Na z@+Nv&mYLghnynsg>G1Zdzur>3p5-#wUgm?`38rX*=OU4@oLV3)-st!zz1SsLj}U9N zD(b+8dJV%Ch(?f;-g%8Pu6&G5N{@}_jl&PJ;4GfNoZN%`El3;s?>OD1PbocCYZ%Jm zU}pr_ThK7}Q_?s1vBz)zBg zGYZ;O1(cl`5pFb(>IdJ48J*#hKz}V9tk>l&3tgk9yd|)EuQF>%{~ZU5GMteaD+iJ` zR?8d=GF2oY=KDt*qWU=Vx@exMn)Kc_YSk|hIiT;ahv?gryD)toxQTJ}B%vBI9kn{^ zEU%g~nBhrrs?rg6*|1Y?b)(WQOerOHulD;Pqs>b;th{_kJSX4t^1|0GV1?51m26)> zayENdqe9#=$NoG6D}D^ubsPufm6@;I z8H`K`{6!Sq9j^iula7mDuYN5L&`uN>M;H{8&x;)YPTEDe6KPm1Yrim*`!1PVF~aP$ zK8iJCJlVOg+xi}|IN=_Zs9yeSfbd;8(XekX&X#22u3*?wWgpKCP->aZ6l!2AIETE6 z&%iV}dMj-{Asmov)BeJ`I_&s~Aiu!znugf^mVMYxT4mPoR&>Lkm_V-BwDH{H#P>bJ zD!OEx#3@*~yU4Bth104JS6a#w4~xmFUXy!>HegrQ7q6~#6q$tq6?$N=_mhMvjU=NY zIBufMqx}pN1l0shJc@Fn> zUIvHpMe^~+$70BJtSCl{K_@;kU!ay4hwV@@*G(r>kLAVwwv?+@)vFPYBdWwce07+7 zsv80L`^VoXyk0<3X%Sz14bykph++BvVe31Cn)trI1u4>z-c4vy)~X z0tym(RgoIn5_(s9M?&u^Esy}x1t}^41f(|s!9Ty5=jAiAGk5mo*}36VVJZgUXtrD>{AmB10Z zCy`gflBp6p`a z#%V6VxC}I3lteh|xYr!Bj^>^SZNGp`i{jX$+_oHZpPtWw4GpS?qE zrQwT+Oq>g~zI*77#1A(YC_P)*JgaZ2WF`3a=4{Ma1cHBB9kAp>$6D$>A#lcXfR#5n zprHaf!vRRUmD@p6LyQ^87RIqAF7N$2npM9I;{*H48*ZBkJcL!BH^6oha_2YpZFu2# z6WST!Pq$$SNTFgEiT=Kd9<_8^(0(QNwM^U-rh;}V#8oJ8Povm^0bF`Tg@#q-e@=Ak zOPj2?|6l$IPl|fz>uMVvhqzSQN~d%Pjisr9&h*oC$Y4UIg`UoIT&B%i5#f|eioApP3-kf#csZQLD1l-Q-`ch4?PWJ3-NxGR3YeAWj2ChH|ErZH%)WK z!2Q)Sa`aSuRmF@aYQG*f54X))u{+A8QzXk;W(cf(IN6Cn${`J8`(;gLHJs*uVT$EV zW{XY@E=8)c+HXQ;+l*+gfvz$e@9uF=OHHrDoV|#*zx!6W?7w_b<^1$bc%MY#3Ep|? zEN-jOypDeWlI}EL-U70r1{$sIsO_xXJ=3G30k8t|QlmHEb6(IoTiB6_IR8^a8}vqz zW%xqeyTAmqU@}}+&~7lMV)JDmVYR!o3URw3&AGXq5Av<>FP0f&66`-^82suRG_Q`2 z9&nkgNNE?0Bj2Pt!*nRU)O zC&dIMA&WMt`_QXJ)sk+q#BGI0AvV)X)genc-r|p7JF(aoZaOiDf_q(Zuv@7Ot%QcJ zrBBrj3MOSIU%1t(1sawgn%{mQjOX;QIusZv%40Xh$cZwFBpIFF3^MSnw~^!$L9DXc z=vg?ooV&gYVQFD|SFPd}sn#B)U-AC8NtK3h|2d+v2<7!ccl+Vp!4QKQnmO#4)G_I5 zispW}m>@ib0>~$aCRRy;9Z&>V6Z2Yr&T8X4O_~hvjJVYVk_UT_b#Kr>i?DiqnW!J< zDzc;2-Z`+T)pA3)<>2v(^=B2M3cj396nyV84>zs*Bz|^}R&j%1xxOYUF_7py;WN7~ zionoesnhx>INN5Lr|ZG}bL!Q=MRU#Y;;9AWu4VJyaHKuFBqP3g$hX0GUJN9&pG z!uiEdKDvgKuC6$p)<>hlTEGiYidg zm(l>4M}pc0ZXZ&s&YWOd|P*3;U!)rnHxOxcT@y~x} zD12%ySeqJ+RU^mBKDIyew`S2q=U8f>llVnl=NTpH!cr1Az^XDYB7K5&n>EFf4)8{} zaDOMiB9zU}mdqqyyo;`|HZq&Ppk6X}s!31Fl1@C1J1cpcYFGLK zcs{@M#kpYP262#{#rvzzou6x&h*B5e;Z1Wd5w)E?=2DIv9^)}JI}G8jfqjl`!n#hp zvXkrWNn&1R0B**NdKSh|VGoEE$U8?i(iB$9l-ic(dSp78tGeiE8Gx)*U50N$yl2SG zNT8q8dIZ%qmXbf0hitG|bUzV8XD09Vu`~@Kg3yB@pN>SGs9zFT&0Is}9;~4&sts!& z@BWpo+bXq=$r^#T7`_1aKG;gEU@n#zT#ySThaD#R^k*7Nm};G`9E9|^Zzg7Ll=;AB ziYbGnDi&#c+B`SkR>#MQZoP56fn}2@tfnk|0~F+#&J>h_0ZE?2ud<}rL_~gO*lY7= z`UeZLXLoU9>g~^VD@OFeba$%&8R2WHy`W?Iy(B~VLpbz#XeC0% zA(AH_2BAMx!J!hpG7HqiP!7pYh0KS~U{h9H4a^h2bt_loT;BY}Ax^Rn)%;L-M{CBQ z-T(rekOr0uAj}a)z>xvUbA)ZMYHiB5zj8>Xq_Wq6BE)-R;zNH0hW|~IgZROf`f+Y4@JX~3cyY|-*U|pOx|Y1eTam5^BHp= zKF5*OPL6kynI;Y%rUh~fW+z!$9dbgcXE)rg=ni;iH(a}EhVZ`U*~@C-ZAP!WwH_?Z z?RTE%bOBPWqfflqa0SYB;57|kRJqP^trA$tl_S_v9u$pVuuk6cR>FxF)x9m<9Vr6o zCn(k#6phG$ZMYs0o*j}xHzm-Vp7sn>-@6BL{52E}3%iB0#?%vEI;4!$fiK(YHr5_> zq&hFm`gpSxi=N8ib8oa=Tk%NW)i~MjT+76(xp_G}%(2m|UYI5IHipukHholPM8zP| zGY8e_y$MW*w9toqW7LPHP#|)k;d3Yb!QCX6w6j}+v0K&h|H#{VLu+KJ=tbETp61O_ zaQ273kS=>;`=iZM+9kYtt-CohPGk6Bp(UGJ!+x|_QE7x13|^Qu@@Bw2Lv^Pgiv+rt{6)l3?ckwn+V_HxnJh3xBoJ4 za;+1PP+pt7-W2Q));imm`tS%<&suV-?+^#smbdXgy6zo=uAF z0i;(iht?w}Pn%Ak@vfTbJ^$#N(YbO5Z3T9i3nlRf(G{B4Q$AcZ;NJTvRG{{GTX2K) zO2c4wmKtgPw>`rCSB@P}%0_3>|2i;xa`ighE#<1a$z8EpX>Z4?_Q32aHoFjrXHI|c;f!&=8=f# z_56-nQ2LRf34G+};fa(8TDkKBf;0G$q(E2UJ1pe_?&NX5SncitZ z&+NGmW&dg&r@RJ1N%i+{h!Z*VV_$!`b!IktsL9Hv8}Yl#Tgbvztj_L!xE@&uTH;XD z4r$=kr_5WY?;u%O_#=H^e2t;B@RPg9Ar`yMm{^h?{;J<)EHa|s{rmbXz*$T$d8M5cj^!l3lW2uW zSKtY+d%(U{0D(Fna@ZAZl2<@#kSx6xWP(v3c?#`?2_BM?f*dl~q9ks8&>2?T-bt3A ziHYc}G=k%A7J@ng*u-zD0NoNjWCLm^-n(0*2!U1BZxcC4-6vdq#r4U*=?Nr5PlV>U zGnp~94~DKj+9n??3}K-K9gMo9-Uv2CeCSt+U(hG2(A;_k8wy?qi5SIC%s#GFuxV)E z8Xa?E)Lqgoe)rV+t#-;hs^^K-*nvbYMjzD=LQYuD3zt^m#YgK3vu#XYX=D<=o3Z*+=lkO+*T3O2XFA^laB=%V27dUOkD@rP*_6!%YFi!!v#qUF2HDf#H{y`b zhby9M_TR;jcDD-m7Z?_91oEgKxO}(7F^~f{URyG@uOpJ znHC~S{7WOG3)%X&@qKwG5vMa;=;h#Zk%dkz# zIk4&y!Z17+06$Fep+;#BLD(IPCsahZCX^G2TkmAgCD6bT^}&WOKeU?)9i93ww%GGg z5cJzz$UREu*TuYA*VF{+WX}Bo(zIpAbDXKX6KP{Ri|VmBu?Nv( zaqmb?4qWa>$|v*O5{s!utOQ0=rbRvoIL)W6WD-h3)rqG1ij}iD1^K+|<|FfsSQycU zc!qbsd2S1Xe3oWhiCs2=pq)jWsIAQ4I!_{cZ7^hy2l%%{>Kx0RDX{nUI(gEwI2?6V z&1}=#Vutp^oov(3fN#o^&+txAwtUxWXS(zDtc24{XKttNR&^I!3cR14(d4ZLI6eQC z%@UP@gf8Rcp%BanKQ0nd=@2{mNf0jzl}E@G=jzOqd5VY+q1YflJVi@eSH%Q-MblOp zVnV|mYBi~!@8M;tjpJg2@)FfeU%t9OI@$fHUs4KadLVObF~Gzl>HOWY=P?-GhT@E) zLlqY~@E6s~v`k10KQ08Ngbv7oTQNdxm{Gu9Jxy|dyw!nNWKrWf6ggZ(ZsCCxjmzX^ zv+JgDLyAT#_Hg-c7Jt`CAG@8R@Nn7{2~#(?TU3Yrlpq-jx;6|BX2yeXVl>mPFF4;W z-8Fx=WMd-?DxCtWRJ8~*k7tyDj;H6PsUY6$o2Hso4Gbs;6IxeOC?j|@VbCm;v0xt?85nu zPOGz+%0}J?9-X|Z5CdcDd;D9HvkIPVQJKH5*2(no9Gnf2yZJpf^Znm9{S!{c?xddp z5|$R3*JA#kCaAFAG*E*R%-E>aZs!}tvUrDd6JSH)m5s2PY1@GeUKV=s1T&ki0PH@{ zr?aPZ?Ss7eR0ZyOAS@WbOr(fY31IIV32h5!P#;Da`0T-O&lq3^duJS-rv?@vjexhW z-X7g|Dz?>}5#md_|A(Sj(&`?^U)qC42<+_pyT^STX(`%zALvkTx2CB5)YtX`tjX@; zc9&u`l;hGr&E1}ixNu{)B{R(tf5mEh+cXZ*PG&XR(0Do(8jL%Ab~Bt?EvSK(+JnqB z%TkWm@x2rXlh6#e=^wtFtN{(-zK_-)#CjE&=sueeVzUYp(ATq?$|@Ktn7)Y(eUtBN z#>>0Fj@eO7aM9R%0_~Mem6Ho#DTZ42#3!b$_dD>4xa;hZ_2qsarU@_Gg4+gq?HL1Q z+bs39d8y8y4iT#r%CL_4Us#2Jo0eB>gU_j!qN)!iF5WUcDP22hzvU(I=Yf+(PL&hC z<<;XoQRt!6wMM!MYY2(-bPT*?NE`P_zP*u7fj5K~)s=Qn`|T+Ca`eKBD*d{Tho4?; zrsbG8u)i(XNc*;h9Y5E7`I1Ytr%|AdkB44i3WN0^)78*&-`ui%nJwGei*jgr+Z7Z0 zOdIYWKB;-`wflBPRL+Z5LYzh+J71g>n@ za=QXm-Xw*5qQn&Kdkbr-fOo#+gPc9UJM&VVL4 zAKy_^{V^@#5lXEv?5k&^&9md>hrwDh6Zr;H8z?k%>Qh@NH1iL4YLIkqeb$Q1`Zr$( zoc%Iy(9!VV7%cRJ(z(+X|0Z>ug4Lgcn8$#r=F;ep=0}j?S~(JIpzN{zST=9ra{<>U zBXofi5w%na)q&uhQo)287{Fm)AUyLKc$}{-vvn7Ev=l8_Ed-8?50s>Kb(W;u-!s{H zQbV$V6Q5bMWlf&M~mu>ay$xp%7_`CaR8+}9J!YH)=H_@6{VN zV4TJ%_A6Rr0%h=_h6Bk|_kP5Z!gL83l#i}qDqc}CuTHM+@vQYHoAS)G6S~qx0V4^a7e%0N z(&JuI&N*a(xUP)mk=IjCuSq}T6@--vr<|%Wl{|-ZO+T!8Q%(4kM0E@#vc$Zh=1uhz z*QehoIR_{3etf2%8H2yR{C3%hdT1r41?hdkz$haSi>%ycExt3G<>K9^Pqm_me*p*6 zk6L@+*`&nR<&gHjpq!YkuL=7j= zO&#OjOb^&7*OfKj2IM8AUKFjY8i@=b!rXIWGQ}jCzXSr;D34z{P^)y=_Z{Gx0A*KA zW6fr7gY+-@!1O|J_m>=?O@dtWj(Rsjl+8`=t~1S8l~y?`Dj$K-6ad#Ll%mSnv6zye zXTrDwiKc7U1MJ={?x^(e-z&ooQI^r2POi+>+y`>{(O=Gi23r@kXZ}#0L0bClnq@R7*6!XC- z^xDMHyX7B#0xLSZO}#vh&Y*{^#SI^CTk=gLHSjp5fjt|`7U%+ok0Yj|s-Z$K_8D4% z_$RPi`i4?HH3+F1w9}t&8-bs@wbR?RSPM=DYH2P=P=2DYtPctRUmVOWvPNIZ%9mxZ zkyBoydb#w&kS`Tpl`BT8l!1zBOe#cZ0 z(q7SvlXH6FUVkWYoCeFlo1^948mwgH(``{_ji!x7hTd!=z}I^z)ORHK+qmSJv9A#x z(KQjd>zO^h^y<|-MNtlK8WB`9uWl#|FfrFYO_lBgDjc&uF9O0*2DJLOjBkp5f>8b7 z1Z|`zBk9NJ&m5_oSE;0KiQ>G+nC+Rc3G4Y%ogq4HHl@#kEi#JtSfDTX9NYH%aEg6! zi{6W;sY-6D`fvBVVghB=S;g;ukA;Mg2)gpalJVLeU*QyLuxQMKCbFXgl?oc*9T7`vh zA}m0pm~*i6mcM%Thfcbr@M`WVwAsF?!O3IX-5&9%zIkSl)uu`OY(B5_S@M5^OZm*$ zOraE&J4kVTwqR4?KziZzGR3*y+KdfO;r#YZshD1ScK%Mmw%>H%>78U^i~sARr8<2f zlg~>G(pUHTQ$H}gmS|ni_>@JwC{5IH&`8C;Vt_2}<3*sm9budaibVktCBG5iPp7cq zxiaMEWwF^MsV&n_s=THLf-voiBtRYk75nx|BkwVvBkP4Nw3kw_>9;tzq4iYix4Vf8 zcE(D>qHS>V+kI!uEBw|83At1A{STf)f@7udA3+4h@sHiShnuWrag2s?$!X$tY&v>Mm zvX-UaPFLNfJkd*{|ES>~RmD)(Y0Ja#+&vS6R~O8<%10QI6Lw&7;R19aj!S>c_2W^n zT6n5)+rgvYTgbE|C!P5`0Is|SIr&O5Mv1nS(iK~U>>0k%!S$!*=OBJ_%%P|wzp`J{C zG2zvJl}~+76oJ5jg}C{aZ%P{WkzW@4=P5OW|A?$vT?Cwo&-I-eSDeb6IDp*YwcqZ8 zs%YxQ3@_OJSH9i(@c@17>hYVf#NX#d4v#E-l*c&OMAmlyIk~7f!Hed=H{KziU)-1{ zc5$DFY53>MPMuxxR{t{15sBG#JjeW@hwh`N@IYtf{#M>}!UMLBqkTeSFwc(|PCNuc zPw8|u4}+*iQ=(E4KY2GmRJL~;1e63<_%9#Rvcq}Wzy)5GY`XTizPv`RIUe%yVD`kJ z9g*jAS_a>h?aqFjKWK6j zo}!0gc`5r^*&6DL;Tic*DSVAq`ojdNS6&m;)yL&tn6I1Z+Tg5|Cz%pQ0k#Dzi$Ml} zBE;aKzrmMvIZf7*uoSDF%|sYLJI`vGk)7zuc;?URTd|T!zTxw~rrxH)n#Mr!`|6-X zazIt$m=_Nw-$|Bz`TRAp&LA!40sW@Z57mBI-@n=Le0H;@LmzvFZMl-H61FoT2tI~vhNMBKjfvu;=0cJe(A?dXXC2Z zl_#eYqX4c>)t(1jnr`$Z*YpNS(6YC~7Oy0j&Ou}#K>oqJ#@b7Qj_zH8EK-CwZ#!`( z2F9g>?Hy-EjE*M`boP$ZV9_pKM(Fg_)qQ1IBrhH@*aFx@$$BgM(?%0lSc7*ss5XWU zCLny$P9h^3zN6u}tHX|?{eV@JkH40}tOnb@K~XOEvC6=q-nuer8>1d(D3Iw;3@2mw zGGCqWNg#-DL)S~x+8{Vlbf+^SlUbKlU`^)woop~taA%o zzjI#yJ!=M1%&s50ZilnacfGl;iMx(8YIG2|t2`+@n(?cODd|JSp`4TT%e=L0T%H27 z!-}ts-~TC18OCCu@0qc*>GM%GBUY5WWfF|dLGfn8@WpqZZB>y~e_ie}$*Ki}T|zZ- ze1J2tn#Wb7s%w&*v)xoq%-{Q|THdwGhGJUZ?CA3tuSAph%(}d`M}fhdm6N?$+>pQ` z=(!^EZJ9~|=VO01Ed!D}{YU<6>JGYr1c6-V+lS}WBR&xgq{XyJfsKdWxHllKLoFBH zqbC0w{RXHRZNj2i*cmCRG1Uo&bV0Xpiqb9bb@q=ufagX|u-$9l^ZC)aZ&@#^R0fK;&K0qF{->fvD}isHHJpt1+W7%~qVH0)>}9SK z--CZqsaIwnlxGKX-+kzuu~IE?Nd0a4`|OhGMtzsrT@K9sxjW3%@DRIT{^3$|Q}%-f zJa2yG;wKqxoN+Io5`vMrl9$&m|G`SbN-*-`D0As&i3|fas^65L?-GV=$|)Vx60ggR zynVP4V0WUp`~a^$99HEbIay3feCGekAmR4`*XpflL`1+=b<*%k*%qY8)-#Xpzx==p zU#dq-irnvwic>Z_edV?D^5iQ8Z1Whs9Rat#TUKIDT+t@+KR2VhyQxY7MQg8c*$0x& zS$4g^>RL5uRtp(w6NL@8O#vV7QbFNXL9;A4Tkig1f5S-PKkGZ*+EzNVw9tK@AcBsI z&a5%uHo$d)a`uyq%1o%HTSoP2`x54Y-|osH)WQs<2h+^ldg` z`?srqy1n5TPjgcBZ;FinrD3{w%!=HhskH5#rZgRVu%ndcYr6uXuRV-(r$z#?eos|q zd1CO76W)&M)E)zcoy=Tq*97gS6M^$zn|LQO#P9p@hRe#I43N7p&${Ad5T1>`a=v!q z3qQNY3BGjF<6pUZlyW+1HLnGQtJ!KPf%hQ`Jw7S}=sa;lZ_kY&bf#0Ms-&G1I6D6F z@XOq=^RTE8b6tqI6(dsYPM&=2OPo&a%z1?&VhP0wd20P?h<|N=U-K6UXcr%zlmarndc$&eyFtY_|-%4X$#e| zze=q7W#fV4a~7<=SltOOKQD{u>c6I}8$rWe^CM}bSv@($8C8&CCqv9qEgR!m3ccu1 zVNw+@@uOFN%*M(&HIq+valzJB?jN6fa5*eR>p5smhq+Sus~iieg~T~@o$IE;*Hovd zHsSTYlqKfPOUhZ&K8ZYSNReF}xTF+__pX_7&i@bD>8`T*I9E15wssp>rTdHJhIi46 z|FmGw@*QnrKS-(MLJj$vJJ7KYvCb;sVBF4jzIJcSx5a4B7JYAGnwa`+{THLB6xC7q zW3mZ_u6sj2r7}b_QkRuX9FlA;aV;c*Np>E%@j6(3`-HlwWwNrrbM#T7VBo44?f$Az z;EEW%m(mDnJ8+?_xsv$vCh2dPY|BYC|FyIzaAWg_(srnr%cGVrF2YQ$gDpxHJLs8C_es zL&IppFkHEEMJG*APwRQP93HWcp7#GoF4_=RoOK~Y^o3VWey&*?klEJQyu6mU_u%<7 znL0iH;!Q}uQbUar&w)PYG>2nw3%4|SeQAW3O4KYH+wC`~*)63GQCZ9aQ}6cL@8kk1 z%5h6O8o(bg%jDoCCvwmTy|I3eQuK=TI!#!;`I}_`S#Eb%t1T$aOx}4K#J0N!*|7xf zUJGZSJH!QZ@{pAm+)&3lw_JzG#hc)aNzC8heB>MLG1&CBG7So3VP@J+8^C4j(iJR+ zTq+anSX2UW2eJiUhaQ+4WKa=vxsw9Wh;M`}@2b*K!QKb*`Zz>AmNs3z*ty%bs&r5} zS8NsakgFBcXFiqhcjB4uORa^B;F(%F+cXv7 zcPU&zkaJZ6ND~QuDu}z3+iC7y=~5ppNAnXmh$%+Y7Ig z8d%W5V#^b|4Q$K&wCwsM=3sCKt*N&L>q}d@vTq5MMcz*I3e5+L;p&rg!GE-=@pT9P<~ z8rI{^qQac=^cN=)$Q6Rq1;Nr(rc$|BtX3HH*#`E%>#>I@wEZwOO#n+;9L#5jZui!< zd~4nTgS7FxtN&(*xShf=cVprozlBl!b284suJyRTOimtprXVbDv7QB{7&i*=+CWuf zf75Jyg!J=MI$BW5PYA(NV|WrXPn6?Ul9x5xU+%i_muV!n2rIBFa8Id)KQ57&@js9Fp;@S|9tU=t|81k3zR5 zs@!4oy@_>6{;!Yo_`cSak*6Jh(UMw}#JkL2&abCg#pWbH-L!nQ^G5g4I6w9Lwuf52(bb-%=re}m_=HWmz;e4HAI>|+lIQ15 z@A*bo5bD7iVxg+; zuzb>ZgU1GnRrZVcJIA*vn8tFpE8 zpqFl*rOuu~k4&IhJ>{o}ahD^-r)UMvOYT05hOd#fLv;0m5lZ-+ug@!+7;@xYJ*Ki< zag9Q;U+w?Z0<_Jm61+8sr=JP+q&m&Rzwq|tZMZgy_AGSurocX{keqqZH&1IT zK8CPDm1JDyY%bPG84@!z0#`M*#^JBW1S)XQLB&B!daF{vfm&hX^cSIqGR9&ZzG}fIWeiofo|?@U?k8%T$&3OB2|rLDwZocn$t0&D;x2d ziZsuZEtKs*_!BcrIpaIH4CT1Z{5On;aCF5AXT@06y&?8|FW`$=>hu>GI#iQ93^68w zOLq{hs&FAeo`W$n`OW~r9X200qcQ4PqR6Xa1AfSNcVlyoW{$N?-`~oAOg*L{onNDB z*j
~@#b_TPz;jCDb+FccHI$87wYH@&GvaP1_bdw(Iyr?EnZ@MO%pt4^OqhJX-z zy-t?MxlJW?jqz(D8wxOHLFx%$MEMx7C@+UY<$7S=*5&(*vK;2PkPri?`)v;;qEpwqulB0n6rYq;bLWo$j}qHf=g6}<3Y>NV6VY9PI+Zhexd=R{VDTJ3{{T0Z)HDil+Oy}6`u_41iIuYfy3^B zxX@F6q#5sKl_fzIs&I{-JY+`N-$7U0X<$St*IB>lbOL2Ogv{+7S@kb`c!u4JqLI3y|K$@27*Xx{62>il4fj6%OD7+mZ-p)aw7|p zL^L;$hjJw5usu z3L`nFc-Q5GtCYP+F~}~z>s#^5I%DmIR`=mFVx~kPM&gXD5FaHw$T$fSpPtKH^TEI_ zG_&d3X>aFD+P;~J0nNGKiUS3s>CU1M`5e+U%rLdwdkJePNNJ*b?O_|s`&Y)ccgEPG zin-NHAMP+f%iahY{`3&4K%LeKxw83FnkJNJFE}v%LpPy=!xgoeec~$6C3uUJ%X_vJ)MsFA08yb0#CM&>HmD6dlw^9YgfCagh>V`w&oFBK zh4-##fC>%+x|15z+p+QS4Vu{ve;L;!Y&rF$Zx0L6S7-TKr~N-YOOR;8DHAE2|P)!@oEAe!~L%3c8%+h-9&fNeH5X)RSN9;VC{*m z&E@00fW$uEaN4zMgqPhl=5c1IH6K{z@fNO?Lh=vhCUM_#C8SC9(?u4eW<0$Fz!?f_ zr>*sXqs0B6!s?}{neEmM;PQG7=OHf`75s|hK7%QM;Om!+BCaYL|Fl#?dCeTQ$^rcn zbwB0VFtY_$7B`&Q0=Qe~AnT>SARenP77{ho54vp={POm8bOS<30*we)=|Ha;OU8L;d z1iexbR3I9@K6<5w`kKRvNkk+Dc&qWL2rF!k&}ChFKLj0WWWSt&c#_~O5*2nN$>v5O zcRRI@_g@lVo)DEdgi)ZrMq+*LiLmCuhur=2$YN~nvE}R5D`AE88d}jI$a>c_NI0?W zd(HbKV9b?(rmRJqdyDfUR&4|2!6O*=OenhU`jItCeU}YLHonxnl5BXO9`OQc( zTe0b_9=2NT)(wSnr;mm5;e2b&7BeVJBetgY&Onn2Ri#qANKt*XlmL=UU((?z&LVxj z`#E6yDtT&uRf0b$xIAx%-8VE=n|NFKLtG*%)DSr%shYw4=RjjXmEZN3_>GO>H10F% z4R;(QAygaee@%&~;~=sO${wdh2-eFU3Tc|>YkNDuabA4JG!Epr`?<#@b<%x96BAa3 zyLlyPbri+7lggUv*pMWHjr-G)=Bt^_-RD4QNay?+mpa!=%U}mH-1EeZ@9rc+c*M>x zck)2|#Lz6;0jEpJxuRO7w}Fd;81g~Vy0`;7jw5m7=T>bUM^af;U70Fh;>Owqg=rR| z{o-6*x*=qn`v%o|chDaS%~I^q5nZIu8syaqH_5)2!NX;dP&OVJ+l;bM;CerJ*#r6y?z6^svMtVkM^kC-#;v4-D$j>Rt+~^Zup$dyXLS3i+gmT*Nh1UB9IdBcWdUW4V~)r-t4OOw@$w5ATfRig#@(ZhxB zD8e8V-p)+$pdl?n78WMUk~Zn;m92jm1Repw*OD{~a%EyyYWR)9ndr9ILbGz!i2xH> z4UV>93odWcq&WqPJFa@mV|t<=QoHl~A8kcfRE}?s)L>G|eLWTWx7REaR*u{_i&&+i z0*tw^rP{&2Nu=X+LdXtQ#Lbdeku`(Z}^yOI*S6 zy;wNgu;m34`osIx$K%`Nq!r5(^YHhx!GF`7eq$Cp>we{qpZvME=})$PK6tvNHXK6?JN<3e z?-DTG^m@javm^%lKzj02q>$fUayCmRO;yUG+1LDbSqx`Oc~as6SGDu6E&nyq?cY)b zCR@LZWy9CThEyRanwSFpjXE~QtoEwH%BR!kqcufb9WneY z=E5~i&9?T@JbQTq)_un!yC&+ z-DKZXHj|t%rHHQ~Z>aFiNm>otIhAfn^b*Ic)PC3|a>~iCIWl=Sb~waEVw>J4xjk-~ zp*|^w(b{M>ccnNr@-3Fm9Q{N;d%NH#@3y$9UpMp2sOEC9T(3SE**#J@uFIO((WcJ2 zZBp`0z_IbS%Eojj&#BBTe(YE}N$|o+wFyOAYV|hQ#9fcg&G&n&*n-=6%uES*ooy{W zr;3MLzs6=z2F0{j^({yIkTR9?ce;5Ywf$0O?9!QjfdT;3`o4-{o4mC>vKMY4xI_YO2GXW zBYMpqG;_(>m0rr9|1s*|QE#o+nJmU{`oDFI6G4dVnt8nqa-WW@{4++bd#gX;XI|@} z_tGi;cwI}fx0N!p&;7;yWB8w){XYfD)G~kU>jNm8Y+cIbc4eEKzE13+3%=hL++$UF zLUqSt<(X&*3rjLK*ZROgzp`@Kz2(bfZ%U8o%9sg~GwP8zk=;#Ys+R2q5S(q3Z0pH5 z8_cCW)BC}HH`m9iYV@>bGi15)|1DReq4-z-{uC%lf9k}f&6;gFiMsiYYS-*=R``w? z)sV2cMIMIudwF<`Caf>K`0;NsP;i%KKn~I&M)72Dc%^iAF-6@cEVWz1%lOZHx6#!F z^y}P8_iWwEtE#boL_I!U&DnOVq+izey`=57I)6;HBW=l<`ty&csIMZeZDuDY7nT|t zjcID$@t$1jOg|g)HxF_*m&Xcmm#4krwx~dKdK+%oOa&A|H-f+4b(3?h>XQsQ*ZWac z#}anE*yVoico6CDMZNozWvO4Z^XLEn*{yEH!E=bF!XHDHm{(! z@=(UnH%z#CbSxsUUmFn;*k8BM-e2=+?C7va@gc%;S1F8gwVnUi>JY8w(a&HRztB?U zx>ge?*BNp(`rpj31V*Ydz(_W(9&x=(xnw2?0Z!(9@)>G)iKljx%Y*;^4ZZM7Q*9Ax zxBQp;-g-H~kVRmnH|R=i&A&1iI_*7DSZw)!0BAs$zeOKQ>(}%i?Eg*WQ6E%(_pY&u zTmR?pcKq+;{->^Wfuhz5eQtqbigC{i6y;VZMyvP={V5|*EL@`+aq~Iu$2HWNptbb4 z-+Sm+DU*0yO%bE9n_gJ*Gd@4qK7gK8<#tk3Ll^9j?d4iye~{BTgPc{d1bOJ5_N2 z85{pl#8I@K)Kt1(>YvF}(q28suRef9b)ipZhH6)p%V<4VrikCslJ8t^p%qb1 z75C8!IZ4N3OIj7br%`(^^En;qmwBjFHHBvMMyvM>t<0wt@fxk#=M$DTg|H!G%3NXWwIuD`qW<}={G3q#l<5b4wUqV*;6O%6 zZrOXPA`-2HD%6sria|?$(@H;<8!G5k3W(!QYK_fDtp<&#HLwJ=*2Yq+Mq6r?GgIqS zJ!)04a$J3Cg?Xq|Hy5>9sroT;2+I)tm^;L|)%xltik{`@Gu8Wr=%@~I(`U5xp3+mn z(--u#M4v|}qDuw-RC2!}e3*F~KHpaL)O*V-?v$ltDL$p+>(9vBPdhqjtttPZt>gCr zhoV%G8TMSe59U}zpB?VP=pW`+@r|pzqTM-t=6OY}ebhS1cin^B+E!P^CuoV{4>NrV z`>FP-epX~YO0C3k^vUP2&1B#1p;k4{D9RaSIAaE9j5jh;`ZgO&t6Oa>tyPVVbT($H zN^3fyF|AcBe`Z-HFU56!MV3?0&i>;q+2J?T3eKvEf>^5;MW|jR+dZzlm0!Kqf%?c- zj9Pa-rPjs9)auHkzmT2oy6uTri@nb`E$JREui!KK?(XC zxU}|ERUB6px*p`?pFZT{pFZRhY1n4vq!#@|B3{fdp<7DdUKdoOUwM5_M&(sGRO4Fg z>rIxv7gvvA=n!QllgUA^4R1pmp$?MB8Tde`}oaYPG(N z?ZSB8sGE^m(Q(uoG+8lz^61aa^r`aR2pmE<^{1*t(OI?@{eR58b$C@r+x9(cCAbGI zRyGMPVI#qcyAz-Rin|tf-FUI!?!_Sq3GVLhPH`=+r4;zqnpx+$c7)vYdGGgmzkl}e zJFc;7{2E!aO{<_%7G1QEISR|DiMFz3BbIzoJ4_9*;V=0|Sv*yM#v;fR>N6Yxu&Bn;}B@}0O zF;anUB_w^qtnpGui2r%msB6_e0W|Xw7-U*OC>L*;-zk!A7;Su}Br_lLWH}!a1l2l%T7ahhu19;}`fn+pc$Qhn@7(i=?0FRVh(M4tp9MYH3%bO;8xQX6{LB#DHh_vRQ{*Flv(ohxXRisdRnpgcpoxE} za`6<;v*;ErNXV6NurV4+fBlUW+J2eKt|t)lqkAf>k9c|?wEBuJj>tZp-5A?f$q

7l6jxX`cqHm4p3p!gyxBAT3X6QYiT7dGm1Z8Q4G4akW-5QY^9~R=7%w@to ziu_%_a_9IIcZ3UZm$)u>j*pkc_|ju1c1R2E0WElq5^A3Xw7i_KMvF(~Fz#}ol$qFJjKW%7@yPL(PZEE6h%6LIw#gF{UU4S z6!T7^Z%x~Qa!G7h84rWpbx|?L4-P*Ed|9k=?w-qq#`?`m=B?9BO{A2RVKnE3Yr>)) zh6R;27$F=HLL9p%q6zW1KV$75RypM^w6*xCJtBj)xRU%9PN?r z!}9;O_FFLLyQslW;c{O48yeJRy0w|^e@d+~QwwHlS;M7P?>q9liEVtvcjmGt+jwuL z+caD`Hwu@ozpJ!0uSONKzpHp3*iu*9C{nJ?gH73brsjVNsfC71t+n*`k)?5w{?>;p zjSkY^z3fPBj~`ZY!;G24OwB#rc1$-1?x;)Y?SRuM} z7qJ!JJc;7&aAh!4`m56h zsr?Wma%$-rODe`vC|oS_q`$7MBev71Yj7*Ie@*Qlh133b>F+Dk9m8~=hD&#OFznNB zmsJeL5`(e$go`Ce`kTfY45h!8;c6x<*gXw@*Xg~{#b3&;7U5+_@!fAitzc#Wu#mQ@!=|0`V%Bw6}cC53|;AJ=s zjz$>ukgk)uL}g1wHJds_o2l5rFjwy?wE*r_eYpKr;8iG@&v)4 zJCa5u!U@L?lH-Iri*bmBUyb!gFz6}iRj|2=!6~=qc8)!@edM$46sI+7wPS{TA1qHj ztgsHTyND(}$@t(;#VkUQnt78j2KVn{h$_Ef-zNoERJTX*OxW_L(VwSyln|%&XC~_w z-CKsU?NU?mg$(p_h!%A<>+b%ZS*j%c#6XLj;(11OpT;R}JW#ipJ;l2Vx`-QM(#Ng3 zNF*tLZQVM{N?u;=hCc%%6FEX6=OeEqq~R&@6h}S= z_(J={)>*!%X#Gi8r+5PmN+v_pq|8ot24&Hg3vv{(ggVF&Q0kN$41k%saUt+|3@fuwjB55kP`jUzq zM%dE3K(VgDH3R*Pr}oMB!=J}?(7|k=El$wkN}xpzLFX9r`LU37?E#8E1*JRe8fsy- zbw@M6HElX}SZ0^QK26;$+|PF61f~bqR(1Q{1jrgcHi~7C?zRLQQf*lgZAem78eBNErHuR zr7CGwPqAhD!c^}u#^<{zq58d03$+e`avs&K5T%PF?Cb8l>I##RE@5?>3W|r-=bEX=(>Sn(@@iXq?wHGBSTarJsSx+I|_7yvM|cV zP?nr!5H<`neK=?mWj!gYPT3X8%8dYxCuJbDA^pt|YblE}6y#63$6V&1Y$s*CD4SIW zH2P;ySIU}FmY%XO%Cgl0^(JYg>ZHs5paqnTWvT5Wbs{Y#)g;{_tzexmVms)}n#so! z8cTnJ>90EddC^}D`YTL-ap~_QYb!td$CbgL@@#AA*&^<+bWW}r1_*TteFl> zcNa_YGILp)x{PBQbD8s))UPJfJzp2JEdZ3LHhT(PXVSGDWi=?P%@9x7{(LDrOj#(y z_M+?04LC-W06qSNZL&BhFa2eszZ;aDr%Y=I`in9j%F>hsU1cxZUIe5wNB1bpMp?X~ zpzf48DeFO&LL0+1le$1C1KIxD1-j zmea8?=n!SID0@TM0m>@W0llQGaecPLVxYU!;3_rnqrY7A_cvv)DD!6hre^(Cp{z7z zO_)Xi(-=qDFv>PlwuZ9!OxJ_yUZCtaWkHlJrfe8x{U|HSzA%IB-ixwMl}Wf=9<)i^n?_|`L{A@04X(T_d?j?6$3#z->?=2!9w2r53I%1TPgu#Fj_+5oH}urBiynX3y?Rnj&uMQSynLR?sn_?(UHD7c{+YOII#}o;AjDib6zio@%P+he zVQp}^At;CC>cbpGoksMoJC|yrfs_r3ql=~?QKweNb=Ug-!+m|8$5;WilC&T%?pP;Y zhI8kQ%Mf#&ve;Mov_lu|UC=F^i@rfVVvaxw zT`=0;1nIBRKut`Qw0#0fd@1SO1l)IA*A=@~eeYwvI^sTV7|iCKoj*1xGV1ZZW>Mfx zMV?~&KLFZ~V3l8|nfgsZa=WR1&%s&)shy90mOe}-(rUFtFvvY~ukXGu2ba`84~yP4Vw z((10DTh!jnxk-NF30=2e1C<{K*V5GaFkP#qNBc|R0L5+rs_zF{pAqzOEk^lr*U^d# zk?L?CuAl>SogqAmLbiiDfmP_Q<9no$V>V=K2E*Tv>p){TrL~`%6d~)o7CQp znX)pZ<#g@DQK~rUjuUPC*#h0NH&%?rZfJ{juzglqUkaFCz$5Hn*48qsw)}*bQ^@lG zKVg`=7Cns%s+bNmo~{)vnM1x0r{;KkGiuv^o}$n-UCfen{i7!4hnO?=UwjwhB){+O zPT6An)d-6;5i_n42N+G;bX>TXS}kglGjBBXl%z&4xt36zGif@d`mEU7f9 zsC7za+bRyBC(^~*5ZF>_X-g>@xE;1i?@4@decC?;-9*#(E6$9j{wo3^(}+ttq`P_UgB- z!*lSe*wF#E-(yaLEHEeTVqdEbD@|BA(!_!BaQ)M=+cnuDlx!ZUd|l9yaY`%q zRaTB07$f47;@-f>zh)4$H*NF|@?;=!h_LPwdtbyHkn^4AO6{`#Lwp&Ea?Txy9zU}vRxF9`;Dn>kJ&rV8(WA0kcAfi) z$)ctR+hG)_wRJwNPEizfONy_i8<8?4*CNFi_YO*Y+hu%{j#j5)e$SW{%`Eey7nX&6p2AM8_ zQjmNvqBKH7)Qet5+t`HH47yj<#a}YMRo1G~eO#;4QWu{keLk$#p`M~qHC^ayOiE>} zO=C&gbVwKR*O+x_e_d1JhGu=qP{C*$W-Lz8gR;a9$m;$9ncf02L0N4-$W}6JNJhxM z7E<3@MxBr7Pluz*Q4AwTNhB>ba+G3?*%D8j#JU#b-VW^6sXtM@%ts_^j`s5F8j3BxX~THX%Jra}XF(&@f%07f^`gHs47-c6xeO6< z74&im=$8wi8SQCD2 z|28FF3$1qm6r1b)rOEO7Xn}j^GdHcf3r34DMy^aU4cvC{!R=)vwn4>jTc`Nehf21lv(3Gav5dy6H2$y zAZ3Gii@etO=gk`Q5UaDHB<%v;2vDatX8+F%&pMPI> z(?mnr8*f;x*hl>RgJIXHwri}8TT8OPi>^HZ`&d_=pr>W z%URh{b_nz4Sx*_F@KIg#lm5E9G%H8n8^TOu@S5+7d3dzCjAn>H#ysU;g)ncoy$W`( z89Rh~ZQU^1pQ^!bt@veZGf?<4of)A_Lya~$PlkQG3wBtWE5gz**;&oHZ8&2h)>e5v zxf96!zdc+hSLVuV30KEmxng$AfL3;n>^p&Wi;R zK;`)gPx6tx*OwM$Ff}#&b?O8P8V9rliXDRgjhz46ynSzu0$ls}65D$2(I%nx z854pk@>IG;Do_cYPY>o!QH^}uaV52Gq{t}_{h_{nRWAqqz6Rx|EU3Ry2&=`G%LdA` z2CX=%c3{{3yEUL(l&$#Z`@-fz=x>Fs*RZ4N zc}}tT54>lDu`cSdvvo~fESHqh`cBSB^B~4G^Gz`|-kW6=wC4Y2ZAIPczAn_{d>(!K zbH6!yZYoY1{_d=aur=Xj1Gno^=I@$#5$6>(lIRwtCfU0DQVc-M%V+=wMB2H%e%i%d3P|`S*-2N zTi(i_`CgS;!=Al@QE{%2u7U<$LSLOiO>O;bo%P-*aRmf@(t!7ZG3w&>63r7Z9KWJcU<*vc-c@cGqDh-D?!0XsVvnp@cIlDwVQX*a$kg7O?Zl`h1vBRRehLYA4SM-RI;e*{DJkwjjHo! z->7q=PshQiY`%!A=*=$7F7J2a=D@sF=#7=)!a{z{6`J`9k1Cfd2SKm9fnK&iKTp#V zgf?XO84Z7_c4O2VKr-JTQGNQaBN$&AacxyL2}W=DGfL<##=odSyxXRKM_7&iG?C$x za2toL*@Zpe{4uricZmMSLA?)ScPlsdxonx;f14Bm*)78EM}^{{Z8SK5y6jQ}FYTG_ z;I)j;d<)5LbxLOE(w5m)pKZgz)t%DrLD&zRqki@UnX4yX8DC%)v?jlKAmq&{DvX58 zXAr0z{q<~xTt?M)KO91SJ&u6tZO3<6fqajr_Eu0YzP{Xtu6_C9@#nRmZtFnWWwdrP z=W0g$kP0ngFKgA$vMe2mOCRXkxRjTlVy|*s)d@a_SQxC(Yju|RvmpHnJ7y2!konQ0CBK02L z)ypWgG_-h{k}C1_J$#2|#M%!lmJ+NF`zy7fT=m-D&cUY9M4K(>gRp4~%W{!s^;Odf zQs3B_b*at~ZT*r^tC}R};-IFsF8;2j&0r%n;rl9Hl+9|2ZzJ(FjK3?+B;ERc_3K1M zM(;Kjj1{C-W6HyZgQaR{>V-Cr^|V8tjVb;1zXtg)Q}G$AZPGAfosw9#wSRuWNE5!q zlZS>cN!t}C1BSi9)Ve9RtLt?MQW+bQe))$F@jd9 z_|2o8+PE{Q>8NVI%uZ<9J~qhK&(=Q21-Pafim)F_!qv3b6ea4R{yW4yZ>tR}SC#XW z@d%N=0oI{EjezT)B|&yuOTiXakG6c|7G{hLw@?O+eKE40<9``c;44)XePE*xy9jEv z0rZwHo3Tqoi{tbb}r4=tkm7c9uts{ln+5MH^ZMdcV|+@fqwt6 zTuQSYc(NTNAq`oEmF7fJ+8u~xS}?-i-3M8wkjO3e-?t$<#QYkVVJzstOhp-Oj$MeaMAxmrN05qw?y zeoajjm$`glkwe^njoPmrg)aZTg(b}{Ec>shQ&H4&UcI`Axl0^j%`PD+Kp(S$w&npH zD+k(6fB(?mZu&b(e~lUQj%1*?4AGh)mU8489*DkQmtl`31zpVoYQeBUR%$+6>-xxD z1CuI+P8R#tAZag%mxu>=#ebav9DwvNge~V`6Gh+_TRwC`8TTU>9yD4X9y^!TdC zu%+0VvTkeCPuWhkY}}1<_xHnN$T~iT6$#7S-QP&c>cv&0iL5K3 zi@nE<^|`%fcZy%P3+vUA&9o>^9Kt)017d@ECI+?51nS_6Il%8Itd?#3Cy=asWwU}W z=+|qgOS8wTmq+k^No`lDlejr`?h@!aDcwof7TFE!zhbC-_dKyCs)f4CG`EvStg+o+ z&Az+~uZ-aBV<+D}c8V9>b@?u={Z6lnxmIZSl1#VlcdfS4-&e!-nI|>)%u_9Uhbp5zua?Gc#ekhCKisf# zh-2+Et98ERn=*kqh#%ZWWh*=ZkC*Wo2?@hzrgNiC<>{_{}@qjbke>*jM z7c8oD$I}9}+mOAlhqFbe+_kF7R@W?4oi(}C1`6lP%7vD+nj%Ie*gcV-@l#doWh>z>{u}88M7(pw;{1Hzx7KD>X`}D#W&*Y zXYWh7TPXHAxlbn%L3?B6dKRm(nL9wUGHMo?y;kX*Ydo~qG*BfcXkt3hnjC03b{e(@ zqdS5AeY*LRpdIvM>Govlc46sWEeo1f4fLcX$k`s$sykj?%WKs~K9MR?&1mBGeZ16v zU^euN!E&C=a<1cxl}+UOjXIV`lpUeWj8D!=y)=pySVkahHcb(EcT6wnHGMYCMG=qGdOGoHJ;r%($g zI-(XzGyyG2jl3<0w3p%Uy1pB`un#P9%06hfIz>G*fy`ECkGqOq(qDi2>*b4i+O8ve zWxcdV|m;|K0ffqioMhINB~*kI^K z5yo9(4eNsJE-4PvNFHeq-foG;5aol}Ida*%&r$ZsWuJ#eH*#rWU3T5F;V_129K$q@ zVMZJ0ezrI7WSRSpN|xw`?xvM;Ez1A9OMU@%=Z^HKw>{}agwet&Vl+d3$0b0mhL2^q zj3u}r?(BpW#7Td2u{gg|7sFDx5>cy&vq8@Y<4c{mIN7uJ`Rx(O_Gho{6COos1LuOO zWQQGAhZMb4+C7fC(d`tQQYbRkmb0P#WZrAKP? zzZka-_w;{e?c4vwj?u!yZTH+B1?;{*CN@Tk%t=7cGrc)##9DDr3<;L^Fb*^YagPxGSG@|*+> zJMnGX$KRDMA1E(dXA2$YE;IXK%yF~^?WzL0mRpfS94d|V{wLm7G53p`%U$f=+jNUe z`@T8f%UvGs3|IYgOpu(J9tr5;j0?({3iK#DXq^+(h5zhznjw;;1I5k(8q5-U#Sn$! zfgI^Uvl-%N{?AHd9W<07{$Yrn4B_F&e$L&?*ZfbKZu}>jl619K33e@@-TS-V@IRHq z_Axb5y|bX!q!Nc%8l>yHF`nA9Zm-zrDV-C8nr8yF@&%=Fp~rvP4XQac;>_vE-E&Xw zo_lil+>?9eo(%Ero?_2=s&BQ91G<$=eA5PTiW&STID2RI{9yFjah2WQSAG@Y)b}y% z=i5DzH{7Ap#LIygW48~`tg*z7C9-86;A(39OQpXn!3c~X(?1BYGs4bnRJwdUj$OZ+ zBOuGb?*s0Pg)Xr_VqT5i6#ve3(G&E!38;lHC{7W)!20uL^(wkk)Vq$JXSYOu?vK~u z*Ct;{_D!~rymx5ZI(hU=391tZqfgVz7-L)iFX^Y+m8qYi z{yg6@^;1+Q4#x5397Qj2RGCd#a(DqJrKP;g&NrgolvVejs$D87K&9CUfA*QWeX?wxt}C+dBzVk+HTSKU)m`xQ9qaf@SF;s$2%)n=TKr_X_fB?$@b)jpJ&5cssRs z2*})_S5)^7$o|e|e;f2<pZ0EP9^$aw*ocoDeBh4mz@`D;yiSI zJEJ3RXJZu0n69NIxY1OL5Wn4@(}Sefr|Np_Lc>Wtp>W=5|pJqsCIYs zP_vv>K8Ckd>E@F)sQy=>0>28d+ggXKsNd0Tp{d=5d?_=_RLM56ob9vx3hdoMi4b%A zOrT=C{j|5Nd%9}2Lc0F0ZL|;mNeg;Li=sb!a(>S7={Uzv=N#`(t6&iQ9iYFh^!Jti z!fUU_lK7cGruK^VmIayGt8ob0I|a0N3TW>X(B3Jay;DGYV-3bNBD8l3Xm6~Y>F)sj zZKc1j^f#9NQe*(d%gL~o#p5G(h2Xp=!zOi~%RT39Vhgu2_;w9ORd4@3mgw8T|4Dpi zPf=v{6h&rF`G1jG?e3r-`+uJX-`oDobidUS{asy?U>+=!88qG(^p^jE_J5M@-IgFT zzlzNKeoHGg4yiTR|7N<*DAIMO&`QFZ{cKysYY67^6r|Lo^rVcW%%tq3+@xb6SmBQ0 z>wDjK|0Q~V{=E0^&wKy=ywC5?`}|Ik(6GqV&Gh~*!*Y>3q?>qVJ!&nio0_z9Y>Ol^cWm z#okx3?lw;-m44<4r6SYfQDmM_Dq2?t)VngMaZAwMc8VOL?F-0uSeBN*>j_IYg!#xr zTe<#n-P(yMXVkRH(Y{^6qBpxi6$0V<%pYXdc`WrMtH1g#P!sKbiTKTORQ``;ci z+Z?Vp7&aeW^Yitek#xPsm?v280QreWT|lACM^1)V(w?Pp4`FM2!rxK)OVRGKe8A zpHW}`Xe9S9Rd7BNLyR|C$$`+QUBm7F1;NIweiSjk{T*Mid-8jBdrxpP_tx*8LO3PQ#y+ojDnLvM^fj``_ zv0o#JS_Awemb*VYY-j2hn_8vfOL6~JD}UGX{leP)c*B;x*l0PMq)izA09;G6S3Iu) z*X(qiMAx>R;d+`eZ(__>Gr%x*+7|`pbX_f=A5j^Tw|-!jV@h3anop%=jHj#(9WQ@85B8~HwQIvPy>f( zWZ1x~WZt|pgX|FYm%y8I=#gAIc7z67uY(%!AMzfQL@P-grim+3tHEUCc|YGz6MsnU)7Q|&T}gdkqFm-=)J7`T3oXo~AO19YMwqGd ztTWJlLL1PkGq@XSmqGqtbP+GijCqRDj}lATw?G%kWqi998kTdI{CBC&y7*Db>@SAx zuhbSAeOj0KFlCCoj9mJJg||Eqi_w#LGsJ#zXG49+Hmub}HtBEpRl|~&@jY;&go?~k zWe`4_D`wv z(vnI)cYh!M5TdH|_b2@=DTz}1k!98W625pfUH5*Y{POXC6#c}`CjxnUf_(V>2|7a8 z^nZfw%jnNzYrLRg~Q)y(Y~hog<}TSgj2xfkob8co#L&c=P^& zhxn3S7yecB*b%|??S52kA`15tqO4e#wqkh{Xu$9P(I3*=S4p3 znEO<~2@GV$=wYPML(-=bn7iW{8uXR2@dI(gYC>*xKig+LWONFP;*-1^fo`M%*=aPi$WL^?hc8mjd-o19DVE`PCy${3&w%rl_T4{;uu3>k=9h zE3XD?)z?H0@w_u+_A4#Bv*Qf|kloLnB4uIsJ`tBC0QJ8dN04$!GDRuE%7{ZR1w8K~#PL2>uk=44GAt{da>VeURVkmzq ztg-;wJkrG62o{Cux=8l2cmvSOmem0DFy@8Q5mM{7965@dbM@-WGU+cY2Hp$bW|aME zIUn7&W+4xeIIAW?rN8EnQT9ouYgW1_dk~uxLt;RTUl1SBz0MdTsF6A&>=pJRAZP!d>o0PUkLF^rcp5->TN?Kgn0J^-;(*$wft7N zwqeYFu7`eK=V29id=B1wow5V_NO!%lHf=Ibv-F!9tyb%nK^Eg7VzzT+>oT_>^fTvu zmD>F2ptLJ>iylvftN>+iDJ!xIW7CO7nBQuxg{CK&nm!%6#K?hiPR4!F)FWWS9ZnAI zX9VJ2%jV?nU+TRN3vcshH!P3$(o%hSOS8zdR23D@s>t7!eKO+fcFw)j>=o{(FsyJD znJZjH<{j5hVYo5)NtSaa9pAY&G5Wb!Yf=e=Vyrd&ZHlS-mWMdBRPE>3VLh0d2h;F~ zA`OSw@T(@`t~IH1-^i<-ZBhaZ}KUQlQOgKvVN8 za)|LE#`;C(GI%J;?{Q9kXov{;UJA^Og*NHphqd9$Ag!)SD8Myj7sy=kDQa{|x9D71$g-S)%=aiL#aYU33X4_< zgg6-suHrUamu`ft+AGMuFy^cQ2wV0mT*Hze46-hiZ8hp#(c3ws?Vts8J;nH5hk&ws!8LIfP`*5%VdX%Hs)IVV0xfM1n%)Bx z&>z%O16_zKtopUvfnC$RSo@}(qi(|3{$BW@g*_XL_GgDMcPrA%c52?BQ@zK0sY{Xh zrM#l3`nkC?tEli{>^BwQ>s@_TVn23HPX4b}PMi<+6re$0P+QsfUqW+^BgD)2%AbcE zZ55f?3prZghPa1lupGCPJ10lX_lxkG(O^(RFN~*C$LPXa=KLbRhYd-EQaiI)lOvKQ zCXLZVR!R1^0CwpP|B0_R4q81%z0s{ z>0c9INB9ocEGyi$Z7~zO_khd!Ram1>=L2oa4w~BuH2)qc3+NYyc={ex-mtwD9X|yc zZ{%0e^*f-Nb>O<5^f?cxMRHL2R|s)>7Sgy;0j}}sdj2$AJ%560s?ng8Wt6MRx%E$G zQ*=>W_2h<{BzM>MMto(Y>*2S;qVk_X`#ymx#8m#gS?BJhJ8`;dB>}E?*Mvm_ja({P zRvohOF8JH`7ibv$4ebPfNxea}nt?_zZ0N6$eaQ&g(o|UO)NYfJ+pgWl9pc<_%q|If z>Y}2|o7uvuOMgEN$J_MLx2xlI5MtL&_%lP)Uh8geIKk)3qvK{{q*3pAnAWv=4JWp-%AYL# zLyJhs zi=u^{+ye?B%_emrUFW|*9wps8jrg4W&&d*`A4tbV|nH@vI% zU(m`anjgUkw<6TAzt@^8%}M(?lYB)}7Ev;#+r7aT20?qw}}LWq0(r^z~` z1H3DQHySnZ4_}L_&+-0MH{L?G#$sdb@=&w(>MK0NzdYUOql@ip}|4!lAWh8>-E{(w3y#-F0zXjoDUwe&Uzwx;Pt!>{2+HCgy)dy0IRi{lV4UU!#rC z%FEh`aq@q8jPaiB`Ntm6YT{SCIc4X!c~5*vWA2-oXEFAF*7=CNJ<-CH9ME^^mB)T1Do||BAX9<9N(< z*vV2d^R=URQnovZZnX{j){FV-q}rEXe$AMZ*2x}lPP1gYEOLtATsUbM#q&n<`zU1} zm?v1OT}AZ*e^m`{Y*k+&L~@x1{HYh^QcD?LrPkcu=eOT#l6MVcKFs#4^fRq%6^mIy z>NeW%?KQDgYH&QJ=Jq1Jsb6i^!3;P_I+a14aQKOvMKy~$#s;N{1M;Y>Ta=U(&mv>> zS&Zku#SmhMm#|#hl!R;Vl5lNs5V8E21seRCAC#>rsAeh9ur#2UO%O}6rl71T;o2!1 z=v5xjT)M_0)uX>_^mnHmD5yGUIYao9`ZDZ44Eu~>H!csJF_`;o9$axMto7 z*WpRw+L`s6hpxM+^8jiZ+!?M#?xMvujSsr8SKX6wzYk}&XVdcVrVZjPN*JX2V848t z@R2>GV*$|9;t1Qg98Qg{89hFmbiKO-XG*Dm(d1~M_7CpJ)%L6RnwTlmIG9uyxuvVQ zE2PUC27f(*znzB8`J}6PLR3gn(v`xB@4fXO&FcI}jT;Sr(M2(-!7l53&=~oRG|EU> zt?L-q3I+;m9-Occ<64Uih9xci&0LB1)}@6k$C9iGG_hWeIejZDa)|l|G*M0Ja?Th# zP5lB~L*K)GIa3k#%YITex*mHAdUpV>XX9|cZYF5R8PKMRu!eUTGlcq|5PPQ_Z^Q?< z`p}lTO8aUVWlL$1b+W7=Z+V`l$UH5mEpt?OsV?eCx@MGVBT19JR7rZve;`q<1iO*} zu8z4ud6Vi^e3)mvIlFjs#_<-hyfy27iCuofeQED%COjZ3UF2J ziF5~gK$fp3H0W{_y9o<2%4}muQ4jMicbT^)EQQsbr zonY9J>p%hBl)nI1nX+7+a0NbzEB}F{(z8I%xCeERROcLAEAUJ%o2GK9iB85GUr3fl zYD4?pl6p1LtrljU-l(wsSF^o@qQy2Xp@{*q7CNp_b{EwV|*be{HCXA+ikojG7)I{XKjstgt5x%8Uyp7_jJ7ns@MbN0`g!9d2lxH z;CS!BIlx2qh5K?%yt;~Jv?G%oq%$MndfmGH>A`uyLsTMRhHy_eUv;F`lkwe+!k?{Q zR9gL617S1N1pQVFx%8-unaQ;8)g0QajV8v*(&({Omu*s|F>&30uMBLRF~fRrhINnG zPR*>}=Ml=!E;Tbbqn+$G3Yq`4QGij&I#FGt|5-=a1EmN%Nb%gLv*Ap*+%5o zdk!ew3f$mqW7xJkrR-I8T}+d`;xOqFX}7Vin6}Qnwv1J|VI9tvJ<7ChR1GeAi~o$k z$g0Uc6MjEJ6OU7?a~JhK$bxm|%KBa~Z;7%#>M)mGNUNF41cyMs|zsk_`>l z6_R#*#kVpWe#3fe=5Gj5`2+ThCL6W7Sk}jroz&_OXcYTL=zdUXwy^!TAR8S7{np+P zB3Pzjo))N4@7@5-T1Oolt%F|gr7)DUA&SYM<+7DUpEho=m`rc zOFzIhwH)lBCS@aP;C`3gY^O?Q?!#@DpI2Mf|~Wcn#X;7xt6w>iqA*BytG>C zlEMR}F*hTqN+S0CCeS%McW0_|cV;MEQ`7Z&YVMMB1l6LyAi56u6?C4ixf%0khHXyQ z?F^faVJFk|DP2p@bv<1ZGUfzy?MBz*44a#-i|P8Au3hQ6pRVZ{^CY_7qib=xE~0BJ z?szpzgLaVB7j5W6C6IqZMRi;&E2(j)j_WunZ9`DzhS)W=dqvLF*rSET;}Exu71|!z zO2+O-t26(LNx4?LkDYgW-(tfh!#a{7UWBTz8{Fe7_!`>VF~c5mh#&HEPsT{?*lLW$ zDh)ebU!zYedmQOTzxQg)ri;-!?J=2D+bg@keD#brX&xzGevC9T+d#jJf53I~ zIk@Ji4>G?4vgQ<$`Mr=OBORgZR?2o#w#gz*{G4B{FrrR33Db=}mbJkk>|#4)%+FW5 zuVMdFE3s=Ub26myn0v2dC_6^kh^#DA%KB4Qm9mT6?`+OkCeU9I%04qh4^mh9OOk>k z4P{;odx0T_(BCHdYef1&U8*x|CWa_XYRdR}(cf6QK4C1Q>2DLM5&fN7ff{^J1G4vx zK*N6kC2Gu)q--+%WuWXNWeq8-F$-y|rfXrkrvDAD?*k$GXB1@TC|fp-v&KBu`8AAJ zQSA+zUmhHj<5m8LxWjic2qCIBRO@6<@#Uf>&a5*j^Gmhz@)U=9>DJ22Ug6s7yzb|) z&NElDDm7ou;^ub*^H$;RvHjrQ>JVmbHDSxjPDXxq|?u9 z;-b_F-^6*yZ{n;kl_z8WIn{E^IE7vaaZRQ%F0UqT8I(l)oDivf$sRd``Kq2G^M6c~ zKl4kt`!bd>#@PNu(!Tl#VcyZ4EN`%fr4ZJ=htE3t>R+^N2b1=bu8{mm?b#ywbDgr4 z?YZZB&}yy+pEGO_sSRl=>B&is{FW@hwIdH~{yejABG#@tWQ{nkwcxncm9pNHRivys zWnD6HM6ym%0$kNs;504rIBBej%fVmMmGEcYh*z#3%7Dz<^j2@={5Fv1Z-r@%G^GtU zB@JRe-X3`~zmrq0g*dkVNt#AldlR(eCSqyTAF(XtI&UCXMQM0aI3NVBhw?$Txh!Z; zLQpHla;zk%5^L*n7-Ts)Bc}9&YX+{eat1@wN+nUhql;o+^egu=I#q*fF}jYN3D-BB zK)((E`LHE!xCyEr2&exIQfpS?UU)?&UxQNlh4H87Yv|gBs-FzSIcH z%1{>24D>39Wlx=FQRlX+P=lB5qZV$DW?x8*(oK~P-*V??t4r9CQ;hkE zl*KxcHTv5!P_@ILL_Dvx|GC^g1*lJ2krZDygk%AoNC8UC*Ex1h!&yR9x+EWoUE*eO z6h*C-$4IzVi-U6MxDsVG?HBB=d$U~Z@{9K~WcGY1ibM9f254UceCcTKU7O#LzL0xW zO_xIF?j_-GCBF~t7=jY-%C`w3TN!@h68DkrknCBv>HWyof4c{uWTdj(W3+dzCXtRY z=B3ME`{Xf3t}b%zXP?KL`{?S-=Es3JpRw1qa|dF#C#MT!uQ{E(v1RX#jGLu)g&d+6 z&rM@kYt!1UPA~bjHh0E;;%$eg9JxHX*F2^YDET;!@@+Xq@xQU{nMI=z1}38 zdN{<`RBF}c!CLj;Eej8~S~aa}rM>wTYyugJc><$iHcwy_O$flgfUUi)b7`LJg>FF1 zXLz2{#CkcySTVEhdUISmOM1z9dOGQhMeZw2dwuCz34f_L2c)1aRgAV&7w!Q4LYr%O zK906r&{%)0m~ZlBN3(Yvu#}b)mm)^p}veaG3r|(cd`wyJ^Lz ziAFq;XfPTt2n0GXn%OHa%&Ybc>nDoxhF<`!>lz%xLP;}8ok#~sw|TD7Xf9er9$Jjm zH-Jj_hxTU%LG~&;WGS9NcJn%GVLEJ|cR9J<-v|q3#YV2~W+9d$vuT&G&hxLLLM$tXS0KU#r)Rc0M4E&85*eBAgMuKa!#4j0P}+F+OR%k^Np}6r9bm*C#|G6+~2_2 zj-SYK2B}>LhK2WP7EZdBZq+RfW?#lV>Bgs_Rf;p1qlOwQptf>{wB9=8WSFT+-$zcQ5FrYsR<$3B8SGQN$JwWdGMDX?zr(mm^s zlB|{+bn`LF<=O>UX{8RMG;C|`$UvM@%vh~kcNRyl#yy@ItK7flRhI8>#vETt-e8aU z1moZFUvS4EEzkF}*e6(Qlha3V?{Gcn_zBR}bzBb)2W6-WI*}B;dtO7F3ENuD*LBO{ zE@HG;$9g$>8#&J+Y3)u;wku8iv0afdADu0BJumHSXGX=%r-;X`g>I?=Wv*%=MmftmEi?i|22%>2DA7`zKwulL~SdacK|G z?+hD@X}o8ML!^=n8^W+b44Z^uJ*eM#hONS|TNpMzcRI>*&!`yb%|PCc;n;rf4QD^5 z+mN@_EATG12YY-D2S--!1*N0Ew5=d3Mw-Ms>anQv4$h6gb6!2ddG#5ss`;EvEAfOa zJ7?XToLBQx=c4?MARcvY#?yi^)OiuL>P>Qy-m#YjQok$IY9+PbK%K`>)4bHwi<%~D zhS^~0Nxa}_zdwZgSDLsrnBQ)rc|L)dr)ZcV%$uWX_ak>s zxR$5@s?62mS)>2vlru@tV~ptL?uYU>$Cy)`(sj8(ev&R5BVkcVa|~;7~mXtfuk zg>gOIxEDu@&Y-rGEu*Xocb>ZM;)-+!=sD-hi-SNPDZ9fJ#$C#eQub^-s6XjX-s9Q8 z^_v$*m0Oe*VhBN3Uyd)w>F)*CexfG5t-UYh${OqH7JhW~Hmo6lk!+nqBg7j?X90 z{1su2kNPVO^95x^=DW^{%=e`f*7`ivp=R#XdvR#_LTAoCX?U$=u)L zw!ciYzej{Fns{QBt}*hH29HATiR$i_xo@V{2KGLtc_wVx)J7WFr1ss7wQ~!pOW=9j z$m{nK`(dkU8l#1DwcmBdO$qniGCPghoiT#gJ9myNy7*Pbg41iYlV3*N6HBHHDt!^SY_7pCW z^3TGaLJrc7qe#QvGq>*;-rb~&0W!avt(A@YzI?3@Sj{ebjJLc|g8{BIOOeLBtDsgF zLA5T5Xwsb=54r4QeFJE$SB-gkh@9E|?`o1X-rvyN?r+#jD72ohLP%F#Lel^?dTO-$pPh+gnp2teriI4aOI(iL$zM_eV>;GG+`H76& z>l?t*h!Zqc~E{b|aktq(8zz*y?d$JtnJy1u7t-T5l4``9_ssx623p=;zbxv1)Q zBafo$k=WPt@@;F;g+a#KpEoGIHU>_K_eB8&_FupUJxhB5Q@-S?v1rgfIFe6;V z7jf~Ht+F=fsu$&gh5WaB_ps&*?JK2h*($7J>{y1nVD;G{%ok@v)<>P1Cj7ptuUpkS zi&x|eFCB}joo!9Dxgo?lRT?p|?lEmvRetu#=tkPW;}7fBTrt49fo)iuIWUgDq+RUM zfTw~(F()^@3YlHgcwyH;?Hz7qWzG@8@1-?Tp@Wn z_ad2^&z&MH4`^>WP}Ay>Prt&SBCGhKJ4JSg(!AYPGQa=!RNDRyO%ua!qwgm-=JU%D(zr4jt)!>XN_MPAKUeW(GOz@qxgB1qi|bNm-j7h$Lvh0f zxh=_jRau45R>3uSE`*gWB7%jtZLn_L#r8_6iw82q`-{*Dy9@3i_VM;M{@ubMa&<#1 zHcyhQTN^8}_nLgQTD2J~mPg#HB3)dGS)*rBenUhW*%@Pdm-AeA??%|GTz9{_2iLZ@ zKz%B5cOeKgqyT6vzxW!*RrwlPc(rKZdDFtnNeizp@8a}44cX+H@RzI$WaaKd){Zuz zU6=Mf__xW>^XgUC#h(%C+@@t*ci-fgW7pu^RcJ3=`y)h|b)fdNBGbPX;-y;ePr!Hn zxVP#4pC!1DY5#kPVSOEj&Gqphtv{(5EOyH@+* zdUZWyqv#r!A-dHB#nJfIRe8{s?Vvk6WgI_^T9x59+V}B=QGrTWTNPg~EZh5VADlsI z0(N^VzENSX1Ln`b8n!xL;@Hksd~F$SDQ_b6TMf#Z6ywlsFVKZ8=vxoY!}dYC8q?L7 zuEumVrmHbsjp=GkS7W*w)76-+#&jL>-Sc;9wzuA3cZgJnu@)NDAGQzrzWW=T1567? z_Qr<3xDE-`O;pVp!o>uidutjyGu2KHzc$lcJ=RnT5Mt7Dbl(;&5% zv6?b77L|t1-Aj9y*mPB2hnTL4OxNcTb`9)(!oxg)DfJWPfU*fWSMY|$6n-Vtio0}S zskqn2)45)}iBN&}fy?l=t1n}2%$Vyk=IV^OF=IZ+n3rtf8ter3*Z39F^^Bl6yh${N zc?;kv=wt3ccIBzZOrCHYkRD>8z**u2m$`EhpnuGVV%kmb@maT}z zzba;S^I!cgs&>B@Bhm=&b7k(YUa0XV$b(hGrlpn0VBu~&X@VdgKkU(wKxr0 z#1I`R>p|*s665&LpYcBH*dUx^|H1!Ss51t$q!0fi=q&#&_kKfA!xut)mE*>i^6GnR z!^SQT*W>r`pK#MiDU37}#c2;&!cEX+d{1G?V%^8TQ=9Ku{w~Y(*)~vP!#Y&7f%(`l z7ca`Cj*Ioot_MmNe^<5*__y3!>p|~Gap`)4ve%?o8(=-`@<-mz&V}qZ(rwag(jQqs zfqb>|_BPNJx)xxGm*+p|rl75I_ZNm`2=l)hUGl5YG1hDBbzCmeflHvxq{2HuIY}#+ zw~l=I@OxWC_f2s9zt=V@27-=GMNOyA0ZNwx|1lhw?Zsy+a6Vf>w~-pN;rtO$JptkGT`BcuWvJ^Xp~Ma&K2L+3ejAe*@nTAej4rTUUOh9Do;(}8Lj)L2sN&O)?M`6x}- z=|Z$sWiTIk^EK-7S4m?RK$ldxh3F<}u{U!0qCaGHCPAxhosi$Tv4rTYN@xKzJ>my{ z^ZG&dwi5D|v<cxe>>CGT(?hRS((&%M*20*rdBFf-;FNCa8&6`;Y!$W}LKJ8YO>f0O8I%Zv z2DSTQBn&h9o!>bppyDPQ=n^8D!H~ z%fEvrPDdIJZ{+CAbi|yZ3}R_A8~WYejJ*A_7%{JogM92BfLP`lbI%efo7Dy(Qm|G} za~3~j#IjP-(HzkJ%>=aAUpQ|~^nosMI6Eht4%Y|mP|n-ZLYLNpb9X|dmW;KPlyhzM zg{*~5(79AbwAkYd5H>$Y@1&Cu!fOV`jqSZ5Oa41TjL3ixwKxuG0}=D{oG8;C>ESvj z9okUSwvdU8(DY?Rw44sKWY$iAzoS!--^JPCI;tC5_UVNj|BN;nB549^;d5`;FTV^% z*z$u=&Qqwple59K7RX!bSfov;qd(f9hfbZrbd8*^la##!YN7N%=zQ4|viIdtE*EA% zRxBQ3z7Zc<{lxL=j!{;dCDoe@{Vx27@wwF$w6I|l5zCdB@OL8?EV9(`**fDPM@=@P zR%0(=-ul7yac=a>IlZ9OeU3wQH=^uYcTuh$A`btHB=!ybGgWfRhOGq^dI3w{{9bLx z25H}C6JqZMbLDTIgQ)>(m=x|`o;nI~XoE@bGlD8N0sXiIbngTxU>)dI zZcqguP;L*$i-5yz$L`l+D3Q$SZNnR|$-M!ILDYuz%S>N`Lg#)D>713haA z3L6aaD-UYZ8+4B`*H{Niy&Dv#4Jckm(6WZ0IgB~~eo!~+*N|kEi=tkYL5B;18d1}{ zOgD@?cytY0x{yQo(X{FUgk17<)^N2aQ1D>?Vf!%bu^&K#sFh&YUwlE`kAOz) zR^(o9gN=52U%ECX^&kb1I*EB=cV{6$NewMIWL!L!|AG{kjySvWXPA>$kGA5Fgb@ zV`%k}T0ILw8j8x1BD*@of@?a%vd}&nsnC4+bQX*|QsHFLDCIihvV6Rm53XkCj$>slgO*RphN9vs=VQnaqsqjjwvt!uq#T^mK~+B{m< zHqp9vjMlYlw649Pb?qOmt1DX95z)GiiPm*Ow60U5b)6Nh>-=b2&f;&nn*S4Q{(qi_ z@R^~DtCA`hquxzPf9}$RL(=@Vy2vE||1I7NO{~~xQj_8s9jjaKU3-X|bwL?c3+rvU zZo4ppiT$7?gYn;S2gZVabZFw9Os&RVO+1#A)jYwMv@lE;ZzNTzri(IiZcM%sXEr~^ zMUML32VE5hX(C_u2D2b7pqVUY#i!xz ztZSbeXqiQN`X)II%Ty`^3R+dvtHTv z_qfm9?{su1uwUI7V84nS_CIZB zt)=~HOCUcs(0TbL?FN3f&Bj4{*4Ia z_kAG0$UuIt2lD%G$3de&epdteH4Wr9A&}pHJ6_rb^7}iGU&lax?*#JuZ^u>lKz>gG z`SlLumqPi~ww^w@d)NQ>>i@S_Jn%$M9(bY{o}KYYou9!K`Npl{RfP=u)wS>O6=w%$ z;ckwztfTf-xv+F=zn0N}v*!4en@V=Y~e;mzan#egZ=8Y zY6|OY{dH*I)x8RwJ-1cd^;>EvXFu)|ubi~v7+0-hyco!NLEx{~0y*~$ zuSj>X_I2Oa!_S`FJDE;U^WOr!h2OWGv)?|h^Tby1SG|Nc&oQ_ zcFW2+9$NCw{}%K7|BhGgy{LF9POh~(eCH~@D$mw_%Gv%c|2vfQ|2eNZCyo2Wo-=dj z^E~Ig|NgK03fX7QpfLN@poqNZ(Em54`2VNX{;&J%|L!&aKev4DmEo*-I+wLFyqm4i zE9*I3c~+3po!|_+Tf8b1cvZCnzWUE|MrA9O+MjYyooK&Wp2KK;9y1VjF0c;8mV;9u zTWYpQ7k3+5-+i`ZMzNPFE6ig(DQkfx3ya+cF?I_{!Bp((B+g))1agDql}!pe$*iXl zlt&py;$ihjF7Hv85AyM{0hTOePaeWmHb@ZLQ(iuLFgsw$G)s!_7IMxNQw}5_d*qU; zAR(+r1xF%wi)S6Y;gY($#m}~^K{4Aj;p{bdRfHY4Wiw|rEqR2(UfQm(X@-!nP>gwb z6Qh{UmP}nkjJw~%;}frl7t15%V_kgR~1mq3cM@QNshIw&j-qy$@25s&o%Vg`Yf zWCuz56}06y6tln$&R(}9zxe7ZyUwdNgxxC_5>^RQoqJ1spIbdwk zF3IvjSohLw`SX~MNVVCL9nU*0_9o<0h8=Nhn&$l0eF_nU(SAqF#e6$*nB6 zMmg3aOfGW;mJlYFxdM9>CYL#s)vO|yxgu*^MJ}_|I3gxkjAs#3DIj)>Int#m>{?%P z%jgg#j|{)d*>ow@O7RY{TlA!+3Y-6oERp0d7%k!(Y0n4p*|tw%%eYJQS3I13;EvJn zX5%cVEXl^*ZYkc9TO%_pAiH2k`0;MHH2jxYF;xQcTy=%*-0hZsU&t$?dczL(894w_ z)q3i>Ju5@tRW+7b1$((qUCxe)Zz!=sRjn8{HW{uvKwe-wEm_JE7IBshQk~_JOe3km zqN+JDS3n|Ik|oZXP?OEHWU5ORP^!&8z*@9hNMwYNh3sx~h5ZduizT|`;cjtlkP(4p z&V)79lg3zmR<9xvPn z8nN73PD~g`V^+SlT(2gqiY3lU+k`c!?X+`^G$9>bsa^z$X0N-XF-S8u2gS^%;yTuX ztwCW!TPmzonvkC?Il@{^Q&CH9dYioX7MEUY--J3r&LQ`z&32nl1b84TUJo2_hS`Gb%bIr!h9cO zl_#5|!e(23r&L3Vb8Ag#&2mY~fFxKkYwDt$cvGR)xJZ&!PhrDUA-|FA3P`Rcnfwos zkybtv>RH0fmlZY+B!;c5hpDo^R@fvLcoZiFTDx8Q6RNIRC@2xn#ZVz`0@Y0nxoc1GO_kd7?YC2K)q z*&GyRm$@^m*aXLXsbJ1NN)r-JQm3sgkxk@!b!HQr$o1;NGMeCg7i+?{G$Hk(QN)@c z@_C7+l87~7wqhc?A|Aar8{mo& zsp8lpSByCNE38s;`RK2*2$x()6O!3n9%Fsjjpp)*>ch&lkjF+JR^26HY{ave7V_BW z%PwI|U`^=9ekZY4fPU;A$;nPQ-}^CdOB6Mhv!AV)h?dwsIkoW|*N^SQ7~UUR{)QDJ zp3);^WFw5}&xVk6{Tyd^f3}XqUM2doPf-G^M1Qu2#9k%(vn)zwuM+*)l~(dN?9aNl zmdD`$HnX)nzXq`Ic9>7Cd(7G+4PfIf$@Er$g;%V-16g)Er+03r3Ay8vdmw{YsrJ|! zJ76ax+Hfda*&h4-aX{9!m-}=m+u2^8aYNZnl)zqeD0@QEsU7ykP!`ew<#u;GI}Byz zI>>b&%Eot)>pqNa>LAyB7)$OXkHcYXu1gAAva%D_>wGF)A?;z1*HMxXIJ6fefknrn zM1njg?t)B_EQ`gOegIMiWH{SI659#q&Ip#~iV??3WZ9ja7%_K7GTud= zr*AO)FH^T$^$k|23m&~H?8hqY5t7;kd)eNPjba~=*n757>?2FAb9;w2iltGEy+a$# zezwFpn~!0?cX3*bTXG*$1@-`Andc=Ti&^L(g@x}CQjDY!jPMsh#_s#@1y{laJ2`uFqN$QFDwC$|07JG!O?uo~GSL3WB$V8S!G6#lAH;_pztQSgs zxZ>yoGKEEvgicr3081A2lFO6KmOmpOqp&vfY}re)8OHP2JwmRN)PmJUT<=V0IVAD0 zyAb=98O-R7GBpHuGVibwB$FuBOcq9R?Q2~9-erj-C)ROm|2&IjlY9%S)+9LkZ1%HD zri093xh`1%GLO9xhvRuD^k6E;d^RHvXIv<>&w7wWY(X5h^I&M7k1WZKb6R7*A=>V` zOGJ~Wuv|-U=eYw?En!1mu|`W^HD1c5lGrQ2QkF_$UpFmfdr0i-rll;4#NMGTW!WV5 z4s9vBg2L_VrlqX;s~BVNGncYhl)yf7DH}&(?=#=Co|)p_XTHb&qElxecdL#zyp)+h-e_+h1;lVLtR!V&x6>QsBwt*-DZZH{&?WX4^?P$$6GJ7;9SL zP0ofxO@CmaL*%}=!0Nd~^u=Ws;}X#qKe2u;5q)u$jUzb%G8W`lHq#}OL4IdBL!7=4 zEB~MDiA%)Fe~T3w>WEnRZ?jK_I=v%S{=eDbp>pr!F#PX`Zofa~$fQ~dn+Zq%mmMD} z_uyT2)+Hg9Tyn`QxYE4Ge$A8WJ~M||<-v2xULgxCao(MKz>*VC?Dzd1vN;J@=4u}) z*843FSqe!bkfnQttRi`&<9_}TTTfCPR(^56$0PO$$p(sf%yyAv>KOBweMw@Uo1U<* zNZzCs@(If#vCmddSvJYW0=Q;AWj~SFXFbM$BMGGu&iFqlY(xZSYvJe|LLCujScMlP z`3(B&BZyIX1(J2tgBq_v((fwfqwz*A5&7smmc;W4=HuagNbbgAJ_b*C9Y;$q$a(u- zAvY{p$OcqVSQ?1QAG|L2sh2CmojyIVS4j2YSkt+1&3F_fh`&g(TwFz3(u5=&ay|p% z0_0@hge)+$qj)B+7HAIRBgElj&HC68t{N-sxD25?mRH z(wk~gk{2hrs$rj&o{0Ku%+cObbB z^1zZFBXLC8BeM)2Fj~lBb`pet!B|;7b~Mhffrk|411ZmElCXCbChlCTz?YDG21hRm z63W++qVZ6r}XUvP3DtrP8TksXP-W#mSXIkQ1 zQ&;6bx>9*8x#5!PUkI5pR-QZ6_&Z~tya6K4G7+$ZEIG?99;PI9$Wz}H6QRfRGqbK0V9MuG_`az=j#R*P6tw0*{ z+Z6L*2hPMDo=te_TPVd(DXbevG{50R#4fHGHz&$DH|M1$Vm`BuD(qE| z7Cd31oT??CFcHff-hy59c?N@K|CcIRcW%TTDd}*QdupM)L74`4;32zSSi^fQ;c+Tyh0uEHCu7BR4?a zv(R9?y@S~_EI^Xl#xkZC;HCE}joWZuOk z#X+X?0WK*AGJ}tGNoA0C_)3>VfV|5yNp5yiSbdP${Dw=SLFRIQvLoWI;`uy+ByuTd z9YGfISeJAISakOOcqb?Dn0ixz*~|;Hs-7f$hW-1 zY&qvMVuQ@YmFCGauxH!n7V*x&i*D32t!8JZlBQfVI)@V7$kGiB0r23v` zlk}vR^ZbTOM9c-Ao2NXNIGZEHIS*dq-Z?lj7uLn^K3(P^bFf~cTXXg@7gCYLUxl+h z5OamclDzgcXU*YQKk*(U$39nB8<3xQAD48rWUx!Rg8af0UD6xmDnCjxO57g^a*dyI z$zV&qcggGf#4hkhl1(X!Rl;BSO_KLWZt(jgxL=hJr})g9h%uG|+neArxh%;)f#bFl{(w8nPM z;b$qIx8dk>AfJD^HVq&A=0B2rcK}m8;Wu3(Qa$DO=gBo?iZ&l(y42xp%|0O&=R4yNW5Val zt-+LfmP})>mW5T;N)@qCPNgaJ7RsqKWx*mVl`E#yV$5g6B3p7u#swrP1*P6RPGT-W znf4=RAMX>AvIP60u?bgyARZ-?V&aQpOptPXDN2{3_#U-iiG2^{R!!LHnL;v2VklL9 z<#Z~F+Jm!bn9I*8xh{DPTD6c;ZW)TX6|cJsD+5S=POHA-{H=gdAK%}M&6!OtrzD9I#?9xx!=M^c=mva;?2 zloI>ts!dt57G)%~kI1L0lDYvUc0WorrPN0#58+BdNVqa>D@rFA2|qy2FDMIL@(W0W zvWDbo7_0{%wUkF6qtt;l{2oX>CHWJS$6oCB`pOlODY2MyeP#PLs_9vUJpqYQvbUqO zfitx@Rud)VGiUUg`{BAk3E4^Ifnz-f(n48D(%~;=rD~;gK8T{hh$;awF-ihSIvh)k zs5VL}$;S2gPELDe6Unzpc=Yy4xlDOBbyQ+A<=NCx>4Cx~K>L*6FC;b7DNh7QHzoL# zT%I0E2+3sVorWMimDkS6$LgyjpTn4D)T(`z>m(-ZNrd!MwC_-QQ}6Uwl1X|}8xB-% zU!(~6vRKI>8QT{3v`dvTH|6rADq%O}qo*o&TruKP*Hq<+ zOKNn2y}IK6(~+HUtQAUcOOBYg{=xSO-dA2FiJ!+w`jTwxV#@%MA#Zb5*CS*I$*!Ze zB#;~eNi>8cqOkp4a5Y}7ynG8~FdS|0tNGji9tP;q2r4Pw*S|K+n z2_&1k`iFQuL0H>w$JYs8k@a+xehUiNtQ_gG$&PxfTbN zb{G?=`$44x#(3)$#(Eu8x{!SdKW_?2>%#O}ebl|L|*chx6&tYbm`c?#jKBt>|~<-pN+XyK?VjD+TY$y_2nk zTQZdu4@eTmaC@F+D;XsAT+UWD-;>94wzBJ<+^5;f{(EwtW-DLall%0%a`K+sr{|S( z_vAi3uUte4^yv@EFZbjgyrleoPwv4VmA~)FJ$OZVVwZ<{@QUKkm1p-ArSN@uR{o+? zw`7KOUKaJbs?>AInf*eVyF~21t|=W{k_|D}mEk1fY%XGMC^JdK9zf*$o3e>SoXt@V zkccz><^4h~l60bD{h|Eo5^=1X${m+n1G%L6%4m{BRGz!a0!v^&HWEiduCnPN%J5;_>aSd--XlyUc1ecOd4Ys&P*+W*Uj6HhLzj&9eqh}sK<3lX2)6jujRjJ*PsP~Wn|X^oQVG)tUS zy`;JbQw7?ml)9S4Zl6->Rua2?N~wED?7EjykC51PFQuL#vFlz+{fSCww`yrMCr_)E zRyjwpTcflZLSnZ@S+xv_-G=4V>Lm8LGE{BIzNvr!_~h5141si`h01kymwBsl>2lmTh1=8_D8e4Yo1R$Hkkr@!T_21s)? z)+O~oTB_qoK5L+`W*{+Yy6V)c4MFD-%FMFxQbQJshnZ4A0mQ1x`>cP3Pw>m<1j@21z8mCTnNe_@$)io$)`-XU| zzUn5DIj<x zXY(!TYN9lPoR@+OQcHO;XZ2rZtqFtGsU*Q?u?L5!?~_y`8LEEam1om1^^h0G>d-OV zdY^Wfddel=LyNtpo+lYm1V7Cgu3mGA_-t#0n&XmHP{KFVVnL3q2N|tKku;-x#;a{y zBHjUhQ|;=KZIEh$I^L3Gwk;G#_(XM2kUV-Ps<}bfr{Y+7A%5TjTb_3)+wO9c;)k-y{fSl@mbyER3)d%YMf^rXTP?HK` zi@oFUZta=)jmZ3@f%o~|Ypmis+jJ#5KB zHXizYrp{P~dZn=3?+4U5MdV&StadFbWSUi;hag|6o?;lYr!THr$5ekY=UAdIj;XJZ ztf!b$YJ4&0SR&?>dZU&U1eAs%@(d<1&S6aP7#~n zTZ=m(1PNM-6))~kJXk1FT#CB|*WP^h$G&ss?Cd;~-OZVuV?)c&6>GLnYG?2?+UJ3} zKD@9FG!VT7TvXi6sxrrhW@_%ICBofvbsM$uRh5|s3JtamC<<0Herk)Si>na|L{EL^rh&mYEN`dC%DmbPlsVmCNZj zc?H*PS7TI#69UP}eyp;$3$Pq-+ubZ;M-%;`4&OBC7pckf!m_tjWeX;wwvwsIw|l|| z2Kr4M*%MCix0y;jp9~97q)ptDIUVI=vXr?u zsra@y?0wm)VRf7^)G|jIBpez66nrtyYv5B>EUt!cPp7!=W1zPeZ+6hl`v+IKFx}|= z{I$QPv9aQF`b(C? z@17>TnYlQ0mSKC4S|2Vz_1DI5HFG*pM&ZtQ9FkAc`Jrf5F zy^7ST*Q2qab_RA>K0qx$E1=edjuup2>+OLI?DWG)3-QWmYzk%V$ji*cqGp}Wk z0p#FP5&E{K&B{o0AdTT5OpMZ6nM=8_8o=>#ib+P{^E=L(wjih6k&12FQu}ZyAvej9 zaP6dLvuvy2jM7j~Cf5#Ov4K6;>y@#CmTdFdRK;jJ?=q?bLh|~rfgnyf<-)X6#Pi-V zR(;(^9it3+bWH34god1QEs*QsgC6}30w(>@yqQb#h6!$cz7bBye^g))y*&J$2LGTo zNaN~TTPDZ?7q23gInY|FwPwM3ZyfX-{c0xDGQLsdx1ho7G? z)eBOVy0N?O%A_ZE_xX~t4y&V<76==-mr%cDRyn+c7^HykXMdV}5`dI+8mPS7&q_&h zog^Gv)tIqr-m;1Ggs$)Cqa=oi(X0i7GpJd5Ww%nHfSUr)b?HEWh!%(T2>WOv0h1}W zFcvzUVh6?`6>k5uWQ9{tfd0rMK!!#hjqFj=lD7pbP6dq4RzmG+JuA~EP(cP};i70_ zi%bgi6D4mNRPc*80uW{IPGMhDsN$S#D*Oqe?Ard*B2GZRJ{yv}oOr;*@Gq^6q7N(~ zgRLwa^hfdVSw7SA+p5H_UA^(}bt_gluv~P2BpOjdSiDkO(^$Fg$W_RqbTAbAHZ;xF zz(KWXqsaFD4pzaa6*50s0Ra1j3O=56Y_C-RO-!MLt}G291s+WX3L!oD)#Tt z$IP`U$-4z2XoCh78dW}L@du2N+fk0r=cQ3$fS$bZyHs1zJ>-3zil|g^c4oxePLU~B z<;=ZHOM|v%=}e4GNO0e+4wLX$5c{_(odP2jq2a)(~ zl^D7Fl?0tzpDkOqlJlkP58tbSbAuu}N8q%5R>}d)2x`~n`Lvf-ImgBUlZG&I`GDkd z&vDXC@usf(_FTZOwW^igX}lF!mE?NnH2$1FWvE8@r~K|ez9qq3g$Lox0tT0uMw3k{ zWWPaJpBqtNS(sp7^1m;sHJltQBCm7>n6@AiV{Yk#^2@p6cG1N>=`L$uplc)RX<2i# zRx=@n-+0_!;5MyA`w*a;bQ+tI6B<1D0!EcMRL8;8x^s&LbmZ;ZTxGWDQ?V8YhK&r$ z6RTVU7HuNkV?=!Q@`fS2!|fezl_~Gdjw~+hUK%3TTq-Fdx}4tkT&`Z&^%@9UQe3_d z%>DB@N~piUevBJ0Jnv|N)WDpJyZ3Lvs)^m2#*-Y!fZ}^av!I9MTybf-2X@H2-3OO~4+Qml3norG{gbvYj-lzc!1_>bKSmO-SbCxF|BfRnvZ2gC4>9G|y{> z`Odfj&`*81_g)-~|6Z}?+c|`Z$D^lt9 zC^EOg%|7!F>T|N;TBhd&s7gKisIFqMEH9%p+I*46#@Q=rek)iYM)n`+bSVBDGmIhH zWokZJ|9y4YkFFa7G}A!K8Ga~bZ9=oKJcC2;T`*}HWon)LBF5HOrs_{^XbxWI%>L@D zZ}^+ek_br-r)`SE$Gff$ioo* zP*29|vzq&=VdW3PdymnXfi)dTr=^ToX9rK!0}YFQGBJjoHGXBAYsqYTtSQ?eJ^l!Y zmmf+miCaKa=5Z=DxGkvAb!6W-V2tI<_i}>vnzlW zX`?w{&;Z8dbIjzLS-QQKomeVUb(k0JcJYUa>0#RC>}JJeRj{;l2c$?(CyO`TZPINX zl{Rtw58szGDw0G~2BWyffADzxP+8p1`VAf)bpQO{^b`-QwK>#~*W+wvS|b|=;~$`F zB7+{&O;ZbKTXlgqNYRJzPqM;>dAbpZ0X;x~=ztQ8#djF@^{GGV`4|2_{YkV=r9WYe zBj+^0q^_4bc=-hqV3LAI@FD>PntSGf339lnZ*L-7_ct*@h{$%HqHp5o@d?GHphvo= zj9KT$g6i$hY>CjY_Hc`n7fy}-3l;8G$Z*9xb zN0$Wp(JF0mI&`=Dj(hKY{52RH>3LWw`6_|8@`J?F^D8{I07eGaGNv0A(i1MD#L+iK zVyTl7DM(g`n)gr?$u+@r4a;|+rUc+TI!Rq3w>e>ajdevx4BA5xm+a`V(lDXG0olbhpIF3TJ_$Ow9kPjx+M$G_f89L%XrVY z$t8|<6uYUtkM;;UlnuaDoP5!0?p58Mxjy79O!K@LcJ>)&KmBIY@qTkY?ez7WGjLDX zc}Ns$A@1`k#bsAFGj5pN%`?5#8Bt-)GI6CpJS!B5$eqrLcf&F({4zXArs&y8mGOd4 z`EpdshtMsXkk3#pohip_bKBf%(0+(EpikwRKvdr3FKN|fMrlN={l?mTNT7*XwsEX% z!E$_BQ7UWkKV0+8J#B@aOVfA5{%sTkc|}w;QqEG$?O5z)6x$<;_3FdYZFEsr?M0FL zKfFNt$Ir|uc3gq;*`J1)0~iO?98a1*RXvCd9Q~h=pa_#^SzTgzr^aHN80n!lhCd=r z&G$Iyz&eT^!uQfbqY$bGn>(W^S3W-hmfM+2D4&-CCvH~#CXaTEtn*^GV{V7F#Ir04 zbKkfI>68S9_be%MPB`nq1`YzQ_}XSZmg$n-SNFTM(GK`ciVmH>2DX#aMsS>^0}DR5 z7?=IdQ@^SU*Xv65Wf`Dvq#!vWC>!qp;Ms}AS&?e0xr_>VOWn~Ais%A!&HyfKMj$eLo zGD_ zgi>k@pSK+ctY!HcMzagam?99;;YqX+X=IE!d+wYF(-&C6_|?iL^?JrcUOR?d`on=? zi#tR*!*K;{S*hLeq8~DI;tRi@rH{^-Fz)zH@xfCizut2q1H~@_;3L;>a#Y%S?clq_ zYoY|Yp1w_QF{YWy=r8`|4Ohe)Pla-{9t#&(Lnpt~SObx^;=WwjUe({oRi#kdReNFi zKOKKw?qRuUBrHc32O2)vvVi8CPja#S`4pD%3|&g!@N$DYcBzRmXq$u~k3S4u_Uu|Y zfobQ_+r?*Y@}pPJEDZx2HF26MSsi6a)J}=f3JFW`)vR=e`^EGZ>`GNUymBYQOv1OI z`rJcPQT1%APq8aeK;a-_5V9u9;?5NFmD>a%b$d2P#ou9#v}P;)5sD>Vqd>1K%f33R zq}hh8RRXpVGOykR*%wqHS7Elct^m`r?VXm^r6-!GrfY;dv?XBmJ~NiGT%?}$ciQd>P_k)Ek4Pj@zW z!E^{Bbo3S>IryJ^^!bp{Nj4skl64I;IruHH>?kfr#$OII+j>2#oLUo);Y19!k{zGI zy+<{oueVfhQmR=+KN!#6_)^e&4gvxziz}_$lv5yhw>}bH0|wB?+1+e~R~L~&H;igi zro*#KJA`O4#;VJR5b;ft($KFIH2Zi}7VI1zUu(+cL$y2yB%sgK;L7nKv1etX%n2z~ z*$~#BUi-^s^m_=WsMGl0-lGd-@40*ps{24@3HOE8HOf6L?qp&++)a<S^x z*&N(H&-oU~0!VMATW^8uMxzqSR&Q>vU$~1GVP;s$7?5Yh7EBo(1X?FbC4Y?AGA*KI zC*)fOKakTa-wAlXgJNZS6uF$ubr7~AyQ_Z&>@Q=R>-Sj7^@7*mD# zF1p2stShg^F3W@xg1y2qAO#Dm^BK?@rz>ABbDGm>HnU%InzQkkI_}EhqQy{ zP(et&4-93BNL?`1DH#>h4V1d(QZ@xkNn9S|v#~FC(@TZ9H?Rihs|pM{sqJIY;#F#e z*U;xHoszdip1*n-cCK`)_0Ckjn^!x%NIc3rzK>a;CzEYbf6%ltL+_ z{rK}ei6sDT4Nz#_5>nJ<8x?@wXZLWhnfND6o8X8A1W7B}^vqHcyZ^3%t&cu#RI>1$ z%6-;;4c(blcbNItk-TWTgtF{gIY_?Q3dFor##A>1c znSn9 zO8O0ML|ylOI8SLso19KIhjC3|De3+D0cA_&f7*1oH&O!Tj zM$iSdAo!x9C?MWnu4Rup1CTRz7*&Eh z_HUpcu|opeAJq2;Y-d|nDfe|%xry5f>us)EgsEcrtVgx&AyuIL*>FEL;bk@lJX}G~ z&F8L%Z#3h~E;mwi2dV7zYPEvb0f_RDRr=$I-s_L(ZU ztUq;BUH^bm!TL;cpHYh|^tiiwez}T$3taV~^@H5?5yI|%q8Ogx33M^!iYM#2Q;njuX`}5)c#29t(19@m}P@mzCW`w_=WtQ*5*QgxA6mt_*gX+ z_dbK%lP3RXV)3Wp@6+TLRQaJNxg`qVhT4-v<(@_Dg19WUsjLs*Q-`P$J~I0@l_jdV zYer>h|InBNK}^6pV>Yp7OJRQsA0bcW>|t4Nz6Y-yC&%f*CTNad^9@JV^ibnz6MRVB zGw!9z740WA&x__=!uVfnyc$WDW+dPuD|r`}Ah3+oU9#`E-Q(Dzz1to~g2 zVal(+$WmD=C=p;>P!v?xN|fzFCIyTI)Cajf=*d7u`W~g$KJpp6id`2wu-JXoPq^P% z!LY`9dmj5yhTAm2+(e>@;yf-7GZk+9c3wrWoX0)6=HiXxer}J`Z}$lfG0jyIj;RAK zfW#rMUXjHNY((*CMw|Nh1{CWpbJ$o|!2B=MYP=Qx%-Cp1bE}c%1>iLetH!QvY>*1@ zMr%QpsT{SWOrz#s3QWRqQzMVw@W0jM7yvm~IRKjOqq>&9XpO`La3gTX$B`_y?U6MW z(5XI|)Zxcbyl8Qr>F?zl>prnQ3-L7tCis}w&kpJ-_iVtKkp?nHGoldq`iUqG^o3lR z^0<`9D}7+Zr+eW?;{%PWFmuK#xxGQQAV>+AF)NOqy9sx^w^7!OLDT4|&%jkTs6ndv zRr?!w)w`FTMEMzG!4?@;=Pl;3Z4RG3qbT!R#`-~F5Z_mL-0V-shtmFH!f0IkM7fIz z(b0)Y)wPnb3{VNV3S~2?)wtN#@t?7G?1#&u%^id?Tl~JBf!jgsIDSbFj89{WxD_8! z+pL$eRC~Wp<(Db&${G&hO+wW_&W0H-M!hS#@y<3`hN=}^Yg zuwvMEfvLRbzt~iKJ1dmN`p04|L#()vY73p8ZufC8$*#mzT&<)bZvK4ZK}o=EZ|FYR z!NDQ4{AAqOCC*I+`95|33BoBhK1CNs-RA(a{YkWp!+S(!n3tu!%7)}zgDY1{Sq5)=t7s} zI|mm~DJx_XY0MB2*YwP6!|WN4s6~z3@GTIDJFp1G(%4kPyvVlDEtuzW6(QW<@{=O94m$Kz6>D zSp2YBT(RRi#k}dTEudlM1)zqe@TMN#)f@x>ZdzWq*347gR{Jk0f?@213buF2$^3vM z3u6deJba1{RKPcAoQI`|cDs9*$`fk=lbrgVPvfU3N2oKy$TljmW}n*n7-o7WGfrUO z!Hi^**;zqyLIHA*Q#qdsTZOh*&>>y(l9lU2GWnXDfpqJJfPHN^^d>Wa5S^tl3esm> zrcva+rU%ZaE#nkWjKEL(3MFPx5vXniu36w4bnj4``xqN(LNRtX_vMYCbk|2W{B;<~ z2CRiKH4Y9*JIyJ2c|pD|4{#^$1Aa;Cr@kGyngU@#0(mPM^ZAi)*C;js`FzOAK0q`z zjwb%PAYl2EeEQb~zCl8a{;eOEhI4u~e(clFk1@1)ZOUd$IYDvsm7;aqcy7}QEZ2dA z*7s6waiu_$uLM|4&Y^_z*X4o_@p}LOX|I3Xqv6Xn>F;b-f1aUO3}IrKa$5Mk>7r`? zN$2@+Fk?8v(1?#RG^3s5bNiRleGp@bzC&nhysg#S)U(?B0%aYk*NgjB10?N)=xgF0 z^9w+eQb+Trv?y+pjvKS|Bn`bb@vDl+>C83K6J>Sd(|YBeBMB_T>VyfCx#1_DJ1a0b zw=Cz6PAkgjCd1?!RrPFQcii4#wOmoqh!)J1?D*1Adbm6atwd_}0Ap*Ai@c6dmgXFA zjney*1I}4j)c$=I3;*zv|1<%Ed@%`dc_WgVRfQ(8cf%P+gL`@;r@i`U5uHf~ftV@d z8F@!>Zr~IsCxje4it0KclhIt@6sIwNxafNQShI`3Yrqr=+f4L9KUW`Yl|>Vq#mlJJ zo~osOe8%ova=PKG&3FHQq~ZRSJXQ2_IRQV)b$|}KHIf#FMl@H?TIVjHOgI0Axrs&~ zqVP97E6m;_lS)C&K)e zp*t3}5`|NhY^}u2Ua{icwCU6Q68j}g^9mmxwGv+zlXc`%n=NcBc543L&_R@<{IU_l^-Qc{Z0%!G&v&8 z#vP$t@|7R#)tpbSpnO`ZY>-3jMgIV)rkVSRqaY8q#+zyb_MAQ5u_)|_;9Xrzo`y81 z^?&3eS+_hbRF*ASD$I`Na+cgU(4NTIoitm*V_M`uT~td5p)h_{q|Eo>8IBX z!d*d$Wfm<_P}GN%IK-KBYxae@ieNe} zFN4Z3NE-RYvhikQ>A9#96k>%jP_xR*sMdcp&I?Z;bn^)$d>iu7?A{Kl{~Kf$NC;ML zSyvX)38p?Ib$#$%bofhpf;Z^`wrZ-eiuQXdpJq$doqqUhRGe&NVFO*J!k=UKRZ}3? z(5oMqZpya*G!0AsJubBjZ-DRLSY`gLGU(Q)?}%#YY}csGrI+YCCH@*+|?1P+5uC7q$4809dVb!Sa9BQzk&ZnaTj+;te{_+t5v5XG-~rv>OviG4796= zk;&j`B-k?jdgPT)tqPc@CI7D?Q&2^syma-oOPm;KVa5Z|dg7bz*xN@5mdkXf@rcN- zL6$Yq`J*&p2BhOvd~pEVDBNopNwk6Bn{YVE{ZL8D8b*7sUeU`5-jneu9OkRZN#tM{ zbhl2q?v-OgO{7>OIxyiBr?XZMs%)#*LofesyAR`%gCny$#HJmZ6}d-0*2F27WRZ_Q z4YTapufXCPr42WW&*haIrEO58KRq30ukhd1FWz*7ZB6^1$_xsJp?ptAvNG0dmi$lI zdNXq|CD@|Ie=5T{Wr>p^pk3d##{G2cYS=l$6I2X^tEdnS4a~z9j5f%^%@w{38p=7nn zBx$Pv;AOAhrV^>^(HE-HBSb2DPEyvf-VvffaZ>M&d)v<{k&BJ&NAD6?rU7%Wvh^Kf z!~~YWfCl8+vG{2(T_ZY(pD-x-Uc6@Dg_x+nyN+oNi zMRsAQelYg-WA;$#$g|YQQrKIo1S9XW;&(#Ip_$X^YF@&;&cP0EWIRP-&#DJh+y+`0 z4M&doK6Y8$R98 z$FH7HS&qRhK$>2jHu5X`FK zg1#PUO^q*J%8Jk1zz6#?pe_yOt9aVqEH6ZCG>Ovm>op4pG0+?N$M|J|N-s=N(h?z= zmxz8x+i!Yqzc}lc73+xBeX!{^osjJz64lyRPmd5TCxRH}33zat()fv&gJ&WoBO0t?j2-z?dh< zVMOYB{glEj{+dV~qJ}B^3J@8GEVqyKercX-}!5}dm ztog0)h?|!ex{cne1ZTIPQ?`Mm=2-DBX+woRT5%3tgZyv9%7!yJZZA^6#oi)ajGqrv{$dc z4pi!N@ZX(~w0fqf_rZToH@-Ma+UFlZ*>~uu5qO7us`jJq{=}^ncJE|(;_rJnbcPdd z=5po@mA67Run|}YMXr{6Q@mR+6norr+?Ugv9&H{aaOTrJnj49ZB-yyEU@WGyR~8v4 z<(bpG5ry~Dyo9;Hlz)di=a8a%y@XP4Athdr;5PY=Zr{a@hz?ZNa%n&Uh@9B~(31g; zyT&B}asG`HPAF!H)0ily58P%YU*RR0US}ZM(>Oo#pybQ< zt)a!99pyhAi$Xv4P$|o{z4nRt*q63XUUqxBq@T(wCx)Z6U)R+dqgW{M3CO`?uKI3x z>4WrhqfYIvhbgm{&P^O?N(!tpNK7z;o-`k$wzhMziMm;T*DEZ|?)hwsDJc}{>m<5@ zRUg}pB)?wpmU4gM4={1*w&QPAIM=u3@spd%aiwbfWuMYD)z)ZUGDf*FNgm%C#U48T z?{9Z~-79lB*`p6WjM6-C4F15HL7lfL0^1Z`d5^+AGudu)eSVr?oCqAG@p?KWreEg4 z7}vT3Wat#Rpj4>!`hCQfN@{wEHNGI4nEyOqvxdrkh4A0g0%>~``fKe)#r@NHYyN$~ z=&!XW^dMoi>)O-sWocd}ZQ)4UBUL8FT=eIQ%>_9hx~Zyk;)y>P&n37`V@Wyw_y~=R zrVmC(1o8EyghskUSfN7B*os)lEla3w8{q@V>i&;g?~HrEk;RQS*+XZ|*35gCf^3k* zTg8lOwv#0eAj$b(6UKlxS1Wrsg7nYU#fO)Th_{X{U5wMGG3DqZTSEUGbYj_8bV*<-{e z*M$_fT6M$1)25B2wiTkxyvk8hQnm3%6;J9zhR>Yb2I!%}OY%S?Q#ChSi(J9oTmZ9n zv>;-gIT9)SCu0TXET!W+BF~n=v~|j8-)3Zl1|#K;bYNNv9%L4!m-U!YJ1+g`XN!?? zlae@PXN>|!Q2(u++Df!a^txXo9YW*uY=D7$59Y{-6%13TH{ReR%vbo$0?WtA zq}QtvWn1cmrQ&mxj92o!d{VF7RF%p@#B_!N3xoj+9w`!%)u2<2R+nm0Mr0dz%O6xywXYr{|kG< z7#GZ^usNY(OT9i#M*=QT{Y?z(eDi%!rep>)=7134(#PZC+u_Q)A!jdMZ$YTfxs;Z_ zJqFU{8goIgaV(Q$rD;5$DB|)F$~T9^;zqkEiXne|dzMP@l$x?OKL1cixeh>$>HzE)0G;5+l825B+ZaPA374yM{4ptQjM;+ z5U`?E=anMXEHNB14jXKJ%QlS(aGDR<#mZF))!LJiAbQ2H-VMccHZBB=^2#5L{per1I6pp*)=$@78tCAvR&CP0|9WdR8ahZ=2N0j5~AB*k`DzR=-_^P=bLALmn* zswp@9xS%5Kqg<}{@!xqu%zCbCAE=pDu>SngS5tVptV8O`V)tSksapmG97v^KX)5+K z?N~x7+IPeL{2F8+B3+Ad9Uz9*x37d{c{~t8C(J33iQv+B$%#0;aZ<^HtEgiclVNw`d#ah7=W4nJdcbz)#h9++qH)npU3fF z2t%oxt9Z&p-E(gSj@`0d=B>bX+*E(;V(cqya*wI407e;qdW1^e0k7S+m+tzNncS78lF(kw_5^Qx6o~Hng+;5g89RLS4Qb$G z#6CVpT=ffsb7$yIJ3lO(_!QS7g{PW8$%FWw)BM!G7`Vu8m6(wH4k62{98hJMl`P4C zbTe_&w|2zDv;~;x`N;R!=&!XHb?TEvLrOf_8`b4se{nc7!t>ayj=Y|sG#Nv{4M!qmn0a+jNW6f?Tvrs=fSirVuI2uwyIqVX^Fae8-*{Xj2lpF&!wh26kK0X2k zw{AJ9))T4iC&?SLpMUA{s${Fm`=@rT&wd`hoB@3gh`%-d!8{7*G|766ZbhQsRxpnS zbDBuM^r7(IGE{#@e>&SabwHy(}+(A$6R@$Clk zruRn6K?zHrf>a!R&Lp;S^bG0S!tSX(*2fGd8T8fY+d%iCM$B@~)IkY1=%0skM-WGlZfaz*WM9sVEdA)g{n~##zaULApU{TO zj(J(*>-k$sfy91)zaU>SpJA^P6I= zLp5j6XqIeHE|t$=?0H0O;uZ?{FIfP+;4?3oUoPflb(PSNyoKTnvJl0rg-(fVSx4dT z9+>Dh5U^E~3H@yL;s;-&bwqVn&iuP{#INL18^q zRIX!sNHQM4^ib&s8g2TOGtP>^pju~4BgwKL3gVB@J`J^|w#%Kg2dqu~=Uu_xpeS>mjqjYXbB>+e4@E zP>8wbi)|`n$+t5lTvvC7$qksdYaaj6K&KJm8^1B2Kh+Ld>qnZmV}fdU(YTc)t=6$( zU4US4KN29u?7gYy6FU9kJw0o}@l9vc+6D>z%hpp>pHM-3dPxZV3RiGMD=6VuptFW$ z5YQ^)g2`eLViV;6b0EIh z30at@lij(;G5{`6J04R+Q|CJ$k0_!Sb{J^I^(8_GaNi?1M+?7p_OlMv*t#48QX^;i z`Gw4)#WIYE;xm|YAmKQpnarb=B%OvuNNZ@%-!gX0qMmwqDaCqW`|rsBIyQrN*a``D z(mcNKTBjB~`1f~jc+I}?K|%u0*1Spia34HvQ1uo!_(uTyT%Tsgj{y5Ib?tIS^17Hh z2%Pj~=v>U4(ta*GWFHR#GYD3ngnbjUJ`{G}3iNKvZZ{rf7`^pEA%wSX#gC2<7Ag)r z=C1uCKONKJMV(R{(F6;wl5?xptMM@nP1Y;%h88rE_+B4_xtu8u8)Y;61TYyY=9`)t z*L3Eq1H0%NP$`YXUJG)DUCaxv9rI>EeRK`o6jfAS3*3fRqzkSC_1hpl%Zs@{!(cy` zoP#scg^*i}6X~1o%lYR4k%=ofj@qPeauR0jSUz3QSG`sFH7sVfm-NNws>sps$);Kf zm+0e~4Iaa>0-+f5dKTrA?1cF_&fZuNCl0;nDj{2%6Z{LMhPYcS>vX62V|>(E>_IP& z&;))x^N>p+r2{B+MTKWZ8iQbmr2o({<3G+UimMx8TrW&|l3nAV#Ejw}N=c6dw^`ZO z(fV!7%yIQ2HfPLI*Hr%1FB-*z+bsQBX{~*S`pSPHma4V&zJl8vWArg-u55rodu5}q z;E{%xMp2jkqdIONM|bhx3AgA>$agAg1*Bl;LIa(5-n3-B7Ex88*J%RRvds1+w;77M zM{S)^uFy_#?Vr3HTv3>Y?K-ZCy8*Vx9w4A5R&AcnkXa$Ej7r~ z&sl-Z+NsgVdftKN9N{ejx8u0Pe|1@TJdm*SL?NLST^@mE_$Fa{cRf=sFHw6@j>j~o zzPoKVvmN)1IiuIa^SS{ulmrfWHas0Sg0>mf^--m71fM%#Y-M)?I|u!sY%o$3u|gw4h4$~K)W?AXIk%%%!e0Ui z0NqL3NbcJgM2OMyG_`r$3x2t5g8WOs98p<8{`Mm!Ex%5Ym{#}fHKkdGvdeuIA`M)2 zYsrSM^@!0;;{l1!08nqzeUm}H>Px>FmQq!GY3Y5sz`QjoAPoBI0yzSQt9<9s845Iw zfs}b&@6J^^<(>}SPv+dNwnFHgs?1((Fj=u!)TsQhhCN!lJ00;cfwlH5pJMAaX3ZUd;EOrA1nHf+jX!8*RN#59rtV?Hypn^Xc+~-dMtE$0w-j z{EppcP^lejeyMm|B4HjzO|@+`ie_TAomgD5!lCPbqew07J1cl7)o@mSH2c+QXDv=w zvfAt=57jy~4eO^o21+I5mZuXd$WrgKM1%Yr&8P)aBejeVEoH;}`by_nk0h23pEW!x1Z3z74n8b8 z`FenZ!{P<^HaExi&>s{cFjZ!6P9N9I-C5*Ls9%pwAI9>?~+zfFHi6|;D8fb(YXcHd9j!tU>^Os4gEzy$#Avaz~t z*m%32s+XY^G0T#gnBK|K)U6Qlip9qP6?3o=V0`&X4J0>3cQ$AB_!j$bX9MjaD7)jx zR`xgZ3-rG2%qBFI>gXSpBd1v_*cRGtY}R^W4<+Z}T|)5p39o|suBoF=BuHTrG%9?@ zj3W%Ei<^K8l33ZvJbUjRiLZ%o^;rh+NlY9^0pWnecpVA#+C&E$(s+ze%%ioqTbwm5*hNTcQ$7^>gLhTo&+GZ+eW1#3Xv z54@nSR`nJ$lH#$q%-u_SZ$@M$9H=iIJJ5oI`1Wh4cu!d;vQd!;NyG(fY}&Q^z~TGc zp4e$iKYoB!YsFjv0G=kCV(#1*i7;=vu#p?49jaq}V!y|H%@CC|=#dR!*q|h9+*xfiieA)AH?Z=8 zb7uQ9YtcXV-i2t1TP6mEw$@IIT3T*Shql&VioUBsEgU_>J5%#swse@&0yYCLy@vBc zZx@v*vbqQ^y~;$ws1J{3T%Lm$ma7iP%dYby|q-JL71w{{kEuO~X{43?_G<65)svwoxFIpx+LJ{NA#z2wGZ z{)Rjp$AUMW(6Ppq%`izXxjVE=xdWJzvWY_IPD>6Q&9C}}Rt$T7#zE}7 zqfGJ4H)QC1_6-o)LZjTc=k?Uv`HptJQ7b=&CF0HGw8IQ-rAqPyOa z=k6VI@tgE~y)7AbqI0*z=7N9R&vMsXHdSaujE$=aY(KUocKc9!S(?kUGnmCrERd`+ z$v+u6w>_}gW@685QZp1~uI8knsj)fOPPP1#wP%qj5T7g2(>TQ%@1t+?(i3Y?kU4V;KcG0fq z5-+xl=B%_>wu&hOXw9jjM)M`zuNJDp6NS};D-^;Zq-b7a6QQY1^Vasy`-A=41fI36 zYEiaho$e0`-DZrzFXr>^sUk2(3@7o zy9@p6b)epwIVPyt!0E5pO5>6g>TB)sj=MZuSed>PbLZOM>j^|DK;g7p?7@1U3|sLQ$!@>vD0J-B;iGgk74V5+DLDv)V?7fhEVZt+AHp4o3l z$~ROsBva@+>QO^ib7xce+@ff5=#4@Nk*yN)qx?6?1Ix@=W?cR4?Nv2-r|(y;bmG9- zoC~*V;~2VkG3um2=`dM&SrU==j+)dhWYu#dqjOZe_rcJ&@lPczaG7Z6u483;Z+wsf z^0VLJld)%OeZd2Tm`k=`_klfEf&eZ@U?9ZE23!1$z^F=cxY0@Angg zJi}HuySuFn3%%RHHD4FxL-9$+3!6RN7HSZ1TM&_cFAQ5Mupp?af}n)@DDy1PVoE4c zXPV5Y+M0IFx-TVzee4qxi9cqQ> zD-kyR`M!h}C8VP~gB<_bazBaNav~D>d3;lV>7PjEd!?>{)@)+UZJTZ+^VDV?Af9AR zG(E7#@-d2&wXOS`)n^J&reiRhZ9r&dqasa)J0T!hpQflLKgRM&lQp8&RTx0kG}%20 zu3lg0Q`k~Z$8)l-C*plLa1^%2RU23(M*mAR-pCq@{cI!e*S4i{#w1rch?4pW<1M$X ze2sFEgW-%BYiHg2M~;<-*ZfczK&hU+kjcuG$Y*Bq$fBXLC4Vpf!pjP*8J&283MVxp zT(h0jizCXU+4!D$6!jw)j36D2VhcU9TPM)6p*iyM%gkZ>OuI%$WKJaDd12}}4AwNa zPKnSfis?hK+i6th*;&5=8W&9S9ZdH$t;PwcW*IKoObj>uixU{hVqLbG=t7*!Wu%~5 zoNKRtUuzcZnGdf%9WP7<>(%&DOEUdK&i;~#$4(z*CqWUhuMBU&akq+M(?;1Hv&8vD zs!winrYzPyQAx2X%#ORP?h8dIF}c{B884vY!&dBXuJJhNd(>yS@Fe4V+?`ds!*v=Kr(K*%3;IoL8R!qQ*MAAwNki9@;F@OK$%k+`No+{B_nv7et7h;6dNrKklAdWVvt_A9!9!X=q*C`= zzF7ssG!)8(TK}ZuyeJ84Im_nozN3yP)Mfv`jzU9;ENZ+GWJ!&4hQ|J%#JTao95sPfMiz+CizSzdcK_7_=VFa z(wbQ(WvcRg@0powQQ@X%y9on>&dk8Y+5QM1ncEokp3Hk<*ulbInF?aqmRP@nE^LJe z*Jqvcn5hzv{c}pWc_O2m+5<#GBA=7#D`cLEx4lFwhS*v?93xdCY0qGZ5Ba({(u2>E z%k4?lJ{t1ce2LJLocw(f$NU)eK|pC+NjGmzKgv~ zx5Fxk$Rpc*mRy$b{s+xuS-a&Iru7$lSaqh3yM+9TKmbES5%v$t$w~=>?}5LsZfv5k zA@=@}rcrW`tzE;ENEUz~(cHyjgYVkEA#xXi3Kwj)ry9TWh<=ljKq|0pqAnn+ufBmq zusv))>6?jA7k&7hi{WxZYzcppE(XKHZK8}J?`ZU~)71KQ$ZCfos8XnC$)~8ec*WR? zc@50`f2XsgkWD4I7UDEz=)a$VAj`g`jBq`rWwdy&?(aVID2N1YuC9e|-$4W9W-AP< zTb{r}(0s1I5MaD0qSwpgbBl77Il*(aJ&SE`e#mevEaHcl8Lk`}(@wHr&P@*pDF=6n zV(PCZE6ElY2?zcKCfu2rsT;7`dr=a@$jR@i4;S7-V*Dek+y!yyt_Zvi55Mh6^vpEj zgeZB|BSrPs;WU%I5s{(!IORLBxBLLMa`55A{x=+nd{Rutfgcdcg`&$~1JBL?U(B{> zx^sK0%s~}SDUd;rUZZ1Yby?lvV^&C%5ib#bFkiD7y#!J7(w}HQd_HvPx5C9Y#+jvr zfY-w2K`={b?V-aVP^3@js43Epz69V47I9h9MwbzFI6`!Ws9;oQb^WzuEyzC zWu^n=2BD2dtd0^c1^?sdt^=C*+W>&S{!|bVkZzFf7!48vGGL%cH^?SZ0@5-{rD1e; z_W(hV1|>#!DJeNZI!C@Y{`uT<&-c0QZXDmcT@3_nHvSY4jZ+aa%m+n!!=^_BxImc~ z5iw~E%hVv>R9mDizP=F4yrHX6V|81;$0vzY@V=tHFBuz(G=;cQtfKi#&Gbd-ai*L* z-^C0w>iT8<57096nRjgTX+@4ACukv46ui3;X2lw9+7ibTO1x68@9(`XCGx-nVl}4(FTAnO*Z+Azo!w9IdTm*c!Al$uh@Aei_|$9A!Z5;_oI32eWpvrj9j z6T8-~4510PTjM#((TXBR;@#(VMO2Q#;3jTws~!B6h{c!+BUx5|6CTv$@pC(KDtmAf zG`HNx;wo($`0ejJY*e;zP=T-p+V;dWTw4%7P6H2KU+U=p{b)x?b(`u{TDFFb>?G!E zJtg$E3@d7u>JME^qNu6WO3|Xu!%h{^#8a*HuT+}tMjs*D@lBh+e_IXy_0d}BE-B|v zYb6Pd&2WKT6Pt`8Yuq6Wf4F!|7o%$2!wz11#qzl4*9w@$I_Wi3L{*1W9om`TvKv0{ zqVjCnUS$OqWV?AZL8fAzt;0dtv2HM+=>*X)ehP4?B9xRC*afT@l6t(ex`g4?0Rv&OTW)Q zbYu>B5tHf5;M{Z4Q1mKnaSL;7<Q}=bzDLAl-3rhCvs~41Ok+Wq?EjF&Oic=0 z1&lWAHr}9Q%spD#9(m2X2J+>yWXZk~-YP7^W&6U@^6q~uO&a5LO`8|)#Dk57bk{ap zeA5rWI8_79YpFvjPx=RpD?AZo>*r49v6sCreD7JGCADHw&_=x>UXScuW@|HJ&Von8 z>P%;;Hivu<{kjtdRQwbW8P45q?}&Hfn<_}dKNiionSO$a9-2N3Pd3)WxF}Xou^w9K z$>5$lb>KCiOPiBpWdjgwtF1h)cx-jO-xqWg80s(B-e~#PG{~1?SoCpNb{;h-_q0`9 zt8r0ZEFXQ-NQsD z3SKldziZnR4vB&&a1Zj&qR3-(f#C_xt2XaH=2p|5M(*Qy;MS3o3q}ux{@qtylREs35gXQ zdZCea%eF)xbfjolsW`oPE%Fx@yH7~FzY>SF3URf)D(!eB_E%g`2=tqE6LGaF*xk_H zGyWJj5Z6<)bX*onaBih4Qb^Bp=|UnC|Nl>;=n07Sly^E$N!n_rof3;5AGl+T50B!j)mwuZ}vUj<} zcdo&8&?-6ib+0c3^WF%*RgSjXo1@|3ZEdi@9&6ny%sb@ZwX>b_-T zu4`pN&WRCo{(HS4p76cFD2q;sVA^~Eb9X+ry;yX(xyoGIUs7t&EuWd6Y+y`O)W^&? zOwtt(7;$zFVMnl>vCWA|GQGBIWoJR{Ek-y69hy#!BE3EaWe&8hhzlN$;y{89DyJ>x z@-RP7>Pttx(IFTXtS$oIko@oa*<49>#x9@ADYa9*IZ6FfD0(m6u8T8tHt3H~ z+}UEJLrO2@EY_wUdB*P#w%lF&d0Xe)2LcSeYj-vh4ZSk}|9ERNLhIQg_uiUiG_YkZ zw$M*|GWoeZuQ*b;8FDv4cX{{H*AKPrUl5w06TCO>{KapAX7!zQ0L+~A-);^gTEMzj zg*)v@o&_BB_9XZ7BC0szz8PgOK~H)wVQn@SsyMP;NJMNmr&7i_W%#Z2v#&^1t|$Vr z_(3>e-Tr0l=#ugI)jQX7vDRKQ*YnrD`+$tz%YY8DFaas)6u$;a`qnJRCL(&@5XNRA z`pov=9pzxgwY<~34sDF#<>*rPc^)9gxgFr9_sBihbHmnydx%ZX*1>xwRYzCMSz#)?Dn@c zboo1i%Kc%YysXMYg~wnt_pR?^_zJiAa4^+E&r(xiwz$K-Cf7#9^Q&aCV-$VsTGmEH zlXpkk2(1U^Hz4K;b>~T&pz$F_z8jmVyK@7!5#e}1;=QB1!s}#^{ zvk~DDa0Cc#UlBP5gXh&e%T#cTr|8SVYI|quUB)P@{R0=@ z%e$Bzn=Ao$>=0Pl1Eg+~-O68@uj6l25L;$H)K8KIx@s`s~^z*$~?%TRKhAmdKQ zdN`aXZi_c9kPDbYy%8~^Q1s*&Y;U25^Ipw_&s=(g>}6KsO*GexKzr*x2GPATHCX5IisM05`j(8(} zT=fWTOTdodMntQE0|n|BpGgj1{~vzN68SNTvVDW+cUhL;!C~1SfiId1RIJjyKboCBBbW65%kp2K;??Q@wef_)XgymT2cOtg0KKg#{P@f5;VFix})0t@_oEq2fp<2g(44 zl|GFLUP$KW?N@XhAkjJ;p>+xPDt(NKQrNIRMwu`jiosdT4BTj2s@|wHL@b;ea(Yp= zRJ}BC1=LY#4PP)|mu>-Mda#}+u7}6CnkPQ>$Va;K!f;&5f|g}{ICTntZ=s{!@oDxlHbj#3a8TaNB(R{V)-(48ko&>U> zT=#*52JnjgxGBm3^D3k*%Ha=h{v41euJ;?^GY;&#%{Kn=nEpn-?gKgM%HQD+w}{tg zz?w6rAY)%jxa_yNLk`0Z`}Q-U5x&{LheU!>vw;M6v8in5$A12$vHPxS)gLeKHLhj< zlzCZ4N2YbFR7XcbC@l{Nkp*H3+dFeJp+D#-_+_ve=geGVLVOQEt$<*SQ9dq(CGCL# zGN!-OjciKaWEAV@h{>?q3*F+YC-brF171Pf-jLr1Pv)H=^*4avV*Sq!k^;v(FX~Ll zD9E#og#wQMbM0qaasuWfY~O;Zk=(i3L1M7G!atS}@#O@fSma}Jv7*ews!p0U=z`y%}k&17` z0w*(rU&O*AvhU`3;{SDt-rV~e0fn~ZVh79b!Rn4=l*7VMcwW7M(6j$l7t~7(EAj$4 zKf*`<0|xqUmQTQVPJC=;j`2_H1flO0@SFr_yMgZZASBpefs?E7@@WSxA!xQ)>Ig@` z_v-ckkl$Ge51#hZ#!?N3Y!c`;cLCNJ9M1o5A8b>_#ZoBV7Xm^gFK}|O3j*)@^-~n_ zIBh~_>=$5uxS=Lh|Jz4h=4wg*uUYfehn|ql2%6h$5zzfn0j0{2VMy#g#fgGrc^}PHfB5V?k9iFvp4PP)+0i)fa?Pp@5M>s2o_m zPK1=y9{9?Ovf(cjf;JX3oPQ=B=NnY2llkA=m`OUYu!-x-&cNzd5O_|@#!#2eVfR~0 z`qxad1Ln=Z_wh%1AHa)cS8qOSWwTyC?Y4|DEAJdcyt`4|!eg>mN{WkR9NRSiy3Gj| z9E+RFIjC5%T7JlZYAO3PY@_t&o1T8vNHEpZ7Sopey|?AE(8=uoebe)+vWX_octV6n zHez)Dyhmet7_U|s>)oFOaDf(7ZG~AgnP8q?W8kRLvf>mF?PSG$$>WmoWb+SGz zKWRzM$*x6(ye2Ofef>mx)QGf`i`&SqIypbLwlIuHw?+?XV5n#}_>@JYW{TITG-&EV z)1)w`c0II6v}WqRgM=WEDJRZWJruvILW;&Fr~Xa1S$L-#5XPJbM}jX5rAzZ-d?|*v ztn;(Fwxwt`tqyXqY2Fc#u`fk<H2R%j!_yvxmUgqF7R{++)MHzFdS{g1JlJUm7L=PR*-+Wvdr&wkMK7Msx# zgu~(_KvXRUX%aGbic<+Mi96W{!dJwdbb;3I^?!iP(z&TLuqW#YD>A5Mt~dgoL9TR+ za&R&LG;?wTyay_0hOb2T=qfnUQFQR+h)0IZbLWU_b)_VX&~|qb0CIGG|q;pb#)X1isP7Nf;DFd^Oox60IHWE#ol!3IqG#xe_75Ems7DkOtgTB!; zt~r8guvTe^y7s$)Du6gBS&v}eS=-wLtE;|p-5lAh4%Qvf5x)E+BG8<(8q%o4SuMtH zb<^O3_WgNh6L6zC*zsbq#;u0c|x|W(&YL4m_Bms~{ zg&+-Uf^n`Y4TPzDgq5HmSz(pg3mlE}RB6=mj9}~{ ziG?-bIFZEnb$~Gxn5P}Ag9W1NlPRi3s&HBpbX0z!{Rk_gDxUoaE%BJY*hYlAR$$Z! z?M?w9Be2(*kSnL)_!1H>tKjI({?J#wxB5(ScxZ=N$p^8p!993E)iP=dxdv2weD#2D zRR8f=^d|>UQOHMx4ys?AHiI1XvYKP^z!xaC-27?BV;W98V(ZW^V_tyr zTIG*wI-ivoJ}`ntPk{d81F3A$eo3TaRZ@EE@FX^uWrV~(Ulb^;%s&PS^|eNSScm@7 z`ea`-P&j=b4KSRL>dI_Jy8ulSLk&4*|*c7XIvk=%@88U|$K#R$y3Hc7n zYg*~SXyeT{&ucpC##9-h2FynA5kfvzzvlw>8JFvdER zF@NdK+L);utqSUQe)+m31VWmP^fo&ZD~^BEV=|S;!roum3;3(Y#lN0n5V_$VbS?Rh z1vTv-Atnrb7*th)J-j9VtfneNDnylSdwUGsPa3o)u;cJ9HEM*3z0ww+%~2eyYhh{r-iOTP_8U)n_VV10xl=gAY>^DB_%yGX^x`fUeKj$9@!s)vrVv#v-n(5T7K>P$1I1~A8s8! z7iq2;#7CE?v;tg2@}l^S>DF)hvqQoX4Uf70=LNp=P6B)Jg~CwZ#ZN_K!yy=-6}fzA z@W3AJUQ7T(e6o4f>%=W>5^LWsDMQpfDuJy^$^<0Uo3OEX(D76n< zRiPNR6^t5+*SfG!2QKBlfB{Bcg9=l$&Tgp2)y61+I4NJ?5~ePox_I23Y?cT<157A9 z=}umU2m|#l1(HBb!`K{9Z(<|whp?%rDV9Tt=tDN5K!XVj)Sp2uObPT@1E2g%URT}0 zd8>X@ka=IQkf>ne9@TiT*3AD9n~I^AB(RG&VKgBiAJ#6y_GH;u1zec=ZNhs(6!%qS zjjy2IQqfrLFM~k*f+GK_$8FJlei6Foa$LuD$o9(o19KSp`sxUiLE!aT58(aPWUQ7; zw2-fmF>Vu+-6I0MrC8@Faf84eA#t*@Z`u`tfNHxkfSk%i1>~nvo0E}GRa<4rwySxw zXoK7g0_nk9CHt*@oL-Ux=X*h9I;Fo}C5v2$eA#q@ z`T5h1t&_E%n${;^=TOahXvDi|&Kfw2Azh%|Zxuc85{+2wiDrFJ#A2sP zv4l8q&SY9&noo$u3B_RwFzuA{5HMAMiQwaM1||=x2)(Fijwo=Mat{VJvSq&(yMonT zE_-secj$m>-2HHP1ys1R+Ibhx98mo_JzT%D0+8@<3GlXea|I+W)lUsnW~}w!IS14a z9Y$bvUigHtvBK=$`3q~q>;r_2xFq~PR85++FJMtK6tJ?{@;{X8=X9xiFsT>(&xrve z(?dY?&p0$t$-Z1xuYLh)WCnpEVk=*DKcp5Z$^|qLt-vQ?9?($)D`4P5Yji_o^oEkvQbQBq zVdw?)B?sw_ir0z4<37^^o6AimX;ER2pyWAWmW1=`ZDpebtA}bCw*fxA*(A%0k><60l``OU20yDng!EQ*4(XJFDwz=Ee zb;1@CjZ+1m5~mdZ`Z`zyJyR{$s(e|HP4h^chZpFywU?vn}@+Bk<| z6aUnI0u^~cqGH*Ys zD%XaA(+kq;MNcd{rK2!BxKyBFm{P(9K|C;tN4ydO7(gLHEbE@ge3IIj*aoI!>G%3# zg3!$FbjWXZ;FXfqHrqoy8A#)Sg9&Jm>Yrc0h<3t#253gN2-~4Jgod(+WxEe}Z&D+! zu9m=9^FzsDymF+LHxJu7UinuoFP`1PFvxwzWlxxVsAt|QHp{|b19TOnZ@FB=xOtC* zvrTB(Cs_UuIP?Vd)j5E8j~2g=daC~t^)cJ7?N)5o0;csmW79Yw^ELH$@L$*|`?msq}&1Pf$@C&T57(D_Ko(=W?2U-WKY zXnJH%%Dw5^dr>C-rgZn`2b=7Pxi5N-*%OO^#WlxFL6d2mS-UUF>fSJW{0*yp(+HH- zy@Bui6#bCn-FkoeTi}=sva?2$UH@X!ANot`QS7GxIK#6EIv{1rmN~CAP zK|A@2 zR}g)!j?~u#cnFE-1D=z*zC;#-lDvdCJ9Ur~_zA%C=ij+%>9!=k_}uQQ_^(xMkC2W+Lv54*XL6LtylK=U*YL`rWf0@Ck_ zoJfoRvT0Bv&gBnm{v5SX`LKe8eAWW2R|&xE$HgW_M$Y7?zfxwg*WxeCixJ~W8XHwf zi|4tU%HwW(p#6Bf93m6_uK&G~Y(xSaSQ;9a58>6zB1S&p)u(qR)Pnq+t93CeBJcb4 z)_&U5THDpY*p#$%W=9>T3-OV{;IC6sLP0V`1HGNencB<3ph9%KK2R7Q z=8Ok}YnFTjRJCyf)ZKK&gI&}KoddnGBikC*g1>imlOs0W3Wjw7*M5m2HVM|^J|O4C zisWuwA2=U0VM=`Z+8+WTRpzH_iz1uZqP(7xmUfYD+YQ;M9kAG^n+P2daIlng9*<{efQ*7f=<&IlMvu3rT)NCMU3rMkJkn!b!)>5cpB9t9#ASe*$bSZu`3ncTPmH>LCtv0bL1n@atGouT>3$AKG|OxrYtV{b>dk4*5^%ErQ{GK(7Xx*?f+ zm4rT#nT*-8pCU7(v@WleLot`Tl@pDXBS(wH{^m9n)Q?_%Nvlb3t0UqN_SQen(BwV5M?REbe97A z1nal*uV9@bw-0K8!}M3AlUlxepD`SzmRtv^ez`P#AvQOmwv@n>8amxt%c8e0-K1Fx zYuQW3sX+9ini;=BHj6{IK7iGgU+JK$?NZjWiur+_0>e>4%XN_K$J(3NyX7>661gQ4 z1Q*qzuXqF*9_!pOz}M&M?=##CTVT_$R8>PuZF2<}|G0`AKzo*hULIvUngqx8f* z-82zx4ygqm1%WQ*1HN(Hd~yRW30^nPClojYW}rl>tmpaLn}RJjqN;&59o?|j`|IYV zguZBCt^~G_9*g&mZgYVj+R1>{7#0%p1!tVcklnqw@_O5j0wCmq}|j!y8h!LA=sey@`sdB z-XG}H?(;1X@W70Zazs(5anoLL85PLxjNXlB+Y;NvNV7ZseCys|pHyDvf+nLNP~TKq ztc@Mm8UmALRJsGpGk-S0fJm;r`~rW`J#$?N*8((ZTSnqjy9#dpw00gjssB(jrp0C+upNG#@Pu|CPUH=YFu?${5WIqv*{K+i8#PqzMBO|*{8=(+&jg!Q7BY-;y* zqFrkPbF0%fmMnK$@}*$(=(c2NYy+cT3LO6&zO+eD%R}FABL>IGkc2we7!8gRN8t!5ns)YGS$Qy({Hb6JiYeHE*D0yi6p?aM|# zEYGHcn@z+6U1n~g!95uP8v&lT@oYPnZxPk`ub!Yd)n*3XB1({hM5yGxnPqHP{s@)K zJ%a+miXB2!a^mPI4otn@n(G(UxX?`2od<6bHq<-s1W`2zcYZ3E5!lXz7-nR)t#zk9 zF^mTJsyqZ#p37GZSYdxBd3gX32kN&c>rIoCzE!ug4%Gz}iq?!gMc5RJ@jS5eDE=WC zFlFg~Wqrj%!WSOHt5rgvW$vQaak20czbxparD3XwX6h`_=z}P7ue?TS@>^@&)M2TG z&#g*-S>(wzDRB7>a&M<*gvMY|Zn7^(YpjsIeD8MrA`t4cmrou5h-|O}EEO#WZgy)D zYXoj~Gcz)Ig`97xoiH+JlA9)+K+VX!@REDtp&hUH{E09(Bz)gy1+(>4>^j2ierw^X9B$N&pb#(dL99k#M6m(QP+VV>>0rrMp8pIHG){c9e(eM|K# z@X^67!{{5mqX$y8z1UQF*W@o-SsgEIgJ48i_@uNEj}c{=XN_I~zuu8G9}BOx*9p#Ydl}??$U7JAi~&?Kf|DXPNp>KBLVQhlDAyGCvOA0Jti*bneP=z^sY))CYv7OX zSl#OZ6WsFv%TKX!9L4V^utwGGajfBvL7@5kwYs0lH-&4poqz=PfuMP0L2Y}o!<5ty z6ky|>vPGSje1&{7Kc}eH_-5+LL4C$GRd;e>t*r<0J4R4D6O3HVvi--kxY{jyq;M!& z;D5F;_Q<0kY%o4!fF>9=|KEgIUDaz!)O3ng4RBz-QkZ_U&-Yyh8^Y;kBGnHFo;a)1 z0v9c|6p|WUDNk*-KP#%q&3Xg%Meo!k-h{d(?q9unv2(yN)%)w*Y}~UP{(x=$ELEtc z5I7s)*@QfK+j;eMT-Uxj*kIAKe~P=Npz~_TI5KgJVkNVzptehQaMJ9&1~f#{V07*N zd)tvOH^VJau=Ve8-Bb&GCS8S{=FYyWlPT>2;V{W`ZOP6)uajxo;@wEsj$mGeo!!im z;c{c*D3B5tsgTKJbFj|YIpB5D-X3Qd#;dCdIQ{gxXIyJ$MUqLQ-!ZE8xrVmX+nu3t zly4Zhm`2*BBI2=^@g+vPti6Jj{50~%kv8(1N9}kP)OFX^Gb`7A*ER}R8PhIPCy4Ej zRPc90es~s&{tIFEEF|9vVCNb!^9=%=0nXA~ebvr6b+d9+%SoJ|{$B7Vt})yAajll= z2w$L47ym{g+Nk!<4E|)i;oA2=ez-OYs4=sS!JhTxDbE6~L89=JX~C~>`D|9l)5!K> zZ-RWDq`2EvsV;tm(oL!E_whu<21V0NJx^m-iQ4=KU$a>yZKKjyldEDKC!Cw51NTjx zb>kTQ{PGm7yK-Ipl(H+}c#(&4oz95gW~4(&KI6vgS7ZM5mh`=o-0-(V5CpKt&@Q*xkO;HeZ~kydGDP8wE5OwwR_-di@*~r{mI+EkIKem^n`rF`?ygrp!`1 zfqSaV;!}M4n=#@zCv%yJ%QsI*(xK>J=re=V=h#mQgv4V;QP6io+L3A}(S({G+TzNx znDZkRp7*8Nuro1k12>j_4PJdplEb0dzQebNX0kuIuAxkVsAL{!Ke`67pww@f@>?nh zYgFzr(I0~mRNwde*XuP-UL&ZeEsrmBZrg*YTBNps9aiT7>m#{q4@PKB=maoYJ!Czu z>IbZZVp*HZ&miZF*D_~whLuA-zSWD1Y-i(2jw_0%B*7k&mqN~pr)U2P9pEA?Ahs(i z)m+wZ?nJ4u`C~rB)y!a&Fau}P=B2vU!iPAi5Y+LpN+VCx<{xv5Adm5WBGkW~ieREb z;&k;Z*sxd+KV$CGF>U?U!p{1Rw+a^o(E`Uw2py`w-L!-&U|%^v=(LifM6E z6Jb4mUB8DHI@RxM6~h(qWSUflHM5`9bK`fv69|rDcLXbC6i=$5F6btL1q?tRGRbXt zBGOskkus6GvZcnh1V}TTKw}w(d**L^=N!h~hcQTejm~Xxsqa5!_EIknFq+xwGH{amr&VNWE(JRYUs+|4z*DVLy{b9-NTv z3(=m_+;3C5I)k>s5Iuq1iD%Cqqds2yJsd>t_4VYo2{Lz)9ex!V&@L{vSB|&{_Xv~!PxzoK^ z`B>`Bp&sXJDi%MF)0OJ8IH@8l%+m-&GoRv2|o(ymmWsBG*LASx`mh53bv0r^-UgB-Oy7k8oxbK1Q;Q3B+GqYTo$!We-2&~J(s;B-UR0y56& zqGuy?{@zPWarMC^u4diGm8d0Kx^Wn4X)bD08?~e!wRwciOj9B{MAgT~yO-uPw%Um# z&a^M~89x?U9qY>dRUh7X?)TF(WBR-AH}}VE(|+IH8wqqj+xnC~{jlZmQ*#GCeDOeH z{E5%Tr*!=wSx4z18Ep-!D9zUVr1a0iEx8^kfTeq>pEZX@hhKFzEKcxfv;&f|Tf{qV zGsQWH?rx={+w#O*3e8B~4oxtxtM7S+N(zK0yR_}GtvBC{vTROX4>ZV)par1=WgwfQ z%DN=Uv+fI$EHOrsL-obKiipWiyE~Q@C_9;~T2Kh+(9Rl$7-%rRr~yqCg*&zX&?@ut80|3*p=_uMNuk}&Xmek7{1iX5@ck4oZO`?DoJ!Hxv)#@<)+2f(jRkFiR5pER=-_5R5 zF(k?v=JI7Y1lf~*g3_2~ee_U^RCCpq6yw$W~kk;FMEpv47Goxz;aTM#f zP=A5DYbD#c$u#F0KET=TL@?J?1giu)OuPP@>?v;>Evsq}XlA$B0-j&UZjj%Ob}bxi z$=@}8H}QccV_h&3bVk&&D&xF<8yT%P!j9A9bNXO@Mvb5U5bfJ@z_j4ya5N=j+&Qoi z)zXqmm*0kePPHp3)}540JvpTIxNv0S8R%+!xBPN*f9l%x)3&b^JhUN=7rI+`>j?zR zU#OZ&;*yfZcK_=PQPO`F#N_oqkh_Va0La5c?is2_1rc+3AEd|fIK-)3{sqF$=Xy%Y z56yP}&s>|AooJBfG-d`W=fFTMIirS%!@QDXT&C}4o;Evo!dIHwqS&2Trldub2Rn&Z=k(LFKhqY`l*msUef!(Wn^UaH_ z&LU6M&i@)c3Jq7%3ohGjkM!lF1j+^@OK#?R=@!M_H$z+OQ{P=WpIT&v)834& z8$}9$T0q<74a28DFrg{$PK~#vFU#FBkEW!Cee5#OUcI*tE_3B{jLR)nWrOyUSxsmg z(yO2>bW>T&5*oAH=y)!9Q=W3O+M-9CsEPk8`gZ-CM0huR(fL!mF=1UuYk$_IKz9;V zkjaN;(H%BY)ie*6-lM<9F6K8=b4hLF8EcO7ONVv2-w(?-SmjS?49|GpRkBPcB_9~A zu%*raGqn?-t{ipZ9m|TYXl-f!VYqFtEs#0nx?_A~bUD?`>l{F3%<56kFjq!gy;SbC zu*^1`>741wgvb7F+nA^Ax;&vyW#XYV|RHU$U8~$mD{OQlvpnrA4 zYOM=OKA%SBCpfY?dM35!K=BVMjM3eqtgFRd(kw22B)5v6pGIUjPtc#CUQ2G>U?MUO zi@eroTW*{y{qm;GckLaIrPde3>9hVDn^P_tx59;qrlM)`d!7(+ot9<1@8_y>!I9~b zIV1_JO_3YUig`P=9+{*Avp+3AJsUWV_vp&KymZN0ZB>;bi6zXZWwQG0{klg|z;Gri z(q+`N+oe3KUO*-Cx;aUDveEc5+HTcXXx@}sas=_CVU=ME*hNU1AE&bENA)^)W1=g2 zYAfo8hra1e{(e3^*AV{z{3;(b=#KX4c_nv5m$2jePw~n4`=-E@^OsrMyU*i(fP{}6 z&)xu+)BN%3kV&isolO&*;eZFO-Nvs!6Yr7Mq@^iYReAGC8m`jh&wm)my4)RpzjE}~ z$0I#hec$H0wHSTTnw^}3cZGc8)y8I53o{xxCnoJ0+_@wXHD|y4FvZr3ru?7RAu)`zE^~|l%^%wi znJ)1>H~A%_VpYbrIhiWwbiGw*m@4PXeN>?A-IxTLe~Lq~VoGXVnCMx{-8itaD!HyiZ+ukz`2Yz z&X0J*Jrq30@sc-Tpr`#~q!&0ui+eWsN;$-cd;j)#FpP}rO-+4~L>E0||Lre@k3{@R|2=pt^5XOV?k%MFWH!vJE?#M0 zTn`LM3qP;+jrs9F=4rsy@)>8>55?zdP|M&EcfHO>@k+mkN`Ir6YBGGF0`ZP@iqGwq zUjj{2U800JJ0HS|=oMxqb<~|7*`xP5z5PBTy4?A>DLjBtC{!D$2D4 ztG;FSx;cD#mhdt+_q>H=G+DG`pz~euNDCy!0g-9;%&=FMK%@uCE!Z)(|lD zQYu9Jg+ggpeZXnroU$izGzVutM@Ni0?g90>_K!g0WH_R4!!x?@)c42a%cn`ftK*X- zQ?hY9v47ajo=S!F3l0V{3(9$rP3P$Reg-^*L)qzm-v&GXHjN60({qS3SmOOQFT+d2 zu{pjGjmK`p--mE*)GOKO$O0<9jGb}v=ZJ?E8NcABbH}^S%k|lq{+aPfSYhtxM?8d$ z0Xcf9kH`{+S`yWNmgjRhEP1H04+a|^tJ)=fi$|KzcX=lMOh_*wDt>43Kfb9qPWUdN z$7C+q(w%wnnNZ(&LZ7*IC=UTD9RqtU!Lh|vihq7Rsm=SYH>R?h;dA01SK?0*4yV0i zl73j~#C3FGlEM9PUg`h&tZ-Dx7KSocx5vIuUcWYwINj#E`AnidH9qr8r}0ZYe8?4V zyI0SrGYB7(P;8z}VYuB8U{6$BW7ZQD|02~juc)0o$QRlzVsjBLLtlM)FQE$Gg6tn# z_ZDvG6S6vi8s%S3%xw>xZ(0~ug;h-29*ybP{UsTa$*v}_Bvy3^?0I|eR7Hj7VOA;y z3^X|Xm@bNdxH4CVL*Z8RrT15%HVo>42PbJ%%~WF#loSHmLZu*G3j9n<_Y(FrW!1mP zifQqNlIV{Gk_3^sbXv|U(ou7UN5pI1vtY4|H@IIXl>&+M;VtP}c4`WE$Gp-x!#PQ- z7_idS7>>D?HTzJVoW;}~zC)*A)pG!4RD&wsydpy;bA(*Kc`x%`h^kYxSaJYHD!Bgp zC!MH#I#B`shse}t{2ku#73JO(`kO|$lakZNNj9DMcacX=ea{E`6OwUO#7BHdl60Hj>dzI`Q6h0F zS;KY(p25{m&}eGth){IV?+&Z5l%xZfJ>F3R)Nsr9PWO6UoH6~i2iz@52P-~_5|0YF zC5_MGM84lA*5XoFC2|rew0WH`9pm{$M8}rckn?qi$eO}j`)vp>UVhHu{g{GfY4tch z@q9xD6~(|pL*i&q_utnS+)fyw*5FFQd`Uxsimw$E(~3h(YWfWU46IqA%R?f@<-|lr zLdw>f6Kuz|W9sJj#^6!2v9-&E4tL2ejK1q$9jO#Eh+svnE-SlEnA@R_~qRp4rh z++3U&c0zlxjeEqwzu2x`vx2>Y#xNCc6MSDFt56h;lk!y&iiIShRZqqKrL27WKAcoIrzUM(p*O6$0Tk!>B4C`w&`=UYAmd-C zA=MT7@P$das%#9N&K4{+qnl|ERK?Xt%7IPoWNe_gTKXGz?VPi2KZ#B8 zg~D&$5W8h6vK8arH!XA0{>tD_15*4JxV`AcPrfq9XP9qD+GQWLe=Ehb z&_nq1_G`V=f3(@iiE6=Ahj35LAu)Gjmvj43f1wAEfo+MQ34G3k3D8e%h+ zrmW8T1K;rudrk24qAzp59!kww(lahl523sw*jza~<43{!qCnH21;sR@)?>^!G8H+i(FHO}hOg(+i&1 z_0ak&f!5=q<(#(j)&q6v14=pWtk45OO!SMcxhDq`Jh;TIPs4N67YX@p6?ofHqR@f$ zPQsnq0i7#w&PTUl4|D&eZ-$*}P5k(&w_?>;uDK6+qSWy6{Xg}0Wz$er$ZX3qu3Sf+ z(_&u!C1d6+U>n=k>VzlDyh?_{CJ~w5L4tuug=l@IQ%+zdVYQsWagIOUw|%LQ|0aH> zX@fa2~!OL4d06evlH6STo8QrulbkT=io z|KrA8eeC4v57KWw==uMacj|9UPP@)_5e( zBj|PPyq&ysuO$7T^lVR1z-%t-bMqY4h0JMnyy}a~aqfQMcf*0)K4ptr{mCK`U%*_| zLi;)O`Ck};A7)JOKv-VEbyd9K#d(DV=50}GTqufk+k6TIZcbJJJp!{6k-Xd&?y$NZBZew1PFffZ%4ItT0+Hl{R1U z?jIQuc?HXb{9K$#xT=R1ZMr9}UDRYURnai9RRdY??XWdI$eV18L-nK9`i7cD!T8-H zckB(f4^=^03B?ULx>_HlU*XO_6^eueE~dl*CZ5=z=3AqO_-~yD$NaC2nrcPXWllTf zx3kR5xRET0%F-9bY5pJJjg2kObwuzau)x%aaQSRzi=cp%fJ&l-j915C0MWb5X{x>`j^D#jac#`d5GmAf9ElCf5n;3$m4= zWOPZK0QD$})?z}$-*?%g00!~4aG~_`C%F4pL`dbhr0;oNNjg^7x#P0N;IBux48=9r z7@{rig(2UI`~M?GH#f}7pVL1ifJ+$$2(54VC{xhGlDh;_JwW)EcuRdxc3OCk@Jka5ZuJGYjw*7MYR>0xNv)8c%# zbNFZC@Hydj3*oa8yz0^xMho?VkFVdSrll`N((B^`vIPqEM7R=ZAaXvEG7Fy zDbA{xCjA%b{)d#Y_x5>gTdo>OK`Q-jyer=B=I@Yk8K*hS|k^(%sFAgiJE)QggT^slxbmu3wjj=PBbPJ0q1Lf2~^vWvw%s zC=@tqlJk_Cnixu)$TR+NG?=u5M`}A{t)Y+&@g8vPlboUb4EInRXIlBO1wl%MipBwc zia@oJ2SSoJUJ1&vF0*18zG@s>>H}>DTtB?r)KXmJWO8K44f?DwHA(9ET6WzkC_p{Z zKe~KPE8~zZOs48m0#m(Up%tkFavfpF3VWV$@p&qyM;G{}a!*;yie~^a_jpCf7%0G7{f$v#%SR>^r@Id%F-R7jkCXC{`yb+6cSwFL5>Q- zn5z)gYo_Rz=DW6o0G4INpE@iD@T=B-|Km=IXplqHDA88`?W4OdDQc~F*3ls)_?t)e3Z>HoIawcf9nP_)gy zrOYZ=A{ouxtCDA-yq+c^L~4AoEMwXQVs$O<0Q~ka?eb%FEve(ug7R5g07-qh;uR{; zMs>AcN|cehf%`u*Vx%_=ldg0yt5KuXPKpzX=~%Ju72^r)3M@qX%5lpKb_IEqr(Rts zd(P9gE(I7Fbo;KcZh}J6b&OGSrYON4BAAYRH-eUr*QB61 zH~%BauBa0MM3+S1PhNLh)%~i37}I~>rN$`7gr`jNu{NFjsI(DKZ2$SmkRo1QBPX?b zz5m`KDT86euOYVL+E2rN{gc(dF-7MGKVMFh4q| zp(WwwvjC5^Dw3j>{H41JPg6zgV-Vc-NQ%^OVtbBjnUsU4d77_`G*UPHjl7EsX8K_n zjz#OYq{TlLSVs&v*1hcA1z5aQQcH^$(4mXcBim`xzWdmpws=(+rnN!#zIce$!OzZZ zP4uW>R}|8H61#)&Zwk0;{VX9zf}ER8rVC8#5?YnNu}%$;Y59yF%BP}|>LG^urzEkp z#GZHR-m3?rqFm2T|K*DijMfu>f9hY?#*{$MGbp8{*#DB|tB?e9k@f=V%UFXHyFxXS ze{x1qrv*f+jkG|VUaJ()sT<_=_d&j7WsV81BzZvE#%I-iQRk`wvzLUF*`<}Yyrq_| z^9HH?fg#iRnr(?H#jF7lBKw5rv<)XT)8Dm=4^zo22(E_{uRf#h?EH^_oI0qRSbqHI z$#f41Ys%#IQ*Vp>>R%UBV)PuJI~5osx^ipnnKiGUcpNEuVJS+l5BTy9wiSR!SvsPD z13_yB`-pc|Vx-|_*q`_w@X4ae>gn0R{BNO8MbdeT>Tu|Wp7PbN+4CtGJ#qX^s^dp) zx6S^ zMHqU%mxi4)@0(lOwPkV?g(=E^XxZVLX|^s+k{gvh$NP zVM%Oc7XbdmMOQ^iQf@ecsR|=+u@P%ib*1M?)J5Rtm=dFKGO_GIPRKSli6yZwHlmPF z0CER-`ox{WrXPpXPAl#kU)~Tv_o+MG1}3<(Eb?}o4E?DtGUve2M8LSY{QR|(ey8MQ zRfZ{ki7sHFV2?xenHvXHxNlL0FJqm-4SFz9Yn zci9U)O(TI(!4bb{_Kh);7h!5QUvQc-tB`4~;nIs4aVjk#hP zfe~GPn{UNv!Y{(y+`6h^v0!tBp-Wvc#TgTG}2--Al zt7hilDlD2~POb{j)?tX@+hXB4hnAlsECJEO$*x9ZbV5PY!&Ug}aAA4%x%sAd_tfE1 zQXTJzMxS)$T9`3Yk90u|@Hd#WXZ_l>4%4xwp&dU0`5|1^^=mY;t48c&ZUb*wV>hOL zP@$)g~-yuDTB%$hqpYx#MdShuzHl*|V)Np%US;CD)|3zyP%#rHS9*MB!V zaSA=iJh4Zuf32I_RR52=KJ8LGl<45g339U39Qxap8y3WM#Pi|G{AR&F20W1RO$z4ltk9j%p&PZ?49*3iF?m!fH{_uCY(uH-cxL-+)^#3CZnb z+=Y;LsI1~0_2NwAlZ}o~884Ftt`ILFpHn!a=%Lhx>G{u+Mc^qS9FW%lrmJ_^DTqLb zS#h;CyE^v<0MUspU@4i51ZllWy0?BK{aKZy3!()n=lrZ+6NfB(JJ3ApVo5t!SxpwM z6IPvj76mcX$j@O5u)<1?K?Fdsi@%GKW4=05E*;&9NLDX*e5L3~ z9lruSPWK4qA42#gVspE+$>IndNEiEv6zc^<7IDE;U*JKd8&x zcC1fS&!Di5YlV*YN^92RXauqa*yp~YLZDM#>darUdc2J;OG}9X_1fv+9b*dslfRjF?dnnmxa|gQYlvnd% z@xRGD&r1p_-&f3Pp}TRg+mJ+%rf^EAOz5j9w*ACdL^%xYlN8w18B7vn{umoT(dI)8&7pW+Qr}{hxfM}8m@E5y0Sm6K#?bY;- zaCi2+-ykN)irczV?0}XHJA$u4U!Jua(hM*hG~kbl(?VqQida{T0u{NtwcL~bOePMz zx8X+wB8wu(QD)Knj)|qwKu$nK`f!Wl1ejG9(!0T|?wxXG%qk2i0bEhFh4TY#c?`9( zlW>ZnhYiTIMCe0<0D}NgiS}@L_7Qp;f2_CJ>#s?iswYl(H~ZwyRevjXHzIxYnZf^@hM{02!h&L2KHt#E&D; z)Jbnwe^u#9u|&b9V=U+<5;TLjt!!0@t{#SRo1`7{+-5iEtCV*^x&Kns^T11;3}Z0K zEc+Nht(D-NKZwrCTk#(jDAP0xY%564)V1eJMV0D4Xec&BZ3>l13{bB+d&Q(>V6bH+ zUH-Frv>&X@{XWzJo0!+x;dt*KX^AUgAVZvf%jCbA-$jU6+S|AXO$#FHu`pfj391NbfY8tU zp}dSk5|k`^{lE^;*a<%EXG}Un;6V6*LXzZR_y{M6lEjA+SaG#1jT}3+iigo$WTDlL zVH!Sw^!<(J1}Vs|L0`IIN`2!g!k{6$3h2UXD8(X8K~0xk|pd z-Fh9y4czE9o@8JNAtK`7GxQ-^h-{;eF{umzf}Cb`_o~K$G6IO3np%4y$Q2M>Gkr~})w+?%k#!LnMZ;_yf#}^=j+M;Kvet(Lfq6jI7 zEjv^Dl*tAz=s}A42x1NKwzk;^Awb%b;>`VCzqA+pIVeiVlPCNK#fp%G8(4#F#B;kv zLc}%#6}`-?6^K`mvcLJ&nus>>TfQ5kHsgLqw{tM6(S3{so(zToj`*VSqowh!<~C3% zw!9f!hGx?7f4db$zuh@mj;RGwl3WfK^Y3R3=6|iT<8;QD=DTvU2yQfYcAj)?E}cKN ztP16KdUKzxV*7>;8yi_SH%oQN*u?J?*b+W6#^NP?&G;qaYaPvBsy8xr1UTQig|Wg$ zX0r~w`e-C#l`0&Mpv!sMzTxO9UUP-971UQGITWyY{A{YRN8#uPvPw}*Qdf&rwLMHZ zMUzo8;--#Bz=+T=&ssAO;zhWEGVj%`l$JU3mz<)PyGrPv7-bn!88z3;eXd2-QM+-a zr)W9TEHcJQ;bm5p#AP8*;srCEWGk#Y+xW;>!ooCm6-;I28veIyiC&PAa(!UDMx&N%>}B|5Q zd9%a&wAwZhHlw-Mg@|C0|A=M+&TN?`FsiJfj1RQ+SxBhz4Qi zr&{fjkyj3MevHQMlloN4#?JdHiei3DOSsPaG~)!T72#JE4_hj-a~T+=b<^lC{W{iC zn#(5l{F77r0BVH8hVP#z$bAHsq3mBjNILW1v+lG9CP_Avu5DWjW5*+-XR9%D;da@% zhJd-k73Ymh#)33{kvyVYPe8%c%DuatCLiL`>{y{;Gr*XNrl#L#3R3q0pxtscP8d8y*)Qc_0e{Q2iw=HB|PBw;TrKN zeXt12K59ue_bgNM?M~;bv2yF{$Ln*Xvkv8DbsRxBm{Q;2R%7L1MPT76jvS8Dsxo3w zDDUUzQVYT_Y=pD6ph%1A^L_c`L2;kN0p&4aipDGxA6e_TvWZ0IJ!SP}GMc@)aQBR2 zl$v$U78U44@_Dgl;#HG9wodN(_i7-gZ*2kO{RY|g#0y=?H1QK*q=+U%mEXa79iGEI&}_EyPck9&eLjNxhZnVy0r@4cU<6h#Zn z^>}jcdDrw+Jfnp-35K4=?Gs5ka2S0{&nr!dNg>&yqD{)a-x!?gu9Y}g`6lH~3_H|j zEW)<90%%S!g4J7n$o!6*XLm{cPn%~qxsj>RUN6ngTrj_v59j&1WBo*9DHqe3#+a;H zckSrGsieH6;nt;((B%`%@uQ?TUWd5%xGsJ8_j<<5u&a=U*{L?R+(rO&P|V3g=jPQ| zy!owL*DK8s4v(;1_RSW9?B6oMam>ij0Ts=OCB1#Cec^?Az#UZ#|Go*p?r9e+++Bbf zbGr4vQx@iZ>5Ja4b*=@bcsLy%&iLs6YuJLZ%yu1m|HZWbh~JTD`~P3)!43=9T5l+e zpQ^n4-aM2m&}rFI-yvowwdj9#Hl{zO6*-RDYPXA#-zNRTKgK%H?MRaD95YDUTd?yBV;`4z)f6ixB8qsU&W8K>1T}( zIV|&Cu$;3Ta`A^-I+Dwc9K)P(njOs2C&OdOL(Z<4__3wMsLDoIDT;#RjblLl7{&3T z%I_iLxK4?kk0}YASoZk-_x%U)EyirfY~iwGgF6J;I#WvEo|$a@Zab+27}CiR@%NNE zd3edb+tS>|IdieY@-4g+ye9QF$3hl%@`m9zR7mV6x#Dq^oyHM_^fvq31RaVFp1XPO zLO%!vw*8b)JmuAPaUE6;*~gplkSq)7@5?t&rD zI$Ndj(4euarBc8?uN2468tqwXACRAaVV&S{m~VeVGg?y!BRnmou6;=OI3vpA?^;l| zN2mYuA`shhM%2NN_?}2ARhpFkRE}iVPggq-rsyY{%xUf{x&J*Zcs;6uT+Hq~LJY`a zpY6YwpW}>UZ|w8;ZCI)O&Ov-bGkdZ92Ez_Xc4@OW6#|#0INqBBv;<>z?v&8h2oJvf zCza6fy+_`EGjYi$@>(U^Ysp`YRxbN;X^W`9Uff3}f0!57Ufgd&vo5@JXMH5N!RYzU zKL6L#5@Ka)R{$dYWm4@DE1+=z$eJYVBe30{4%30173X-?sHD=eE3U|K zk_nc!`<0EROeX)!78L+NKX8fs(s<})qI8U686~(L{CC4v) zf_N4a263EbT-C}elFsd`%VimpA)QWcO6TP!oGuI$jZ`kt&shI<7SRjE4-g$GLe`~| zY%@fcSVYvD3^Sjf*5|2ShYm2hz5uPLx~N|Ic8G@^LSJA?ZI`LU2E?$~Suf22)M-QL zPitj&49V8(L}_itSq4y1qK`{xl6!#(evN9_MnA_ms#)EKtKO~)vU2_O)C#%msF{Ad z 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

4q9&^k0oTmlcyhak`Qj@;6 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

RCXXz6 z-QmuVA4v{B${*fQZC}3=mVLAD8=Cs)O=O%%6yt+wqDRoJl98_K^QkXKY<0K8?xD0* zYi&$Azi>`%i)@(GJ%HYdb8&CzJfx*%bJx|{$h6f`bVu)qNl={Zzd=8L>qMzK zcYS(O*OC1wD)aq<6GFD8`_8*%?a79P=I^8e+^5_U+N0gk8vC{hs!ui1#oZYWDR7fN z;Xm|JXVf|`P`$kCRS9%d!20$^7Suq{n*2ScI27^xLF<)oXG8c**ChXzhdj#6x-+uz z&N;{>M4%d{OzbGZ=zKpKKa-=BhV@yU?r5~W9WptS?}_UN1Uw;2J zcu9<{(^xi1N#cI2;IGhYq6$njKf30!6)ha(6*N-Y^^xJ3v$}D_;{c3&y_kv27wIC z+GvGiIAxt9w@~Y>?ip0j`RZ+50J?dRB|`&L$oQL%}@#1f%?X!~!l<@NzE4LHY8eO=V%&ZrShDu|3C5c4297 zEuJ1bk@AtuCop(Z%V}fT)u*a_y2hmbuiUjJ%iC|Yth5t_ZBPPj#i)`qZe-lHmAelPvH=DdVRKu%SXzH7q|#2g(ySM ztcg~rQFD9o%*JKE(_{F;Bqe&)dhWKON_&ZV_FTSm)kU8s%g{}^PCl;Ql1^0ORg#R< ztFlW6$ES_nE*_nJ8CPC-zk6E|FR@lRr0vhPF1W|b?)r+McGE=|c{;=GTfb7*qUvjA zA_gLybF^}BEPTB;(@TtU^Sh136 ze%1Tsm8O~{X%b5j97MCF?3^eO%dXq)u7!?OzCP_B@W+# zE3L#>PZLONN!uuExf3#(pNyZWi%j?VScrw`H7`g+Db59X+p53*!XLyLZ&tg3zTM?j z9LvXcLtNwNWMcoi@+J1Wm#rLb_G%A(ZSNlFY*}UUeDdW*ktYS)YPi~Cbgjhs^%pKn zSi64T{m#7$69oslbgg|AKks{}jVCjrZqCL^l-%;)ojjV@VZUi5FaOSjF2soWY8uJ$ zHmK*FkVAf(kPS$mx@YO&pAIr^^(fh(CRe+A6nb6heB-pFOQ+ZAo6Uk|-TRL^2ZhZH z!#_aQzV4bL86V=I48Xs)H4X+BLsX znX2J3qJG$IP1zc-A2hY8-zOvIJJ@B?y;}0LxC^yIyw}NB5i?P7MQI?h+xXFYBef`> zx*U{m#s&2nf8V10d6wwQV39P*Z)oE^hsubw^=&Jw9PJ3avYU?jtuExFYmox|`%57rW6P?#_%}0=qnoCp%_hg* zuKN&PAtyL(pnmN6>s8e|AI~<0dP|XYN4;xFSEJ(N^oGNCor6{C&1$tXGB0uOdj>ko z4G3mMcch67# zvMDz2Ff(w;x>xf3z&&QDsLJqbv|XPkyh?{(j*NE~s1u4Dgw8hAdR9F=;5SuHcMqcY z^d9r;@5CfFU0J;wsb|}|^m#;PlN7A8-w_6jR5hKl@)}u=eS%kN4tg2&kJ8mqV&h-E zvRTkLwYACL{Vy~!JtgQZsc6&Dg91u-YwZXx#KlhudwZolf2$twgnhPRcb7Ubv;$?e?sOsJx z{e8YGqxFST*DcpSwq_MsVgD&TfI#%c#@u_Av@%4!yVIW^^%Fm{h0FEPYnqrSM215{ zyX1q358kZRsehTE?Nfmx0!vT5IDpvbT_e zb#a-1+@CJ(krnL&r3@f8`mF>%x5C4Txtq=??x`;VoVhxa>VZ{!^86J35mmaGS?$V&dc zwPsaa_E!j&?m$|T-j4xoTimjz5j%SBwY}QcJ+o&@m zrUgULf+Mk38|}?uE^!l`6BGBJF-#aa4}93-F0V6(9G14a=8v^{^r4+CBDb)?bKK46 zgJHc0fsC*5(5hA%L0Okt+-z!`+h@409#66&8cT zpI&L-LrRasYZ|Y6S21dvqn%$cd6afWm$Ytfnztu3c+ZZj0?D|7OqJwon1XV;{S_j2X;I^R?ctlZK%fIYA4m5ghbtYpVR zzbfJ4D%`6(^K2SE`pMkNw{Hvl(&F#_7>ConRXdKh7S}{q()ejY(Wiv@Pm+Dl9>VMn3sHM^)0R$a8iGZVx1L`$RQ`h( z{BTYsY{yL9;G}8Wh5wQZUR;NXJ(ml;*4R^fHL6W7;`6`C>)7{8QyTg zqXAkoBH^m9vIakj{W$Bipj=_yd9qIEr>9k?N*urC-dClk^1W%grCo;%lKz~@V3^M- z_`lWINN!V1+bQKggh-J4eN|ctfp)NYc>agxd6lry(x;t0X%EYKr4Y$-(a9N?=lK2K zswqk^-`vakF7N*qteD)UMZ9Weq!b?iDvS3a-;c!eD*rt^`NRCY3g)-(wC2OJH=p#R ziIGKnFkzK64B94B3*{c_%B%)iT%-imG%3f{tvnHGcQS3pwgBF-`P(C2uA}( zPkm~-W4ZG6%2R4j8nG-@Y9#sF4_&$N!^Hke9pZmZzRI%y9q}pkj^)BV^~FEIG8|J6 ze*4>N6!4VLIUOlWt-A$FN2ZS;^=Hqv_P6xHr|r(^fGsoccKT-CMg6ZWHU}#&c!6{p zi#L)D8u+hH3+psyE23LJr~t0(N3pqz$vFQrfO!<3jS^Z8LbM}TO$EMHNRne07bQAQ zL0I-tO5J@o7kAfBa-Mpjm7COWaYcwvDXw>ld~y*EED6KMWc28t*;}Xo@jvyPoK(g# znd()>f8%69JJ{0aq{VceCpo69sZ(Jxnv|-!grIO^&w_Hy8gQPaK}(Q_%VM7;_ZA>e zVGB@{`nDL;Xst{PZp9R-oSBSU&ZDS6bz)uyBxU|t2hJ2roA$zc1ERfI3M1fsq8OeU zeS*cO#aAA|PM^{`pK;e)y!(?4J~x^#COh{@{hvla84Km8)eDn{Nam2ObBWmYW@?F3a%{vXHdI=#1fP0-@qQyu5&4rQ)zKk(R0dKHLIetqAg*Bscm@lg)u6>{3szCf^b z(!aOpV>`?&#B|Qb1`WEON=cl#i$v#$$G_IVs67~3yf$NvY-|xNep8!R{@|buG)n-w zA<|H5c{;Ih6H_)~e| z=*;F)!^}1*;#K3Uls1#J>ddyMZ7OM7oQ8#ktC)Fy|CdMYXcDEvQmU={VDs_)e=x>!suYqXAE(9P7|s7>5=w4)vDESk z@}q-X@m;5+a{2MaJWB~=j)Pcn$XKGR{5D0^GS+bVK982cF@k#9X~4Qn4%>I1H$LPe z+A&QZ09zWf)XMl{zWfrH4e_EhGwJ{%6av}R1;P>*#1`(;`Qz`krDyumN-x{uIpxxcR7%f@R6q5{r-odF-A;R)@P&Au^nF*e|I8Wo z?wKBJ`B@|^`=J{Z{A4}3 zJW1hMh*X4du~dWr_ur+XoNN8zNQbK_!CB9w8?Ril8#p2Yk{ zoLF1WQX7jcGzT6@wx9GkyL2`Nx?~h%wj{(kzH~&PfTr(hJnv-)|7G%bWMSi)jX+R`h@h{9W{iM)N^@VoRKh0mo~PeHwDX%gFb`jansdeRrdPm5S! zxAYJ2>Fagi?N=f&_O%8`E}dQsEQKuoE^S|wD~(>vytLJ;VO-R*C**u zn91o$I0<=>vZy>*S+an~N2EY_|A@X^_c47L{qOdeklz9L-`__bTa1pNo61Whs8`Ko zNqKRmo)=;dd!E@l+4f-PGpzaV0F3%~h@$yBw>PZZMcr+|)yD&~2YrGfbHu4+M<5NynU4!f?u`ca&9i-A<9Hg3ER|MT&F%%H%le&da zctP%kWc1b>-lPySq+!?k&KMHHk7@oiL zLji7V#j+;odX&rKdqvrc;-o4Vw#lgQn;SoAsYVd@qlP~qY68<_xYpZVBte0aEMa;9 z(rq10a-O5pe09sgf(G!GL=VU^{g8*TF+QZQh|)sRgc%38wiPrP&&^Ns)0Wo-nNf_y zUBg{MY!N>tj&!*V2R{!TgZ!hkq9BP|QxM67XFO3e?CViB>?24Q{an085&?Xvmys!O zZRjXOhC2n3@TL^s-$UHBU}?Z22u82xsEo2Yd+Wb<$2EIYo54rq$Va4 zlG{r*cI`Psa)wpGC1M8JCA-(>cznV`(ed!m#CoIF!4`OEZU}Wwgp8n}l?|DAa1myMNTUGGry7~bZgQ632( z9-1T?w=W_1io6tPKYA{vU^lcWb(+R=v)PigpQ0F0rvh*&S4?S9G})@-z>#qSD*e#;i|rVXCM1%~@2xwbdqQ>I}knbRG$A zTf=A39>LN&O%>KcdHUMr3El|lDQc)t0K7G!sndhdJ|9AX(xPDA2#{e(=L?SJ=Xt@n z@p&1|RhlG@M&r#5XQGEXcJVUvdlYLLFU${d((|*)(YjS7QCB!Pd97`k{IYsYNdos% zNsI~0e6dYe(pn>%m`}8z-qd(7eOX>iCuAY&7^fH|1YIzZ=6*F1D_$v<7aE<$L&$Sjl`rxMj3tjM%RzC+1izjO(CuX%&&;b94rodyK?IS)!Y ztrm!4Mopt>MSvVrlU0K{z)qRoEHp|vX0%JW`===nIZ_$D|4=!R-kwQd&iDDPJub() zvqYwj#EG^fmprlP8NvVV86lJ|QWqNlC&QDRH^BtJrtw`*JzlP-zNh}NPqI!jIicym zJ8XJF&e=E`=h||QWitI>5$s!?WcGYRhI_fi)o}d6b1)UQ2jj)bgyPeCHef%2hp-ah zd|Ox>KTVc~E>BAC9qmOoztNZ2%_S73mtnM2nj@#u}q~B$JWb9=XR_fE! z0PU$i;3}m->6NOblu3n9q!0QjWfdblRmF%Pd$OZHHtmq*{p;Tt+EJkKE`FdO?<)~&BiYccSg5zcL1e7y91?(rVq5B#~&yc9&J`uQjX*)mWsUE;xs1Zw(rnK87a%?t$uTp zGVY*uP=X>f!m{WI;!080#^FfGck}#ZOAge7{naXzi z;`W=qNouIZUL7c8F%#Opm{*Ji`ieQgIeT7~wEYQWOSv$V?D&s2<&01~?F=t{^AsKg zeYc1yZUjW^qgijuPjafuwPOYxWxCfZCCOW32_?t}gi{@o*UQ!jrQfy}8-5AFc79nl zsC0;|r-cf2zVX1*e!0Mq59Kk>g^#)dzoK9*za(L`zwCg5Z(bDUo6ermH=Vt^WvKqc zmdxjVsWkp_OC~1%Kc(ZXN-u<)UJ=e`%8BmYebOs<*Rn_Nu4S*q-7h_5cfSzI?tK~B zNz3Co5Y7E}O~b#jrutQ7W6s_8gnl;#UMiy;@9C>s}=78NhR7cDMqE%six24uau z0w6A=F8;hQFjY^#^Y`(TAB;M+3}a4Z1I8b!edC{c@q;tG)MgE$Fz2qVpJvTZX*Am2 zYwdBo+d8D5K7YnTCrTEo76s-6u6rY|teYZZ*W=t;ruYHZ56Ql>pOv!wo|*`ie^N@0 zPqR%N=_`H~B8w7@JA`tdu%DANM9o3kZp=luJ@l-qVYj6=Qa^d2CqH>*#j4P%h!C1l z%sHA6$6`)nS~R?MaV;FN=n>AOnEg=d_m*N_Wr)(Hr!~DFSac#G#4f%Gtk5}Zlwpy9 z;yU9A;hQ&TeXE0l3^Obomlp}xdPG@YIBJ+|AW8bYO^C++fq93WHY_pFDI^!jXs!=S z$}(3T4?TkSE@Pt?s}?vgy)fRkj@Cn*C#}Msy&nJ6(KUo{%No1}z-hc~*Skgkg+`c7 zSae%<>&dwp4>{U;ttfNTC0V*lj{;e62V%k$ksn%>u%A4X?HKwAu1I-85Z0DryWkJ_ zhlwEzT4k{FvqB5YAs{*nLXdy=v9i)9N+z=bd^mT{OetF2WzX2zJu zly3Xju?w>}v``Aj&|xeC`c+mHLN{jE_(=C}MG$#2BY7XNO9(@$^)S0$EP@s)0Sme= zD+?jSnKE{4$qhTAuv#FI%wFk{B*#qswn6vCrc#8-cMZSiilbtNe1~>&dM|WmH%zu# zw={-H6cSn`<36{VADl}U4z&uBHfGOyjJ7Ij{+bn$-QGZ_vKe^Q7}VnP?pW9va$MU- zI*%s-Azb&%_~h&);(ALxy)D?sN7Qo^ap36~3r;eMax~VA`3;yw7!MX{$c6E4(1qdk zc$TF}2#Iy2FuJQ@AaZ2e3;L7bSh5DoiyXp=C3_(o>BZ~(-5`LEtTMgRtp)^`KIm&6 z=v$05Rl?Y!(n*0_y&eni#+JnSk4k0VI5& zG2~p4DBpf@V;$e5G9BM!v4DON*MVp9p+zUO=1yD0wb?x31MuQWlxuP+_!m0=B$*A| z5MOv!DuBIU!H3nb2t=ZuGy(>4gT1>tPLC~qsP``ZabA4NT5Ztk7An-}K2m7bE$Ml( zTgmfGx2dOkH}Bl3ZmGEo-6C`9-EvUFZb6QBj5^XfMjq)BW9;^vB?-G3qlUZ_Ba3v1 zab=CNXuuDaQj~QL-theo)WG*I%&g{PWblH5*~N*Fn3J3@(bsF%Xa7u3*-WbYkeQradWq=%VKWIE@5kW^pGOj^ z0}4eZhYiI-Uxw??o&4$97W;+W$k0AbFxJ+5?lI7It0nS_Z(hI`KkbpUAwOe(PZ2V) zP1G(oP(mR;P_Ym)Dr9K$-WIlS-GdU7*TU5rBng_k7Vdaq09X%{6Yovb{-QG z0Xr1|fhq zZYZ?t$cz})e`0|$-_%GkX=3p1BPO~j@Fst>ohE2v$seOUFpe=^+N5~5LnvzSEqq?P zf5VABLd*fn#&96aoP;hJVpD$1#oZ2~@ib^4j<;#cCYZDfEA*=>*Mh` z;%y>Q3Gxvdl#q58;J-QZm%X0GEaqGU%yL5%xYw+H#;iFxv82)j9oN;uqvSa&Qdhab zXE1(*uwUcFU+g~1@9ol=@x6Y7U%6(ZytB^aFvnx#xM3{A5|C~(NGvJt609kR6`#`G zHH6`&`!L_urSb2Y>;=S{?1gaWcmDzUr_0ek#j(ebgmoRf8PQal^K-okuee4MLR1>d za**@Ul;TJ#1~us=99KoVdv>712LGkQh5(7oO&pGNO{k$+Kb!OtOzEgLcSC4Ytkv<` z&Tqf2?d1Kt7RpDRoEKN}Mu;IV&)42Y%x_R;I*cngYcv7eErcvBVA<;k!1t{d3&y)L z6ezvppZri9O7W;+bCJBhQ{ z_Sio_8}@d`zOS0S?x?GumWuQ;lks#gQ}lE;?@2;zD?ji76a%=?4E!I8}fM0z>Z&XH=nby zxXAo|C^1?06lL&<;O){oQd83nN9U%#@+pmf6%Bo0C_Fd!RWda2mZZ{r10VGL9aW@f z?;T3Kz5=fj`3BE{s-;Nr*RO)bqc;S!f^PA9FMQ?qo^6oi+_6wbdRdquEqb#k=@J-< z{V{zsSU;FAe!f94reg6ZV7A$psI%3FY1&dtkYG#yuG><>q_Z9I5Vj-XJty$^NC|Hh zC+{_>L@=K-O$pedq8+%<^Q026CecS&ljL*#-AkN6@Q{zF(o3AUXATZ+eJ)-#`xf^s z(7+j|P`4&;+VuN?qL%AHom&P8Yg-117sdn9ICfSXdX%i`FF0GaF6P3 zvkYMx4UWvMRZ0-M5;xB?Pw#BE8(@@)U4on`tOvnsWnOY+WuCV&8iBsM;6({onQwAT zhaZ314WWCt@gH&zT8M>N9Ulx>*n_DZ4}KmE?&;#WOfF;|YKvItrJUJP;>8)!F91PX zN+A0JrT}sWt463^F|kF={}pEqybmCB6%?0^<$LqU>UUiYssF7C3mhGynA_H)6>aMi zll8hJl@|UAAuo@5P^bk9LSnY`gn3)~O*g$Rd%y9&yhvZiVbc8^eNH@nLSZts&fU@01yXp@M z;K(oekQRBMJqp_uv=iry7)pMe)27$uizYO_p~zS-e??U z%NCTNrK>2+Z9l`~6PSXZEI15=*^1!}@{c6abv1{htb%5a}!o{fY{|1-E5?<7r@Sb3>q@YID6Ka2PVij%JlKC4^Lj{$FQ6%zV8jqM%rvo7{h|co zX9&D%R3iwk2f_poaF@p>Vs*YFiOG$!_}-~h%Hp~zAk5HaMKjK3>!2h!d?>|r->`)0 zDUaJ(T@rQv^n{?PPAA#**eWpw@3>$!`>3u=foSOMQG&{}c*CbC9vm@Bz~0vwll#F7 zKQvuOkqJfsrY&kL^%mK#52+gxruaq*CRiDm4E6y|=u2}XhQ1khOa%k2HA*q)WrA4) zgfbMY#F7jWBH!cO(+JdG}@VhW+SEG+XS$ z7;H)7OE#qm9;^Y%2do&a&#YA9XseHmE%q$wammgs%8bN=n|Vq!bn*Mh3e=9 zh*fH`K0C>B4xfd`oype6iN_@Q@X}7!2`~@4CYJo;ih+b{+)}SAdoDYPfq#~8+Wc|) zY;?FzHnuIv+IvovrWOif$|7#$r5aZfKYQK&m&Pmm6jjOj9P7mW5eKV89`e*w;sZFobeX0KdhBlo|0Rs z`Kj7T_J>}T*dHTgB9fnzffU2u#M(xlSSal{L`Rz)reh{k!Fc7=e6QDef_t@9@}D09 zr!Vkx{+r^(x~&T@XhsReYew>-=2HburU( z{%D*G1dzHQ&*`cFl^lu&z;`8CZ(o5-Rr3kuf}s6>PqA>9Fe4&j-6vxJt-EGG{SO{M zBK$ZjLl_^QA{^s-ih{b!Yv`=WS3dBWB0kL*cew>^+>gO~`5CtrcuL0Itm9$ks1x!w z&%<({e8eHXsdL8Wr#mmIr@mI3Oz2+cr4B_>;u^tezGg>)5VN~~uEB*-7k++Nr`2i%I*N1~y! z*o(y=?~@}SoQjq}{YzQQ&x@A4Q>n%7F75z4^!%wG@QyeU8)?Tjad~~%&Nn}wQW^8Ur81-A^th@X6(RjMaI$| zrC`$>h-DvQX|d1$s<6V_SM=dy$9_`E$E0uDnTY6Dm7A9q^JYKFvA$&jQhM$Ey78vg zO}EP2ikh(@Czn-cSn4AQsC$>)ySEEGxHk)Y_6}hfA7^@kk1HJ=P{kyKRf6$bPQ!hr z)Nv;uLQj#Cn9u878^u%aYK%5>HpZB_b|xSyya=7+G>XXsdjRo33kYmBU|D4gmbmUF z#JlXGwW{+dWGBfOi(w)1&20+VSt-V2n3wFhg=aeJupEX7^B)BelgH*PJYdQjnC3@j zuohFEno$sX+lZ&&p@9CHfbS#T`+rYR$Qe9?V~^I!K-tgR2yTj?r9)*x%~-{co;l+;`VR+_)Td9z1G%3&tNY%2YU;}Zk;tGV};@-u#!S666bZp9J~rz2_tz3{O1)f*niQ= z!55ToY!u{sIpF-yvIKP$*L8L9dj23-?X=YT1!K&fzbp(hEd%|&E-CrSgfQ%{1xuZl zhc5UMwDMx{(!_2`?(lWs@(X_41Ak0;{v#mhG`QG*B_SX$nqpw9gKSx(KrGR+@)F$K z4;0lW-0$BJ#5l^k6&}DEew-C6onWRbg)F*;mmlT>PB#f-$Il6c>1a^m3tRwA_#u}1 zsN_Oe4hH;6hJx`|Wj%$6$BZfPatZ(7)oj&R*x!6U=dS?v{t~SG-@N+|CKBrlOo5P5 zFt=AhB<{A5d0(hN(E4du$~>Q4b6>*fdN@UrfrKGYd~L}lQXDW!`&Dy!LY;}sTwk$J z++Z;;Eoel*EM$alZGHN7mx*j)&~#p z<18$z>sauINwm#I- z^isxcx?pBA(?Pz0=_ua-zIkAY0W-;juqmsGg^hbo1&r`VH^&a9$wvYGPy z49^5q+HJs{${B)y8siG!zk3+j87s$WkIh~k>$Z%1;8SkY9CjmQrnN$UW0rD{p$H%t zUO@P+DGRmB%X(ZpEfE<~j<%oqO>vA8Vtt(FjTxZ{cZVT__WcmN2p~!ju@wbEFc|_& zfWf!lJ1b9ocs zlpkQyVs(rd;9Qs)P_V#DnO;bwK)iX1*RFJq8CUuaWaM4`%%CW8<9{>#7T2jIi2`XDjD;T#B(Q^h?Ax1m@mP(v9J=s zOSoa2GWH=CL($t(=BqC{_@66dXC_RJ#EWACxj!lPD`vb4(EV#bz*dP+N#4HrG7J}h zSPPFcDqC=)a^#5D_jclZ7QzNUe*X?3jp*zj^?be`y;6d)AuxqzHxa&t-w(sA1J4-N zj^&WU@_#Q89bSU6)1RygWvNNNR# z7w#Jq!=p^*!u8EbXADVnBgFu+bH=E#3AHe5WBvp+#sqa3>Cbpu1Sc6ZmSY0^5IeU> zY=6cvV12!S0-0{_Tq=Y&sRAC;K?g)ilQB?gj4^6h2}0$p>!DT(#TwyeS#V9_7s{3C z7x>hsQ3eUJpFPiyJ>?-5r{-a-L-overXZRWDSp!#ZV>9``frNN^e7xcMNN;c!AaTE zAUr)l`PB<}-Jq!;_xP?TGLm5eTPy`7x{k;@Iot*x@2%(k+{}zK#4Gx|@xyb;H8(x^ogDVXz z+#*6U{lh$q;7UVPdJrmN`e+OkWysoHUtEhINlzbUB?ng;P@#EUQZZ*y2CRn+2Ox8r zN(g8i-H9OW4|PzQ+z_!OHhJ9>XkVY>7H-8v#REyfAXa&>0qbrH%8|sz1v6I)w{Erw za3LN>`c!P8hGH(knrf*vh|@((i~zpbvsmH87L{k$ym`sYB!&Ld;MH4 zJb&IKE*t);vu_WQ+=+s|gg@@=3ya8j$Yh0(9P0R*tK)LvX|ufU%u`?CBfPQ9!ag`D zh8Y1fJ9rK8Ob396X$$DkK9Z@0{PXTWQ>ekwwp>gpO66$#>VJjOovP=!*fU^ra}j8GQLgq84_(L3r_3ejs^ zRcZ_&onU9c^&q(|MGT+Sn-Ey25mT6?yDt z7LKk>bmzi%=4P01(j(Wzy}GK(Nd2}4$?nvvt^5iwFbFj7-LS->K0uK*fvN$suSfg!K zO+ZFtr8!S_m5@1|xVp&h-Nz{RjEs055f?;^qQtn@Os)j|_LJG3{f9JM|_440MKSAoEbOo9@&I zrU@Y0`VdyTW#U>}5n1R`ZW?KJE;j~QOsMeYjYI4-RD2Y43)#RNxyKrB~@qQ?J7m(Z*3ULas$W6 zFD{T|b>xd8^U4Yrh-^D$-`EwDotdx2$}#HIejeZR@LI<~&fK&x6evL@#S_x~~xqtfIv?3TwL)SdU=0}|<61w^f>ZDsCy&~U5v zh91?=Wh}-RetDRkcWGEKuP$Fq=W~9lwuzo>z{EJm^?m)yb7Gbrc|d%^Gk@A?Yo3^s zKcw9^?pX{eT}dJSr$-(tyb1SP8Ox^!kSf~G!u^NA+5zL9MUd8&eBzqkq`$Uf+$(nf z%QbCdTeic>J;%Ca&d~^qm7k8G#5Tv!L0vnx$kK{ln#X~n6*f`*($CB;7C(jxMjzX>>eqR; z4~jmriF-ypK4NhoDm1nF);Nu_frsi9}+{sGbg(jXuVDXF9k2nYy> zg#P`1dF#FR<(#v>-gWO;)u$64~{ zn0{c%UDZt`D9dKbN1M5dWf9|}8Uy1EEbuee|NYZNS^ zMl`Nt-YV}H-X{Ala$;k4IEyArjZKg}NtG;)iA)CTDoh*m3Rj!gg{F#lk(6K6LTy!f zRW+RLd3;mcwdy_FclM_&(kxDP>?{>+!gk6aY8NUOaTnqPH2uR|=!b7|_|k?ib^WsU z*Z8-Sa`W_-7cD4Y;Mx!e1Jkt+fl;6H>t3`j+xigUeg0Xa1`$b-CTzAaZpclyF41OI zM;hcE$lt`V9e`UjX0=6kVOqu%p_s(E|Mj!w;t{InYuN*AYeFe_NWP}`?zYiPEJ^N_ zx!Q!vUYN27r2XLFpNssKBmip5#DN^BbSMN#pl7y`!Oq`v4EJWhv<<-|&^o*s*4 zHXrlMbWSx?1UUJfxKI`t8)?;5Z$iF@OB0W?YelSu6Nm=P73K(~=QsO&w_5J&$WkY^ z*_5kdV3cL(8uWIUNi;F~8?JuJDwIylM7V+aphJDpE95EH!S-=QQ(MxXkL>!I=5v8; z#K*6lFZb_5?qG8H9jpoSF>~i-pYDXHH}p!Y%UT>95HDsbZWO9Bgc(!M6tw8bcd$}K zy!33G2tO~*0it~5WJS90^)|3o=rQgqI!o=m<#?YmTr$Y2^eZ7L@vvOh2YHyunMMlK zVl2B{*IAufd_Eqmt7Iaetuc}(X`wBeb?vNdM&Z@YD%Nwt%grBb>wvwK3pSZqPOx2U$IyccnL5%cqs2CFVOy9JOp`&QcD&etK<-j|iA^Ywve>Opx zCeq!9Bi<~KI?N&~R`} z>ds2bx5*+f((gd@>9H^w3~x-qJ2kG_`0vn($fsV_QCbYF5$@qV^?391+xGXh?^_$X zU)UKpaeQ?s2aaXZNbY_n!j9Tja~#+GkAX`5YJB+WQ!vZQdZSb@S$-6nIIrXd4|d!) zz+G8_n;4?Dlb6P{K3UoZw2^ns;i^VX1PyR@rT7l-AP0EF+?8D*D;K$-p778zhzb({ zA034CleG|MC}0LlL`_LQZxR@uk`DdAB8v$~*0ClMU8MXoF3^>&k)t*@qAuvI?*dy) z>0p}94i;D{i=A+4b2rsh=Bnpa<3=u+klPsqm2>NGSOYZpP3@Vq(^h$^3=+~|1RXb~ z>^W?@kJR_8mlfI^7EV-U;SAl5<|9~`ojRo1lPbv-1PcZI$=oAe&mUfUIt_An4%>3_&RcQ_UvBt5$Q8#i8@S(Tqp1N8@RGcHQyT+f@W8s zW@>dHNi_?u*a`=!s>fR{FvI<(yCKGk+7s%|z6lD2C1hJ53H3P)7_Q8CXIr7_gt1LJ zG{KqXFmITqP`VFw#r#9vpD}VFO-gF}*$!8py{*iJb!hycPJ-%LRUm_QUJ)GE^TgY8 ze~h?-Kv-KZW{;x2yawxrDf^2aRH~k!at#N#s1Fbjftt?V)qNxAUG(5q*=qwDl>W}9 z*g&h>dV^>uHt>WN!IRRuofRAt3!*08xHg64+ibv-oK3!VpgZ$;N45Zw#xz0<085Zn z<*v|nX5`WJ%5eZ4P^LwW&y1JqCPrj?2=J(2c@D){S>@)EVAokgcDdT>Cn(PLZRM38 zh>c4)uIa^2Qidh~adjll>PCUY@&=V_PN$ZG-^3gkng#P>l4rViDkpN2QP0eLM%c0g zaS~w0SSiQ~)5ZQ->sE}YT$ys`IY6CZ9pkqq&y>x=cfdum6gmxNAdaQ7t*;1a@XNd% z8&e?~GL@~>421l3yJ}w2Xbx?49U0?(_Jxq~3cIs>--dI8LjE9ur`$X(*as+hYSInHOvTa|KhK*Xw= zjB0)JnYA5*iy@)sb(2!6Ofh9!4=yh5J4gCcyuo$LsuxL5KH}F@uSS5_i9`;fh4J|O zl@|Mq=EtV6e0GdQXYUi?a#*#E+*k_XDs!n39Mgm}?RszrO zNm9uTv>pfy(~)f;(n4*8c>yKW`73T8so+@Y8k{Z#9H)T54Yso^jX36kIQ&uLwhq3C zA*%}W58h36!Siq^8y zmpc5I!bB_tvPkv>>Po3V4;{U4y0NeEohK)zfDMxlTsm>m@vf9s%n>DF_8!8Cw4W9Z z4ZIwcRR-w4@dFirTL?iUB+HT-LT<`XY*LKC(dTe7y7y4D;DxGaJ6N|xI9o2{n#K-} zhPpUzb2E%`kVF8TT4$XI%^A_!0-rbvL!qg_1g>rWp@m$NX5m*;k*R8x@d%QUBHi9( z=x6p^qbgwrSKtJS?asPVnxR64ioh{*_?c;0H6E*~0^wI9NabD}_Gn^(>I$$fjNF2z z@UD*eKxf=Wl^Ji!i~}^D#j=uVz`ZOi7H>Q}Nk`4kf0$5D9yeqKv_(0$f{iCo=vFe% zCUTsK>L4soxI(*_b)7S7I#%;Y188gqFOK?`Gbij~`XXNC=eQ2ZJ6@HeT(l4forR(H zUW>-5DQ1u~PZR}oN$xdlQ)tg1h0}7Ezh^AIGbtOCTB&D zQ2;gBYl^3Xj4JV+GSqMdQG=22*U&6N2v-ePnU14$9==X4_Ae8lvEc|a<~!J_cE=Fk zwKGW{iqHeBfB@&xej{>#6+1b|p&dg`m(9)kgmyPMn7i|dI`s|PX@xxc`jh)3=(y;u*f4#tn zZPxEeR}A|FU#yf8-`o{cojGjwwWw@o%#TxQV=GM#WioaCTl}5uVG4o$e~I$Z#ltN1 z#G!7htR?2p@Sl~#*i*h+Uxb+2UB!7^AKvEbjgKOq*VkA|7x9rkiwnxlc*}f}65R2d zam>iWEab@ZuOI5W*9K~m6E{A{p0O(5^%0I(TzOR{S~5!XZxrpWtdj70CtBKy{{t#D zo3>Hki%)jIEX3q}E?Q8lRTk=uy*ohPp|%5HoS=ma>EU~Jrsk+ew2!~SUYT4_`xZj4 z*_)?y-xtz4xc5wPt+z(r_@yM7g(BTcvKC>v20G~8@LYRQ9hcZ@cYsw=?gxk%WAmd) zq1w_y`+KLj+)`KDbh)ZHqPPQ_74x;$2CKl#LNBr;SfNKg_Dmwnf57mmS%G+E2efgd zJ=(?~V|c}cOy&X4e4J+NEFphYTBTHkc`F&?z_nGInac3(9Hy0|0;BBb0@@JHO=3Df zYYEhn!8iTt_rcA=w={xh4e8TN&+8*|QHCEy1Wa~2nyk|wHVCe1R(I?dcETyB7VS?f zL^{X{1z!5r^-!$FIQ9Z88hWNLBf(7nomPaZP9sBU=n?|OnJfbH_QN5&E{YbM!@bti=f{8jD?jIyj}+L8*qi1)5UV`=&G z%iZ&*aaJpWOir-#K*D!Wt8sG?1DzJ_;HKx*2LWsXt`1em~4T6XypG*yPHwNmTDkXW2Ugo(pL5`cP$)u@8m=iIF@J76Fsdq&>>9grQz-?SAWqUa)r%OO z;pf5R`E@BxqU>%O&LrkIzkVB2mxmXL?rbghBHh)-=~E=tL4dhn`t7lR*;J}~XSH#2 zL&D})2jT11WO+p;3KT`Zkfbbx!TE`%le4}{SyZOgj=bG&YlL#)T(RuDpSs?Dxs|va zxe^MT`X})*Rr4n%MB)2qArZe_$iP7cYl6$2)8hGeh&iF&^vecU_?O>s-o-k7w*a<10tq-|HU`@I88P z5#Aa&@lE|>-e=(PNIda9F7R`OazWBji#fa6(&q&VSYow^BawGNHT2JY4{@nCUaH2T z(q@LLGpTFS`>nMuX8$`Z);CD`RNs)0Sd-jC;=}CFwO*gr7XhvBw!F!{g?n5u4NA+d zktK1N_3w|+cELzS@(?`(&b{MRzS23)LIgyN_Ltnh76bU|By6?@(Wt7^?^ZoRI*S@- z#505At)Jq?UELq{Tox9mf92;X<#&oaPu@3{uvghYfnA+uOoV+lMThO3;?~|LB)~ z*PFvoc#~6w;Y^Ds6OS&p1tANLu6A6n7`u;pf-* zRh!6ChYe;mJI_K*cw6-*WrMxfwMKli|I=d2KkXZA)PxqXvc^S(?dC#}gyxy92;}m} zaimV+yHQ9mi3@IFJ>~bgCH7i;J=+-ozXE0kGbta6&l?qz<>m_LQe`|RcRqQAE=&0l zxWQ-Y;Wov#B#=?Xo23j(^y^1y?Wc!Q+}A7HYB$yB<0@843`#5i%+L`I;Kr(^F6cOO z;65Xf!@MG5bmm)1y2F+BWCVOL&YI0vFmdJ*j>s4B`T-=Y8Q9Pr6;3jfIB5T>_E{f$ zg6euy8^rj65}#-st_jLhZ842|U0j2ne5;aPEhHv;tyWwEW0bRA->ryFAK%At<;HrR z0@AKF$RaQ^=XyJ4%0i@%%T86NqEu z3GMJD_LpvLF~(h-b^oo<5~QojDeuY!jzz^~@rhZeDS6=KVR@5AEz_w0!nZskXK-k5 z=r^PdT!wP<2^kC-IAZu9fdD-vZ7Z(eX`y3jVQi6oJ_jL*4#*kUtig<(*qX@IZv>Ut z!3qqkygAs#*E;cB6St8&%xc)+f8h0m|EarKC;Q2|f4V0v?2YwoSSv=ca&FMc-`|M0 zR}R!dmMcn&e;g zVc>xRIO{K=UQwk@OA1|ZDI)I^2myWzoBPz9*v(y9t0o_67y&DdwN8yIrn`tzAdf*V z9=|V!my4i9a5&Ex!FSt_F6uOVprM@_4>|mFAwb!pBgL^cijts~o0d$I<}l2W!(a$Z zmN=pbOz%MWu0*FP2l2ZKEP`rkQW;xeOBOxKvl#c-?-+B*6MwF$I|3%kREkHEv%<9t zEYQ_3;53Iz@E2avY#EyD6Nk59NL^$f=;&BjL|}oMCGQJu#Rig+-A*l!)IF@M!(2sZ zOTZ<&uIWFEi9^+gy=lwKHgz-MjuB}AG6#p~$^nC1I>m9+NG+de*vMEyM|V!3R+5%_ z7(ZYzPLPmApDs2!zdI}H{;+IC!LEaazpKqK#fBMev-!fT4cmFiq5hq}noRnoUcuBv zJC~QQr(j2Ci!!CM=BjY^^~4voI-mRLa;pEFQVA`<2}_$_Kltq@cKtC3_>X!;u&5$j z!_@3QkJJ+y1C{@SEb`8$g7n$#mRIK#Oo0PQU2~Xb0w>|ECr&Fwb#?ZbF=%8RWbT)5&F z!BJX8dn%7W?d;gvIK;RUE_wS+!xjAR*p{*`|0t@=c-$#gv4&rw%1EhziNlG8{{;2r zi(1G;lT)&B!Ql2gZcU5sv8m}ipmjBXv(e1SMMD?Xq@9v&UOAm?r1l2c_`!b^Blua{ zdsJr^m1SzN)OE$9p4t~=H5a%)H~wHM*4DrmmPiJ61M9$qcv2R|xxlZ%_3{H$&U87b zI?2=pTyAh5f=kmfdkig`4YcD`B~{kS`I54G&hQcuQ6Nc1i^z=G_pHj|IzJLu^ zGOQdg;$r-cB;l9k9mvt-84MX*qhaOQyr zG7j(I{PF}FB{f$>Sq&ZrN?+^|Bs%Hyes+)+8wV|p-lcImSM5*sysBd1g=16_2`63R z#ED%x^5BENMH&xLscF?Y$PmncLJm0&wnkk*VxzA}@V_aJ$9!=*GS-06_Ah6$>6=yL zZaDcE8#2*f8h1HXj9{FR=Qn8nGm=-G^@!@Av8vOzdHgl?c(afTyS8GeIK@4c(vMG= zzaSKpYV&vtvWa7hPJq4ia~#sK@N*6bW6-1pfIK{j#=RWR8Zl~E-Oz#Yg*rkYb{(rd zXTK5WuUZNYeiRJLtuS1e+$=eT?E2W6Oi#72fRG ziBriTSTXZ8mnNvfYum4J7)@GM>@ogO_wMm?P$wka_= zO>8_!2?oBj1T(`3CG>@kr$FtFK!j9~?h??$>)O{3G@R@?;fJ*`NK3-gru;6mQ^%Qh zX#;zM3J~q+hVGY2RiY03txmv$(<;93{uqSgM%wx}8_WkxJTV2y`ReCHDn)9tZ&&d0{(%D*$($Tkz($Cg{ zrT?r#xRX|e9}aq4r*((cBy{6%nhNr6NP*>Qa-oa#S*}#J8LTpkRXh zO0`xd=Ga3tg}!+QPSt|BMWW#{Yy5<+wS?jHZlKAcw6!N@1A^K#r%b~#qdHCrC6r=r zGd8iL=(Z0x;UN;27o7m1)xsE+c99pyoOzIt8dFmq?QD!hu|tQ%BuDa3rl{Tu(9j)y z=yVPAN~jI!LOo)Dkl@&eCyT9^)X_JInnU{LQGqg@QyI8W_UvYk2<)_VxzQ2`GS08< zXz7Y+5r9mRkz2-J?z3pi%t&5`JNHKWQ9uf72STK)EUKG<>5%U2(& z+08cnWkDfXcll~g?QnBOpj<72+*N9}@#@IMd!r%zuilW{@E=R=&{>vz;Dg2|uw?~_ zxuogz`L1u=E^!bfc&#@*y=;2?B)v>`YVBWGgQv5A&4z+=%jeYcu_yd*p=+q~biRUs z!{EQ#-=@HqhLb4KjPqdV(9{>aum;+VUB(aPU~0+NO3r*aYMJ<1{+{kS`ZoSO+RmOt zjl$QSjJdS43M7a1DS#M7-pGtyh!eX}zgdzaQ<$U}42OIr_j`TyI=xJ#r9ulLZT3s0*2$Czltce@;!W^%(oF%HQWYh%W6 zF%k!PF~wZ0G{;dnNrqt+32+HHgnrg1vn*NwN86dHNpQLc8(dRgi=CG5g z^2%;GEmvn2z_(%Flh<{k&5HS`U@i&fnkBMvjW5JXcab^mGjl-Xx7GpEuw|E08 zW<%xbIpX|kK6Z2!^QHAgs}-5&cUGoT>y`Jed=9~L+FzOZM&$XloYh zPk$=fc`^|MrK8Qh-Gh&NI1EBs!Kz1dG{oKDWa?XKkG zO|dXf&EdXv%$~^Iu2TBt*w)26mt@D9Q+y?P-1QFp=cddshZA#u_fGu}#)Mc04;@GFiSjP31tuKRiQtt;YWk3J=@9USoVg&1J?Fcy6 z2F`X!y9H>S{B@`*D}!r9i~ouxZ{w-&*m@a6v%zn(`yI2frr^s8>B=SAD?`xNdYsI{ zA5dr*nOX)?Mt{6FT}J=V>4vEWAoh~Xl#o$835m!a^*W$edV_4;{a3IQ&1Aj1zqaap zgZBCC@nyi*ATUu3B0J7sur}q`67(&RSN?!raaQAe;UoEP-GR6SQtZa0f&C*@HOK!A zQu4vjw8-lUj7S2S4fT;#SAK;uZqw&Hl--gkAr92P6wJRAc9oIDAK_CPX&f}dCkKw5qhHRthkfy%3N=T%W+kq{(bDHYPybLQPI`6-qZmK8C2UmI!r)+ z5u{@J_IHQmxeg6~I4}c$aj_TIz=&zI|7a0Dl?oXf8%oPkCV0oZeoL=FLf@L3gZm#B zNeD}|4v?K(rz-LppaTd?!JeMZiV}smq6qUbeH~Sw@Xmy+7zAlWPSyl+iT$NR%>(Q5 zaK68%?5*uE=hJAxsU)lOiOg_H-QzQSgobitZ+UI-?ZPiZkt_T>?5VgVNrPnQ4ie|< zemjy;r5YXo)MCw<%%1D))FjW6vE^*H=WtCVTa#fE9j>b2*1+)gv=#8|vPXVD80y(p zJ1VUMHa1E5kIGDLQM?QpMZ)!8ZxX*9!sDDKemXulm4~v3Osxw3=m^l7k6SokFy)?2 z;xL@disJe~Yy&gj7%dUa8bOq(&3-m%QOL9|zVDI45BV-+mZxDgONFqoK}}sQXy%Mu z={7QaSZpZCYX~niHy3@^aB^dAJ}{{J(J~2kiT28@zqPtDlZ4ZW*tAj%HaxjkSwo#a zn_4(%M9kj&t?5!+H~3CGw9ytw<2&83tHp4E%ZDlPT7vpHO>>?rik-JPNWgvn zet2$W9Qkp%LNeY5JqBq#6-Zi`dvH5!ia{;%rgnyS#)Dn0vtCkHBw+p_w(#(_Yk#X( zb9|@zqX@CK&fI(kLx1A%eHyTxwiNi;)Et-eMOh4hlG@tt?YkSTS|+Wy`fVP?d>5!ulLpH z334f{(8>~Y9q1Mbxu8(ur_v<%<{8-+aDpmZ=wdS?vXV8=sk_SzInsR8Q3)oRvK{it zs_5FGcfl6m#o!t-LV3*U998e#J~2<_Cy!Y&x&pW&r!#sf7AducqU-oj)k#N8DTwQ< z`F-58f+UT!`5<5-a$`^Yny3t3&GM^*N_9Q4YP-X5>FPZPB9A7gh_)mSa*&^~%>|Z% zcWP>y_NtWIJetAmo0vt1W~D}`fi`S}9M|nAE#8&bUH6c;d$t|D#33gUEZtyXBq+Qv z!Aa6d5pZF^po)C~Qn3KU1#^T);nlukPhL}{Qi)?2H4s7`S5o8VpcsXOYEV$Kj3465 zPVjJ8LQ&X+SSBtMh4jZBMWY=&dQgXFipvnZ^kmPP9Ig)7ms7EIPNLv1q$h8QpyT}G zpD9ZdDh*7}s#C_(?^5$VzYg62hpSuSG5oH^-(SEhQBU;noTzyl5qvSD*2aO$!dSM* zOfQ;+yak8X@sUK~CU{d7Yi8GUs&OHXg+L8TFEs2CD2j-BWe+TMo30~5$*zn!u(leu+8>dQ-()bV&NP`n< zQd>FQd(|KV(FX_MmB-@+G?8!uU-p^~Ke!2q%dq&}Buh3}6rk}ANml^m8mg-PL&@*j z4^n*z-KH$HSEE$+p7f+p2SO@v_7%d@M)(?CiM&U&=v=dFRs`@zDT;Ush@=W?_$LHY z7_{`#u{8acvMk<7Ymg72sl_!5(_raQdib;bR&pLWn9R|f*s)8R$;yqto+yN;M-~yh zyBf;xmw@9Sq20;YT$TcI4)SzbLXyq>kLV*c6xt^{#}?y;{4A-S4K zI*1=tsWX$@Tt}_rKv*2K;)m=k-$s$SnF6qQY3**6-1M7m_yQ5Evh@)Lt@_xZY^S3# zFEgqOGfALiwWD2)8~IVou?&SP29waCM9OFtWr0Gv&bSQ1naH+dvsTt1Q61B4v2b?y zODtJB)kGSFiUUutKK?-mnm&nHd_O8Yg&719=`4dsREnnRrf#dQFAOI>m*xDK7}~?= zuGJsg(ST?Gzqt_QT?$A1%IC)PD;3NI2%oFO;Ri<+003Pm`tUxky zuUU`rDR*h}BZN7TLP#BpSmKn{?lqKQ)EV^!+4zat&bJ2bC9Yvv%wIJ7e}TRY{b4$G zXCF!!v@wfU`?+3si@wqQ4p3BSI=FtrlBF%&UTQ>5%CdnU3Z?vSt-=VkrRU^1k zwmZNs-Iza=^u}>Yp&f_p)ggBfo@6Hd>nxvOL32Iv_H@%*{q`VVCfERU=z5icM7gXB zD7+v;>gEHg>SyCJ=YVJetyqHlWMag=t)iTH7(Pf@pVS4{I++^wyGegR3H>NAyeM`3 zJ0bOF`_9?&xJydw@7({^tSqmtR_2l8y9>#ibpCQwo2z?!s~`FXF1y-#q=!ZQz0F@& z*lug)k{db2R(I;0`)(R{+1oJExo>*^v-K(L%J|oLmDUC7Q-r+d^m8VS8sX{|{qj<4 zBYY*I_*cK3akt#w%i69Gz4D%CT~c3g6r75?<^7nW1PdiDx*GS{8 zqkDMu6}dlM&elrO_`hapqAr2l6MHj5%;JT<1!#0Lh$?^TE^Tv-prn;#;`w8idUrKE zQIe`lFU5f3m2IErv*oi4=@h`Gz{j(+?(J-zRc@-Ssh1jC=gT~+(zahuZznbr-HKYz zd7v_^i!3}Tk}<1=O*Hzqaja#iB+d1*@3zNj9|a;91G{+Bo2jR{I^Uo1*?uoMkv7L? z-7Q7$aK=vd?>ciKPDokveq<;xryvrpH5ZU{_62rSgKa%NoR$Ny(8lM_O7yRb^H3?Q zwAF$+{TlHinNexlGA^^W>JxbxEJR+cira+0(8q?pJg@h)ZxVd_1FK}GUHq8}(NcGJ z#I_#-UHImMAfuymzRdE%&zW9abTEmX?|91ioDQ2dOzaxiUcnR+Y(5^|NfoB!Suz_k zQ-$35x>3vaAKC_zmlKJ6UYT+R!4}klCwPh6T)IuWY?c#r+PhWtK0B&o&VPB z&700Q9_3;BkC&Lpu9w+E}jLPrflXqmeP@Ez#J7x?1a&*^FX2A65i7km!c{=5&?x^|i!u`NyR zs+`)EZofg?Xh+m{0n#p9jo1x9$$sqn>Ecq$fc_#cB2oV z7bSHb7aCCF)aFn^l;(j5AXh**bvj!rhm8e!q-G|6ekM6^^8R{K+N6ae9F`^ds|T5$ z1OF1;0MPjFgBBwxOkKH%M^fUt23s}_^9GP`b`JKd<(}YPuYq6zPpCjS5V^8_? zZtl*Ioj^G0haX_kl#r8!%1oZBIHk5&aWcT!CYOG;jOH6#JbDOU=MV#YP(Ghou!NHSr&QN(L{z@_J zj_RmdcvvH>s{01x0f@(Uno(9@K+r**cJjEP(DLqF65CJHH2?KiFugcKjk#*@qEdPByW7PI1t~N|+KmC% zod$6CH#f@r#iles_{~DTwr-@^cAt5q?8Y6^D(G#YsDO2aukW>uvF_gQn_ne(%CX_n z5xmZA?=fT92q1ki=ZTh6-z406MzD$X7Y^W9^a=4t0b~4bC1RrJE81|h7sh>GhXaQf(oJC6kq}?4&i?2!{FCZlB8P=jp02!>_m!D>caRr zjQvc?Sz|w4_kNDlAP7`x9=~vtl{)kt2j zqQR7XQ4?KS1qa#kGFR=HfPGfns;_dME72ivR+4wP{3P~?34bNN%bZypI9iB z&j^&*4!?p{+C$}4U*|jj=F?5d_jot2yTb8FJy&#Nm{(G(GQ7qgTngmSMqOh~YQ@n8 zZ_IwE#Q^>EsPeJE7x}-8-8J@@|3t!=^)b=X>7~SQ zSVsaTvsN5N#XpDK6En#cKMWqas!64q7g9++E5uQWTqNuvn!r;EFR(ZWMspC`9=~?H z_)_-hn2nwM=kJS)&ezKxTzHh}>J%xO?o-Wv9Mm1_zXtngiLpEw?G;lelkX$V7`Yfs zv7+<&F+FXTM`WX%8LgPA~_uS64yxkiF5_x6XW1d>}#ug+`oWg7a)jT-_yOlF4RIy0=yT z1mT;VHz|Ha3Ebo}gb`6nOt~b;kr%zGt-S5#TWTMMXKF%Y?6aJ8`9`AM%w@P_>)vE{ zl}D-Tg&Hq631N=mY)U; z6St0(^;w~82?v;z!k_R^9Uf^@*o;w-U|PHKH3YO-#`PEV?_3SzO%CBekU;Ka0V;H9-reqdik zg^~aWadfz@$MDw9v^r!GERtC)cYcBtOVZA1Cq2#<1s5cU@eF6#E%tKmJgrsPX7I9> z#TvHx>Ga=%NRJ`uSkS0QUd{3`=^w5lC(7bn+x;V^O^;G9uk8qe4Q=)oo!aG=Q@3ZI*|i5 z+Xv)t=NdxFBH8OXFC?f+B|dfLJgb5o;HOQA^^3j89~Kf63eFqfYmx2ur87z@(0=wt zCT-jDgXX)wKb_lx_slg7^DA<8g*vPQXYL`~{5xrbaK%HP*phu zC6#$85}~uS@LcQRaDF|;mH1|gwT(EfWJSQK&Z_E*g(yC@lF0L~WWt}%LB8S!|J;~5 zVj1oI+JfYF180If8D2Wlf_Vogj&us@gGO8JS6?N?O{=y={En12iw*p91st{fhqBfVtMXB=${;o*8}P!z6?ZPDw?*i8dW}OkC8FK837$~ z7)n^o!o>C9J^6i&nTj?r(=_9ulB$v=mSAHJz2@U5s`KG*&Ly6`XtSuswR?DzxZEO{s5xj^NWI9g|9cyM9)?JUgIqnL5oXR1yTS?Mxb;x2klg# zjnD@Fp<@fC+apOIR4Mfk=u9{JRfmm;P!mj$#x=xX_MKn}kEhH&*D-u{Yij-q zvxW#lYkmj(I)wi-6Uis$=eJ-~iF4?<7+_a-k2*AA5DyPb>Fq3VXb=YdxF@NJJ5r_9 zy&M;x^)t+kD-e4WOf}#X)eS4d;)=zf*Xw6=n*}kbXCL9pvxy}rkF_eb(Lwz*Fj+c! zBPs5#ed$qWBEuwGj1Ic6`z!!7jf*^0Y?s~6!vhV+yQ_QoFp@%{y}$~$kp z>reW!zf>iQP#7%0)i_<0niDjg*kumb)FT20b-7!9bZqO9Rv>%S?5=m}Ce@A&&^qG9Er2Sj;x1aa+ zd&)2Nx<7#scCFmgP1SmZ%jp4T_KFLz!O7U}2{}<2uPqc)0K{fm&_779 z*fj4^#BD}RM`baEcnrnO{ek=JTm=8RC0YPA2~Q3Zc|T!XgzJ}*5*_r0Vu>DmmVj01 zBmFETR&$&diEf7>NSWKz4-)e=Rz)>F-R^{I;NRRuib)iU-9OVQ>4{|gLPZD6xGlYR z!4&E{{t6e*H$sl=)sGlj^A+dur^1qjqZplLgLbN64(TFG`#l<@@^uM1`CQO2U5N5* z|2-eJteyD6WT%f$XZRRXsUP?MMqQ88|6FCmsDY`x%$gMiM?S z@}qTCCP^ZR4SS;Hi;6Bk6HYEE2p3!@Wd@fQrhic!5tdK@y0y+6u3eak>Ko%AR%Bko zGso>9{OsZ!%%ESYI7R`|5S#>~gI?SE$tf=-cV3(}OD+BH%ZTy~y&N z+Vq4H51qaC9Y6Wx35!IfYTMYS@y-8gUc*sSHwCO=62C{s$cYDbv|Z`KPpb3i_FvBf z4K^h0Sl#cRryAc{yop@tT}&)2^n=zsk+%76M>Z2jSYK`CR* z>*#IXBWvzSj{ciz=d$2WkAEwpIW0d-u1r57lQWn8!b61_P!bVGdOt246UnIz^z45| z-&N9$mp|hZA-xyWc;p{tjb!}8`zk@{LEzEf594nR`Ox2Q7y)6YC2n^)5kr6X7z3hC zpS|8lvi<|#Rr?U5BtsgB2485siupTixs#cJ#Tridj8%^Hwn{Ml!tp+#?WZH%Ln}Lf z?X$nB`xR6Fy+*tn%k+Eq<+llvm8a{!p!^Mb?!gSYr%O<8(f7>4IlO6n@<-|U@)yCA z(|M|YvUca|4gCM?7%0yDJYr(4Eh8;#H2Q6tq2wY>FY%e^w=>!IQSfLdc~H^qu)%7h z9p7bTM^}4oiu=HqyPIdHXYMJhdSzcjWsYTUX1mcQM<-QwM!oj=D?o#y!e^yAR}f}$ z|8s<^;x=zrbFXt}?oyZDXaAje0lLPrRVWVswoq^?< zN-q60HX(WI&g*G5{eMz?i}q#IJ@2&j{+s$KP2Wn*`y%SYj;g|F`R{eM@B4-PMp7@t z3nFNrwleQsSM}nWEZtl)zR*16#M)giid$9Yo(KajVjdpZGDqYjUoN}I0z$-UkS3oe)Y&gT^9Yz2^v+@nV<6f zPG<+tQD&%-`zZ*T2=MRS_-N_8H*ezZn+w)kw?Y-Q^xo0S3~^livq|cIqKvwA%e~ua#!wxaOuI zH>s!>o>)rgeG#RQM-H7wmJfKJx@J&6pG7v0%!Hm=1Afie?;ROu-#)4A{8Gz|3G26q z=O!@qzLhO2zV+BY8pj=#+`U|96TWCzXFI@53!|=mV$*#KVnjF%yw0BRIfE~3T&bMk z@QoY1BN*Tyo#qpK3Z)1~{@@Aw4~Xavdlva~w7;P0smgL%CN(Tmi{zUlMU`PmV9Hkm ztcfotH+D(}GeQUKjUF3oqjZLkvy9hx+2u!$g$I8eqF?=tkmo}YUmD{NNb^@Ha{BZH zW|PF`+8$Hd^B*lnqVN66CuaD>3?p34$YNWQSTe{M)s0Vj3ZLgv#&uomQkV5cZ8TiL z;{Y12WtJ6GKdq2kMYKk&bTk>Lx&t?b^_a7 z7qmVIacmq`4+LlRSeKDKyO!*T*<|c_f~YS%3H=h6a+25 z0jmg^bKdL9i{ju;1-alM4kmP!iLuR?SUG?sj})gozfb_heS$vNuW>4qwUz1DqC`$2 zK|HSXh$Md6ZW~1-_r}j>ufsxZjs6EyK&-!?SKD7N%lZv-OX@t}FE9EYcU2R7v7$s_ zy@Dq^_Vc2ozk%1|s7XU~2S3LUii0%qc~EFhTim!voz%ndE%6R=sxH1~UM9hS;ix=( zVur)+C;01g{gy5QK`{tQ2FV_H3wJVBxNsmVK80Vhb@4FFhFEN-g2lYbm*1-4V2(cjZJurzlOd}Q$gO!DT z?4@86ejuAjG;r>LIfq5*yD1NE0HcmmMxg5@0neB93OCAQOt_ho(XP*PdD<|z7UNa+ z3vjF+xG6?;Iq;*h&y!aYaF?`4e;nDL9rPnF1ar+COg#lE4BjVe6Gul_uV@Hj-rJp$gUB~E6G(Z=F6cz9|Z5}S_dHuLo zxb$Y~qZed7e-P44V}N-Dt<1oum{~K9pX7LW8*W~4>ot#nQo_#A6F#xbieYR^mQF}~5|TKXx~ zEQ3JKtvhgpP@GtQJE$l`zbmT#N=KVb87E>BjDGrU9SdKm=%sF&l_;sUa6iaGyU zpDY$gO5&XJbC?XG{(y%nVgT@jl#s?&dEj|DBu%t09j725CMAQ`72sjC5b;V3uVfGp z7$L8h2Q+92A#L;2!#)`FU_hfK#%2Wz6Mvzi2HwvzKEJ@uP8^~=S0Idv>soiERKV)J)m|c|&GV4I*%vopG1cfUlWRwcB zKT8GKsZ@}4rGiY(Fw2~f2VN!&_f1oSl;^Bt{>7~5frWa}peT7Frx&Ccb~NBFi@bz1 z-1q4_>bbcCkvmPYl>SFyNv(%RmBoE9Fd+GWabwX3Xc-3qJ4GjhJ~POCbYo8JUhY5@ zK-UNc;=1LANq~oVKIBe_);vOyAz$eSlLQ4P%@m3eW=jn4z=Z&h0x&Z}hR>rM6=s;; zD1`PH4`}TNwhn2yOrjVZfc}F4k=m_j57RyF4;9gZ|>i zsn6pkF=Z6}7}7@ILO~3|oXRg+6JHMn z3xY!$_j-&sI!Ma|eLWqZ4IpAb1uUr>=Y925dVTvexQ8f6Jr_#-AcuZOBS4;`1vxE9qTF$LrfFVAc=Mtk zhJaH{mt};m4N)*b&rVQB%%&wJIxic7 zdmcIl1iQG5Q|K2y8VerSp1bSjc|YLE10hekb)Z41As?1Q&?kS5is@rA#r=x#H}1Ke6pt)^@}Mrs1bOIoICZCAliOhq zLYMAcq5D_p?lgNWE|hYK>NnKCr+HD{S{XhUe?jiQ&7KrdUgjR{19)H0rqzyz%kO8a z>EdnrSV%MF&Z4fbq`YkRhw7hyX4A#GZmFv2#-EFC&2!PJlObO0Z&2bKGf75y6sla#G9i_`*BLBI@s)R z*jwc#CT5eqwS!Of`SAj)$`L%&v(XkB=KIBZ0XeINrYUR2`dICsRGYNOvVo-Gj$#t2 zb6Hs3f>K!SJXWvE`cOf#1_G(ooDo6vdt5H76`>b>h_ExGV^x5 zULM#Mnuxa;9ruuMO%5JbNPTkovYgXWI(MGWD0#JC{yd>s?XX$?_gJYfc|sYVQI=iQ zZYb-fQ&N3`AMN|o*{jr=ztE*$H5pw{bsPnta^vNzf@=eqW1HKr+}zc{^Xg@GTpbir zE`KY)s{F_-SLg>^Pq|2)$**=jO82wP{Ee?m9F$%C zkS_c~^{KX1)Ov%)?`HE;Ql~LGDV;HLnwXn`-=S)sb70V!R(SJj(UR&j%DM&bx9Dx} zc4h;y+zHyIp3M)6f-ch~96H!zRqxDzKqr2z{yQ}6uikCR$jq>s*E^fGJ;C=Dtk}nw zBR&~MrYV6I(1Ik3#ZxWNT3?Uqf{xgHefqFHpvyuZhGLDxwgPxvQz_{&tc?LU&@BGV zy;SSi6}! zL;X>i=V!Cs?0LCb9!Qwm2vhH8>*eN^YnANQq;AeAciV;WN4=%6FrGkexSJODA`$U& zS4=)V;2j@}a`=5ZO2*@FnA_E`(W@G{wQ7-HUYW?bGLhShfVmDt-zyw{5I}lM>9v>o zaYA*)>*xJw;N?Eg+%2K7x)7v!kV4@mJfuu~v)qJ%6j1>53oh4EzM6M^cVD4?xkFw=PRTw!3LxPRSe0JH10MzvUMA$p6@KYbDegnt z$)yE3p8sjs*QIA2Mpshkv=2>N77T`^ilzRqITA+cUvNi`Ob=a+a(sK*f+s8HV%S15;ZPK73oGb$O0 zYzp+DQza1ddhsBGx|jC?o<{A*0o2}*XWAq^wu`@LGKDE3h5xryeQca@t8GY3RinkN7CK_z@4F zUu6Xpw9@nae&FVr7jyl=Nuc0E_l3BLBKpumlC;Dd)7P!ca-If-jutWo4E3sBgvWRV zqgip4)g2V{^+V&u{WNj$?Rb_*&J(CpMiQbuMHoUSLZ61d<#}B0@WrjJpeslMY1f?6 zP&gP73|PQ3#iNA#Ky>2dvPwqX8M-2Oz8!j9&y5Qw<57Js!!WQ47+bwC z%A*YWc*X!o=)v@*@A+}o@1xXG76#G0MNhnk3Wq0F_#V%$&`8j?5I4|>m&No&>d6sW zP|kZEIv_ZJ7X;8n3!fGaJgpqVIgYsd2YtSXdE`(WGpLl~CTs$_QYLg@;%>gr9Y=82 zu!mdF8S%9eMkySGQ1N3PN94QE$#a^r6wWAl1QS%M5u-CWAs0HReDg%A5G<#lzi;7Z z;7W0j7ZF%k%2Q%e6z%2cR=tcH5+y@YU?6exq)->`r%-Rt9(V=21yz2nhu#(AadJ~w zdMdTH;(PWfxmRSZt9Hn@58t4c5*pq^8@(-(uLW8=NpEe6e@5w_Q3hv}P*d7Zcx!*c zTl*6N5i_~_OcT`#fkyDl z{0tVWDb#c|m_CjFGSpF$Pt(5uJv2}{oQ$CuE2PsnqsNDT7ujU^m1UHSLd#8&X>vRI zg!&S_QI{`cx&Yx3d^`!dCImkf$w)!8WaRP?Edz;v8{X&WE$W8hBzt&5OC^tw$zO`r z7&sL6lnu5P_89=qOGB#WT#V!zp~PSFz)HCMRk&ahWgkpC@8=kDE^UcCOhsYTD|s+u zKH&a7CI<|qn34Oy6qAq^VBpwgm}I%%D+eLyfuCb2_5G4Z+=V>Vt8{!1T&5^|KN-Y+ z;YG!uk6E^atN~qn zTjey`$^!t+$7 zaA5{O9l^iCoIJW8LMi}TbTY1*d6>{V#`ki;%#tuD2PIGU^T4$Hl1tI_bj-uThopi^ zMwk$jgppZL08e70n<^a<`?Pb4Ax7|oQ3y!f^)JJiyQz!<<9S(+OgKj)M+Lq~9-@Gl zXVzz6XlcRdcwFmsG3(G4tLVA3GsK+5U_B|%eT`ghh4$S6?Z7-RHWVNt3XL;T%vWLL zmiQ-2)N8`^tmHdIw{xw%cO@nEoI2Jeo*w#=w+DGvsSDWA#-^&vWva6KX7F^I>8KDFyLnC z@RZzwi&p4q1I|J&SbvGHhIT_IjCwxfu=WPQ0K#GJWspKVZt}SFUrjQ+LR_NrxM`U) zu41k%$$~h;km2cy_;xS>Ni|CZ4b~2Zofx2 z>(b58jDA0&c%5R1(NHl=F@TFGh)c%$!%!Na`(zZdi_%$a&Bp01I;>s_gSIOXO^SyS ze7$rwcazc*{Y%SysI>V8KKE^MV^46|!+kltaUPOlM6>GgC$!3aes@#4;Enn4zLPZl zAdUMk*KhnV6>`@Hw|I+*tD=M7HpwG%^wOw!DNe;1DroZSq5|6sqIf$x%=At%>IB3xL| zm(h)LvpM2dI?YXSKfN2@i0XM`^}8FZ-`$*=SKl~q)$beGB)Ll_*(aGs71SEW5FCAO zKrxHaGyrNOd`iZjoLBjMczLO-gMi=olNY1Orzs=E0~y~XkbN{V`S!q=@tl;u3Glbx zUZAS|*L^lEZ=VFAd@)RJ8@!|dWe^A<3S`~C4fDw-y{3L!+}{9U0~^?GN<*Uv2GK$b z04AffNH)dv-`@NE5~+MlZs;vwX!-Dl`zadZ*Z5?8jZaO0E3{lXbVi?sc!gw~4TowK zPoOzN4;8=XtK*_tJUtFoETU1hUoQ^_MLBN3(+E^L+xYkl_EXiQ?MzOaxMbYVnv1QE z>RChQdH6vzqkoN;uS3QzEeU_K}-n(^vJs;xHECtmjTF16fzJ0eV-@AEv0N|Fn3dt+f}D(Fd4|BhtUI1 zsJp!t!Bmum*1Lv3O|;Q(pN5aOqlbrEXHl&VGfYRaF|(>LpP2ty3@mscui3>h_Ou+CGfZ zb~Q%Z2Ts*G@oK_H(b+zX&2}|1+Xr5%mnvftIwp!YAdDX;BjkXRW9ockXVVA7oMbc9 z%cJ$?LV^ixnH}rHcFioUXz^%}f@+(l$ezLJm%TgL=5?}r#fuDc%I{Bj69`XaO}Mrj zNkE!4U%;m<3#2oS1sYxfjIh=v>4jlcRErD^R|A|gCMZ`9$bDsKHOTOO^fcjknE-is znphZy16|ba9ohS3lL)4!vAbk=uNy0o^@OJp_nxQ8y&>c726-&LK4dBgbDM!B61#sW zJ{J%7YR010k2!EW6asic@^m{np~}9zO|nG9QSmr_0DBpZ<#7(wnaR^*p||069r9vQ z2!qmGTuObq|9t=O?H+2knzLo=Qq z%gpy&_uFGK(yLrH1w-3LA2Uy`=4L@?l40F$?vtzftQi3vP7tu{J&Z(xR6Wq@wvUE} z8SA#iC_6TY)rqa_n3EbzmT($OI(UmcK8(jFG**C87TWPIp^mv2glqMCSs#|0*Ams; zRh!YxsLNf3qZ94|f^e7N=!}VgbjCzLYxo0T=x2D?^5uPKn(i}!&r+fE>25@aQD=DA zK8#1st-d@we11}mI&u~x5xmEj+(aNke!;W36}A zoyG6nc7qvt#C|+#W1p&T_~pXq`_lP*UoL#HFP(2>^1D6rO}=!#+LsGo?aRfl_C@O) zU!-zhoW+;+J-(osf3lgsNE>{y+Mt2I@ZGX=e23jK{ZntUBc*d1^vW+dvXVeQtBVOEu;R;ic)ou*!40k?c+usA5!CuC34`ErQQ-2|YIQk*Z~k~O zVc@wJ6DF>IB|-V5U2dx@MY;av1T^B6JA!L>MAz{{Vl^67)%MZu* zxR7w?v8bJv~Iuw~^I(NxzVN=vJaZ>W* zS;;39#bQsMby|)v)rQhA&C~jL4aH(%4N3InPY-tw5ULBvFQPNFyR5<_Kuv4fdTkD0 z3672$RQAc^rxYy>uJOPaBnG>eSTn*%1aF&JZ4XcXwug6zrW?PTPmTF5O%3{!e9;+A zf4UQze7x?xiane@_l%}LbC;$*^hy2vbDH8LXYYG{udtW1HaO20T*wz)$QPf{bjRz` zRM$IetMfWb_d9F9F0JX5=k4cRXsa`taJTdKJ)^~4n$^);q8ju7WO>HaD*>FPc?U0>MZ-;jPp(m7u>=SS+Lle!^I=W40{qcRG>EE{d zA5bl6Mk}ZHe4ZGSKu+}9Mnm6hbR|I4S=4$$t8yhb5HapLBrx^i=u`11RJ6{BSDE~2 z9)XHD*!E5jk&`z1gFKN}z1BW)7VeYt z#d~rV_?9#^ZI15(|u$nn+Dhw)B_2CNCLXLJ0jT{Zy9N)~{za0mEH^*%r+ z_T*n3@o62cjMaqQfi0BjEFf(e4~QeD#5YXEY9<>iiW=>Yc*~myNV_6p z4DZVam1F+${MFg=XZ}3@Dt;W3WV4Wm%J~|o-&bde*ZHaz^dx*cq$E^fE4M!!4^o0$ zQ3%)4zB-S|H|O@|oAddbGroQJ);8b2XY=jza<;ic(J#wt@r}iv6Xz!XH|K5n%~^lL zZ2QewZGU}pisZYK;$u7a{4xEIJP8b{A+ZNqH0gU5&R%Ds(%kjv^YFXuGpWrZ=k7Ot z#;8iAFMr)vuc*^^$1H*@1#4dJJC}mKJ7u}%CAp_)1t#@ZX9f5v1&RFOWKl%%4X$C6 zd6953^u#mkFKgL(jP5-tZvHy;>B>Gm<@XO?$DjY|tQMAcRIe0zLeQR#GMs~vu8{9WF%x!eA; zT&-ppu=5|2+3{gNUcRnp4GX9(tk&4;Y`wl#+;Fy;ot`@G4CRMs$y-T^RwR$S@`oz2 zoKFb&F7LPCz<}+|#KcE~_f-d8DxOP!rBQX-UZV;?#xLnEB$;WpPVH~ zsb^GeMKYH7T^9;FTuG@flZ{b|grmGv+?AC1WpaH+pfeAFJ>Gu1ZpNSL9-F3ja?;~^ zqyC_?MX}x;-n-;avzjO0&|mICs_GgS5~>aczND8n6)PiSvI&pXe9MOFkY)?2XdHEh z2Cja;J+ydb22p$d8bdot+U}h6!-CntRb9aO_XhpGJ|Y?tPjm7ESJBl#c;DbD$+|Aohe?Y>V14ho!fpjH(1?*vQ1?;iQRw()dn=( zg4FqSx?lV<;17LWo3G5Xk6zxbuWJ*G3~137w4gH0x1X+OyB);o>Eg6!D$1<=q>51K z$4-Ark%}n(wH0eMedY!HmsQPaN2IKYoPTC^w7+NizTQ7WSbF9?&SdtC8SkH$1Fp}{ zbjGV{H};D8Gdj_JhYD#-QoKQ6rD#mu<3;v83d^gS7wy})+(8VOBJcE}Atva&DmYO$ zm4_Zyyvmt}0`bU01q3Z&J8$cpz1VdoX6kIEXw1~vzDHrGbDJUd9y*0SScN`x3VpB& zedrYWpbF*X@7v|`N2UsYuaN$4`CZo-Nd!zJGDqeub;95u?S%6GJUjcjSNwQ(ZZ^-( zXonAtzt7ctKKqe8*V{eX4BIgsygu)-?0u99uTwx<(#3zyu9V|UAR|;Co z@6g=I>(}*e&MP>nA(KN&ZUgM~b*Im~q%Iyxb7#Y5YF>#G2P4eny%Xyn^Gzj zLer0?Z$x)L_>aVHEglKXWeo#1iLqq4>s?qV2eXaN;Om0 zaaAqO-<%xu^vzFcgEN|XK@XpKvR`5@yp-ynrpnp4xIWLPyXR_JbDwzkV~%=HXY!R! zQYFgyS-L)0SIXnLx>pP2?H?6r(&gOw>(%n2kE^BAc_JH_@2_NjjqgI``d5L}Sk_Kv$e&R2!_LhjtoD6irxF?s$U^NgJFQv4+#$x6QUv6HAO=T~4x_D<8 z0nQ>DecSzU4b}suudkyY%ij#JfC+;&`J~SB)jW3hHiI~((P3>7W~XU6*Ll}e2n`Jl zMVXW*YmzkYqR=5(b!WX>f{jz+M%5Wzq@7Yrd|rnPZkj))H&Zq3Oohs^E5NHY|0;rt zAJQ)A3Kio_t`vT&p8{rggO}r`X|VA-U@ps0$aG#+7|A{A$Dd90i=J>1mC+##{ zOczz%V5<)HY@rIevii0}(r?|63$91lv2+&H$gFTW3%*2)oQA$xux0VPmVhe&7AgqM z!bGE4I9wM}&`c$~uiJ1ci_;({DnFY{qo&6IoX&Nalf_AxlSR9xpit?tCy`7RCX&f{ zLVbz2JEN#zJJ9SU^odlxgG24n(6FYN-)#S`@#P6FqK{2D*7g%-2WTC2xiyt$L>-8* z>SJh#Ycl#pXM24AibC45tDAoj}g87|+qdtR2*o(ZU6DjRZjvC|dc`TbDU0v$KhuK7*ww+Eq2 zXBIN!kE}Jk5xSfG)(l_a)EKtg9}1bS8j#RTARXHa+N+>a8@;>sMuFUU+Q{X0i=Tgw zWS-!Tgt%*G-{e5rGyr*;=`3!lxV04~s>+ zO0B-pJ!CDww@dK2;`dx(8+E~bKP_1vF;4wRm+Ey9{ulTtoq*$VY=WXOUs9%c4 z(X1fFdLc6%)Ea%UnLV$hp{~#`&|X!nJmnL&U)e=mAkWW9>a()KN+h&PxJ2KdQDnDE z{PXs!;by_N-R|vTt|l(7C8$ba;*?wKZk^7^T9#~<|8I2#n+#)nuiz|oc0FkgS(yuy zV@S-0?&Ins_)@;)H+eqtCbbLPsp-dgmVZdE^i>u`=d;bck}8$6C9ja-H1t^Qw)=xd zw7~-xM_&|Wx^3gMZCmFBsR$a=(^teK%XZYz3~X)r;DL(@mfe zUW(rbjWHaW+iOEEa=ciS5sTz;=m46)y7(asrGZh4!+yJaPnUuG|S-n=nJLCCz z1^Sb4h8g#h^;o}@GQU7WA<_doH`|o01?y@xd)H>jkR@5vHRi;2gBwG}LXMkG%CUWD zX9HZ^#zf>%CNLD{!TPy=AlP`eI><)<@SrKCDjjtVz3xAv2kDM=HF%ml1C@&;E*K_ZH8gZfGaKSt%Hr<*UA>7*{G+y@XFAOZ6>g?bE5eY4>G%bn5*X8+x7OK26WS)Z5!M65Ly|88oO6b3@!WDY`>6!k5}dH_ja$E z^m-g8Fn+~Z%o=Zrd8L6pF3thl71+MLtS^qLF>c}jvBuneFd`8BGa z)$m33Q&cOM>8Du}svBl&a&;FOMFn-#TBqU0{|HN2T9|y#d&njlAJ!d&+f%O_LA1E? zzL~%6w~BG_asdxo z6q&qi`mRe+fKeZ+{nK(`!iw`f`13~ zDeAFXl#PmiO{e6}z4WTlsBxa@KG(C}#`Rmo^DV>;?3Bn(i8b=Q-;Y{yzZYw=xXmb7 zy1Rv|$7njcDsUq1UCi)?hPrXdIHq`vwyBY;}?%i(QZp9QoA>!&U6-I&Qh4LV-;)tnct zY7x}aGQsELi{v#6r>ym+nyZB%{k2kx@oJE(Y%t{9u#vOxD<9Ots#VOGDjxFjSRt7G-5n0 zn(H_25a}$qL&k46pT_hfHAZnfl z)ELF-9kPQcKJ(f3Zhs(OTqvu#g|Z7=IKSVyH|Q+t!?Ex72hWwZYtfx#xEZZx^GfxA z+v?@;u<6nyJd{n8mBsTchVoeL^mVov%BtCT*TuiRanVqSpJuBUOh|yVf>1*IQG_A) zQL?w~60mp|X?U(K!^L>_UyR8o@(bWf#yhB_FNdd%fmQsWTmtlM_wTfCU+U+{hK_tN z1+AxtU+Si2w^24PmR$6PY|Y66fW37-+_c07)@}wOi`yAaD6_>+l^uNcuz!Defl9kv zR2x&fYQ5X;Aus&YMA~AX(hjGD#>Zu{{ZVZivY3xHm=s?h+EOgo(xOM7AGx9_WYxAU zu2d~HYD=px&_vD9@e#W@&#B8Z3RPdNmbOH8j4{{p+qP~{i5q2*l!o}7e7Qxro&EFP z!H@G<-C)W_sX?t)5$l5u-gCS(FL=L|M;MDGg|5{_tyRpIJB6Ba!W6b|L1TT=-lYx; zQ+PUC*l2T?FAvg3m(6=hU_@u7Yg0~_X_tXwC6)vvM$x)PzdPB9y zJl-Dnd>0!T>ScS4DiP17h*?&bq@u+ow41WY>n>V#uv%R(S1NV}XmfbouB-jKCMYXR z=eb@^abe)PMb&IqY60S}31rjCc~=*iSs@o68Bq)Piv@Fciv17G$>j{8jkXxjD*@H6 zuy*vQ^h7QxL%mdLaInK#gVH$r{dO-{)j$WX^{JcdZQpZ4WsU(I(cDE5L0dT!q7TuX zNh?>!`c1I9gN>?nlcy_e&@jP9we2v$Pt|OHc*Y14?5%@!HYbI`ea=(b?3AFC1+`#% zFBQW8uu%5tDHo}n=}LB=G(tA4!1e660x*izdX}uyY!;R{ujy*B>=jx8c=^+2Da6O| z^e!Jyl~IJ#*iJZWdCo?@C!~|R*(-#NqkIN#Y^+)W4?ImKxs>h_`K5e`D~-0 z#k&S5ZY&v8M@7xyD;C}8I&G}K(MgD%HbwlX&XSdV$jYF#xoV5UrXmW0(q|{Hnq&nX zSUGz;hvK7>>p&F*br<=hTBNd9sEE|8o;Ee%mm@~=D@XN4D?ek%2s2VBpMk-@t}0Oj z%uaDL@hhsZY43+ZY6EZ)6SaoiSif=iR8eUXVzdgg)~Ro_5#a`+=~atPjx*woc6_sG z$>#lxR-F>e;=El_1OG6*#9N>82|O(W}YFP2GM>j-{>i3JR`n@Kt1ze8E@gVG zXD7K%D9uCPs`ICIY5K8e882oV)jv+Molw^2_l)^I@^(UfMoFG)@lZysyA?ZJs^=LqJ%5AqEFC9%JK=|2v$a=sYdJ;o zw4rG$*A8vpG)1#O<+KOu%FL{(hr_C#&Ks1gZ{yuozo^B3QLLuQ?fxX2evyXw)<9-KZKb6^#?mp7X#`dxq=3odKTzcqyaDSJpqAhHe(rk{ zz9Joh6+n|QwI#1`;XVr7?ZxVehCqs-hLFyuEfbsVRz=RYdYo~uW41p{o_~}$>!L+= zKU-G|*d^ zKf82pIJQI;p7DgJHcL-)N`S^wqC{vs%Nd;$)sE{Kk^8Qvw@Z}9^QWH^)jsVhQFd$3 z>git~N)WjV?|$KS25Y>~AQy55mvTmza>nOGwV8ZMlr7~8O?RR4++M!Wo+m`J^L(j2 zy-Q7ZPGsc9OYeS8j8BN|uCq-w^Fxu@RJCc>;`IrxBQlVoQfcixdr59*Q}o7e>8&qN zZPHr&ehelyElV(xTH$({QOH~MTaRgNdrx?2!Lp8NkWPprG>+K#&KBxbtYAmyNnH*8 zEct{|cTsKpcw8%|DP6}d{?@@zWCM$Gr{TQ;sPYPf60CK;Q7!aisYK_NG|W~|Wdwu- zAjY)nK}JW>^ZRx`Er+AA8wFE;s=Pb?obPG#v&|_cTtAol?S@n2*V$f?e;PnmK7P)Y zEA<}TfHQ4^vNCS*`>i$zXi3~cpj}#9*kVD$gAQ%YX?{9uaZChg>h`m=xNQx6+-#o@ zv*kuL-d(lcDoC5%66O-Vg{qJ|Ek4Yb^=@06N@dJz2uUZ)4$+12$$U2eCp3P@H4 zQoB(#gpi6$2?uNBwfJOfrOh^JHKM(l9vX}*xIgHAXCX9OZ!xu#rHm_HE! zmjcARS;Gv;s6lS~FBJHA+#HOBic*&hi3WR`qHMc0qIS}4%G`pvn}i$L+IH%jg6#-j zkC>j*qaio(cP#R=x{TkBFE1pdR&@5`CLMpzVMf^irTekKtdhXU$+<< za_4qaZyV+({&ZlCi{t8oG->>=djA?9-q}ho^T_ikx5yHl03!1y4Jg2TCKtMD3!wLI zpY*~#M$MwRLB4`u`C47YTlHZ-qHo`3UI}eyx{7t5Ms6g`QiHxMtxS(wjqJB=Zhk8R zH;a%$ptLA}vgS)x5?bs)EnO<6&Tu*<3-|Am#B^UEh>=ZgY`adIXwXFq)-5RR1G!jH zs$4C|C)X!N>B_d#Bwr*pcAY|)S(Tv|Ci*Sn%d{=($&gDmo_`S^9EmVqw3y3H*JJ5!8bMn`FX9u z?Q${MHXX}+7Pa0gWC;~1kob{o$h|dzo%m%g=PK=IyPc-ChNXgJp3+U(p*!b@uAeCG0y`zNwqWF$GMhyDF61IW2Z*LGYN_ zX8F%dx#vAW&1r5wbDPs|aEaRVVl!|I$PTt`;c>eCtp=0<#A;X7v97E2^XlDZQRN;= z>O#{RO9#`G7N)j6#o9oP4hvQyDLV7=pa?4)(Hpo1ty-{HEa}&;Yqy8Ix~3+&Z_M7O z8+jGACL!>0F`XS0_{Mm$n})3%_bRi#evf|#J~_QSa;~BLliHY}NzC}L0Qxp_KQCS` zBxl=~8DIZ2&)t82T4i*Sx~A!xSg)sbn@j?9K7;0Q{{yFZMIY-J0O~PgUvQNL7BA4T--@ec8gDS zb+bOO+X(U4MWwUYgewt})=V2N)K!@<2&KMzgy{85VM|d|Z8{|J-m-AY*( zv+O)k>-V}8NT6Lx_O^xKY*Tcp?+Tl3>gD%1@TRR-;#9&WG|r|PJ(wP#w^p{ILtzSq z4EL~+`H7dW!qFdI2tRJOhx_VPk@wdt(WG&s`Uk; zV6tCt_n(kd?S=HJycSHd0ktWy^L;#9)ibYGY+i{zW&_`AU;~Zs48-t%pX-^gQ4@Z! zy*p^(esi~hB#xSfKV^(>Y4QeE4g)sbJKQy4a z!615lMnz;Zm8cE0Z=fNA;90NUW|ghtYGGcnYCvVM)Mm`Ug*%TuDFegJyaH`NUY7Nn z!GCQnEM0AXSt$2K{xh5Z&}gx`nXP9lQ}*&do5id$=sjd(4X&HptL4TdZ>t~Gw!vm| z*$Eg^yD;UoVq)7jEX;HRI|FX|&(pEJ9M%b^$u1X>DcKpQ(W+n~G!f zS9TzHgzvUk%}0lWi%Z*0f<=C@bXVDWds7ZhEW~ZF_zr;a^`YE}!bTky4UjI9R{v%QF=uT(_r<>6Iws2}VZ} zO;M)Wc7#766^8&)K&`*}gsPO##?|<;1F|`{!6sEUVmvGCTjnRFismgC7yj5_f*97= z5Qd9pt%-Y`+}zUe_>!ldnm?n67i&*|&>RcAnof@XT-6Fk%zLp|n| z%Yzc>MYgzkZBFu5VyFgd4WLuc-$Y(;L?{!8amnro%=y#N^mG_{jZ7PzPp^#YpeN^| zxCFPNrKI`{uBYH3=?bLfr2tw`viqt$Yko@6bFc?s zQj23ildxY|1QlF?!+F0};YfvCUnYx7V`C0~mMlGOyIQHGY+b3gC{5Vg_uG$Cu<;yI z*t~%x>Wl>Q9GQsmjs!`1C8U<|wdJ}#mfc{@`og##RO?Osve=^Qq*N7^Mg2| zYVbv0JF}$hc0dkcD7=;^3&1Vf7{FNHy-92>BhT_%nUqDYL1kjlk>OhE_Kb3Bw+jy0 zfNU_v?grDaD*n1_k)4ew4NBI}#Jf_Hm*=F0Ii1p9chI|J&B?l5t=M(i^OUqW!R-mW zvoPRDfROWce4PDiiE2^#0;$D+p5S%+4$HZE&^8(0yJNFAqRoX{+_2ncl$(UtZVZ7o z;YJR0xtOFkF(mjVr((v>X;XCsjl=tubZANqgKw!t*1CFj^IjmU312o_A+SNcR&8xX zlO1j#?l>EDS;{YOqNPq(M-WOb_2Uj2v2UB%%eUp?Akpomd@d!3s0wvrO|mICRVtV+4z-#AxHYP00Rbo5C$7H>T=8TMiEhPE{&boC zwLHwEZS=;(br_3~E)Rl8^t}&pjdS zyQn^4vnfF0S($pYNZmkWlghPS&}A1@^4iJdAT}STw8{3Aax!zAMx&ASOdG#lZhll9 z%Ib`AQ<*5KCnYD%K^S%dCD8f2+MSR)p{HcWv72r@Zn{rC6N!ZNfAubf%Tdzx#S{r= zcJUVIUwW6tCW}6Ofj(Z;OB)x7>-0gRYJK|QPTD71?@n*RYYUQgR)|^yZJT() zU}*_#qRVyYn{5X*;XwJ3R^0DxzB+iVbXXctXvp+oGr%SD=X~(x^ ztx<;KZ?QuQs)Y*cCT`TUH(A)G1r=X$G8M`ZDRRkG3>gzkhVGXu#gx?5a1{F03qePh zZ*cwn8hl^9W{3T1I$L$=a~rA9sJmJ;8meb(){VU5@TciG&1z01A(X*#qmqHVJEqim#&XeX{Ln>Le;txbiD+f*BGM`t)Ch;zWfnmQE1Z>6AB z^>TRJ3b^M&x`st65W9M*g}Uf1zMt|!&50nIpcFELEgOhuTN$SSJ+hisYv_6{Zurtr zo}QPdcX8Fdp^XpK5mE_ei`8m9e>*H+`Hpn<*~kW(>P<6^!=V^4efyJJf-G%Y zFRj|2(svhgTJd(d#MueJ3qsN!1tSzQSerOHR@(X!@y3eDW06my@mMMK1=^5KL0y7% z3Y8(Lp!X-V{mv$g&9bRN=Vx$jDt-6mxaB*kOJj|rrqX6slzF>BM0=(*ts-QOyG|3b z*hY(3Gn}j>*>`TOL*#HT6PKb>zI7PfQN7OzC9j^3udh_wIuHK3td|{{vGtMX znf8!}?nBer>xCQlvqiO@?SGsnHIcB-leqM#HS`{tFeUjeJ-nXpm%DDF z7R=SYmeqW+Hg@s>t;0(w1e|;%JAmTpr`6HGSF_(L%=&rdFe;(Y9WK4p?p>IcRp#y3 zM2WGe5<*P^hqtt5Gee)Ua$59yH``bV+Pqijho!uXl{#x5rF4CHb%t&-Qbsac2%2vx zg9*4)ms)zifZL6_YG*is7u&|NQO&NJY9S3T7EDE5BP55q%vS1Q8(lKBTLD!#b$a`j0FlcT$kPyN4VxA3 z_Oow}>u$3tY|b4|-MI`Pt`?@7oOc}E9nLanmfzsU&{z>R9n9>M>Yk%xSSoDUK$PkA zYPlkiyD11Q)IL~$KMgc-x+HYB{X7fNvG$HiMsFXdpr2;A{nj19XjjcMlRd`yezwcgPksH@gq)us;6-?^7lbwYM?>i;)>Q!?LEG#2tK3wKO3iYNcr3zV2iW=HKtsq zL+bUX*6~qx|67;G235|EZK}9Awx~EbTB(tZDyK#Zr8{GrSsWSdlH<;E>AcvY;s@SP>Co|m>JFoEAeTB#FD|Aw08&wX7Eh?^uofqs>gYJf%_ia$)V%U9Ouls^t z_Z7TuoxN@)HTpePS8dN>jDbj5ttcnW6((`eYVN-1Llaw%T*}c#?YF2m%8LEr#iBKa zFl`aC6L>U?!AAQwnO$xQz`iCQzo_7I|qP#(HdWOZYXx(CSc26=)_y zg;8-9=xxT6a_lOlM@7(bwn3-Q8c-6RiBrh1PduoADG)Nr+?tArUT3PUChkRtrq3E{ zX%fxT9lUsRDC_nV| zT40K9FvEWt?Em8yC9$`+t!<>T;70M1ceIgqxz1_MmuR9JagTRet1%A=q;C4W0@v!I zKAM7sDGCI&k{wjwpS5a274`Dr#Sx2fT-9RYlR6W^pa#=%@gDZYY`;t%O)>gF)Ol`lRTz}^SsRd{+@23&qSl<&5jrnbb3nb5(YhJ zW_tqb^%kbCM9PIo>TKWAw0h143vn}^NfaWe5x;wElsq9)=VA{Lhm+{PBjoQ%d;}2l z??zC*=Gz2K0Ev1M(5ST}4DI&7=;f26nH7wnK2N@tHSo|`rR!q1{^!%#=^l6y0ApLO zN#m)@zT)%Ut)Dd`ok>X6d*O|3S*VXzh_d^Yyq(-_;eUbu7x;IHf4JVkaD#u)hS9GW zdzVMT^%Rsj{=Y)&rKB97ixCKFM?v>Q7aqv{SaOkOdrFFrNzwH0=)a~c8~h*Y4uhW3 zqJy%ep?~aGsdSEmfK+8bcaiUm!F1_1o;j$;tcm$-4#ooxNM{2zvM7{rdFXp9^MBKP=7+OR*o(y?uxc zEX7iG#4cd@VOYA^;@$g?>xGB#g0qwN?@e}rmlQLfwCS_l`N7MtkmZ z=mWDP@)I*P{pa|{Jq-=r-;14i?D4EO6NQY7fyw`L#Z1vIvTpYWR2j<5VL&@zR%wzX zg)yFlLFMql3tHm5Tb8xBS+_&;`p`FvpL!a&&^b7e-oqz5xk6~~DKtBQAq=nZf00rk zn^|PN75UQ8_eG8JdPr_0Wcv$#-w(PlWLI9*R?;Ym>7-fHw9#J+ZIzNrNcxH5+7jY4 zSuofkcZq>6;!txRL+?0CmjO}>R8{c%=hNxQLj$#kf8Ak&Mn=%=4~4urrx5fUM4sn) zWU3@=`bMb8ZAIAF$_Z_QL_jxAuOv#iTT3X$NTEgft}!+?qQYmd7I1NTKHot%3dpix z_aE$(9f9TQ?&RIc;tXBUkoGOq;^I_ki2d{9$yxqh0qj%%ROWG$DT(zcWX(=+l*OSR zk3D>r=1^C$PA^^Y;F)aE;`myIQra0xdlb;UV3kD_>D>qJ>f!wJ<9a}!1?!DqQ1VZI zemcuf)S`zd^`gpwhdLY~JSQh3%s9&|uTUpb7&UfhvHL158w(7rF&7dt^(xqkVC{J3 zE-kun8(4Qc@2?$^L(F1xV^_-ptkoQz`l!4^rxs6K=C(u67<+wABmbi=CC3tR9?xd5 zT@gIjL>WxLbPUwg0Q?(a|EOfy{(!@RhC((R0+i_+SzGg5}q@N(1=^XFeDMYr(ndHMp`e4N-y1#es?||Eu;db8Km%rf{F^@0O8{z60peZV~ zD$iPTAp*1MBogD|{B;+|REikV4>hgUGX$z7yeM{MBXkD|TC$xg>PnpQUg2LBCV8*9 zh;9}Ysdb#-8kFa!!mtKwJFT<}7~1@U1SUV!9XrM&19nbel-CurSRT86rQQDsyMoI- z!>y03V_8T|V~z6m>LhVul3CY=l;;tDL!!`ucauoI3_iiTZ1B8@=>26e{5CCrQS_F* zirG!uqIp~ReoJ#fV6I|@+BR-2OECk#gV1CUEJt0xJnj+$N%NR9y-Or`NHAS*v3lFz$CmIqzk<0@5 zYYlVi+U-OqVRP8|eG{Z}`d=ODlglS49sRlWQ}R~7;(v$#u%<|}r{tnf8whCn)3rij z$H!c4NVaK7G`dh83}1_gCv&*r904^4XqMS$JD>^_tOx}V>jliAEf=N=&XB%9cZ-%I zlU>{9Yce94K<8EnnH_qeDzq-`2H{}+@hl{IeW}u4Z^EK5A%?K(Lc7*zdV~Eouk)uQ zcP=nRmisuMZBk-s<#p|pS|RoHlw9ZU-+$~dB-^e))mN}s;y&RiJ;4!ROB%vJNis%%ZcF2@w)mP;@2?w>MqgHgh{hUxu&=zRp?LeM>5@}D5Ew>-^(Mm9j zM3M(C?_i!*$GEx7L^VC*3*C?@g;NY1|iDC0hVYe?kO4YtBNXL}& zV#;}H$3_{p0S{bFHo%mw%SOobRk0TeWuM})D1hPP{~s__J~^YaUp$~7ko>y@ zJY7NPW0c^d#D`nV$NL-1N5h+b6p{q^m~??8btis#_;H!E+++;+JO=VW@~nmhO`$^< zwDuHP;gTY;!(h+lCJ8xZz1xadh30|=kbKEKc|#iyJ`tPD5soc;VZSW^TJaK6nQ8aEMYpiT3g<3EiEVeV6#|gi5hAAym z1(J^hUh#7Y4rOeWTS*iwnMenhgxr1HbV6W zrG85Il=oVj{Qkrwo7M`;S<_lyFp)bJP7R7AIKT*ba5MmV9^RTzD^Jn8Cgo{79xyfN zeKXL|VK}U-z&3%Ty@|l0s!ZTErOg}{C7~#WlX^3V3naY4&waYX^Y8E)M~D}a@zr4% zp7YCF!>J&Pz-aj`b7NIPQASAL1nwISfiIu6B8nIDfG`^QCqg4-5g!;Hw}jbyie}4| zgM5X|~Ajnb$Q*{90fuHKQ2Ks)g>Ue_EH%_JYd4s>-}7m~qRu$C}D6^$;(0 zqc#)q`Zg8INBo{_F8IC;mIJU1_Xv4C9bqiFG=bd&P~sY9x;PXhq`S-{Eaxv;U&Ib? z&OuK9blQPVjqkP>WzX+CFgsD*Rz5ehnK{w!#Gvrkdsgwoy$0SX^`@r0k|<2*PfE{0 zzkCHOwWX2|pvDix4ka#` z-`%GFE3TsNHvfxfk{Gn`^P+$!@80dn8;{ad=*3=4*8t&9pWB?R@l7 z&OAMUJ5wYX5^_w-!80U#O1XFlvWo#PqlpdV6t;&{xWX(a(W_ zS@L9tNm;6vc88b}EniGbT@mp4~4?IK&y0ZgH5W(pu;Nd z;qTs2F_vt zfX}@yeQxkg3-1#R9=iFwxNoaB;g*J`@et?YX=TuQia?dHYuKEfcbm8_&JG6jP%PYw z5TLY-<6!yMEy~3r3GL3)Bvb$+t@6$?_OpNmk;ivp1!Dw@#O^fW_CJ3erYQTX8G-wl zg;-CMM?j9pomeRfcA~Om*7l_=tt*tFxvDbK*(fVZ8}apWQSP8m!M7sX5{$WeEawKaVy5s@?L6 zB(W1~fBn2K7<|YZPX`l)&SU4pv!}hL z>xIJOQCghhQj{PKgwu%_d5$=ooG&|=U_2h026!5Fz7@|v)H*81ZHKwL1`%EE=w)b23$xxhEfZS(W&@#! z+>m+OV!d*e6#>UdE=yff%w%Wb z4(6H|v2;ptT_eTg*ia?#Nmi)W6HL*s4jE2nwt&^}dxbv#Yn`kgYomAeU$%hbchi6j zu0e2%M8K<7&h>=HB??our_e1DQv(|F68f?xyWhF6Y5`POHT$K!SiumECEwc!BTLjw zMhC}ywxM@X%NW9=VTt^1D_j|IFgX)y<*5tD2WJJXdj!0P(H1udw4QjeN%o$(WMsyf z@6d!gVFMPyk}KO;<}0A@exUJIfE!g{RX|J+`SLZMfqED`!{c7=dl-Q?POBAr8-27D z?~G#Zt#}kHa+Tz<@5speNZ~BI_BOSA3ldSPkUj>oh?5m9GwngCZ|Sc$>_wL%QZ|Ov(vHN*nqu@2v{>#f zcq2;0`k_Ie+`n0*v`>ywT&y1}O$60isJ15Xen_2;Z8m+E;FGQAI>~|viOL!7|dq{QGnM0 zL?d!WwBN@b6NAGAlKbN(3pc(oH@-19z8T+G9qX)bj^2GHi7D6d>onHY?)^GbVn?Nc zdF9t)=7EA)-sRmNFfmK6zFb3QH69YN1C``qh2rKs34nDF?_ME6Lmuw4{N46@Li~~u z#foXwBpo#js3op}EQm+plNhzZKaIfdeS~FW;IXI*R8M;Jf=RKMlIq9>fVaE@UymZa z`dUDP57#(f)@Kp`CXx|fSccY!%D^|VDdL>&`2;C|s!lq_yD^ZWR&?|L`vc@;D z?rjD3)yF4X<7hFJuZC7;QrsBxbOBw>qHYSoa5k!lej8;T=^}n^`*D24cb0)F|GG1G zDtB>7%4QcQ?sjoeqFawDkfjezBRU=x)zCQ79nVqZ{Gz9e0TTL~-0ZH*p`Ipi3`p~e zL4MmY_7rilt7l3%{?ObWh7S92jR5W(rs||w)8(4|z^52{HjUn`d2oE6Rk>Mvw_w3aHSQzA!hI%&{iY3cCLN-$ zO6*WdULWjb6h%KbKY%IWmm+hJ7(SIvYO>KJ3@I;@bc!OV;Ti#ac4PoI2I`1YDH!F+ z-g11sVZzot9b-v`5}LE@yFMxo?veTI3`5gqpN_Z91jsByC$PN~_^>%W#dSJT_exNR zGh+p=@X%BlPhS<-*oj=ab4OzXEFB4m#2ocX6y)(YyM7%!y=e zRv&s{y<|oEKA<1%La!A_|NfIY~g=HI}%AphvGnx*bhp5 z0*ywDAovBpyT%xIT&x>X!D1~fHNNxzVCk_d`bVgGw7_FoG$>ORXm`8@j`ou~ARh7t zhD8`4(6T@6ARvu)1~A0g35IBEfbgQkpxyj0p_%N1`)g6bm#@eFVMBp;NrsG(TVv5S z99%f-25s15m&@r^xD^Piy>Eeo^&WEd7yK7N=wyR`sGW%+nE^tg#E%!-16|-a*lke^ zmu6X%!=6z3BY9aU>Q51S5)Oj~1z!`EFI5>)Jk!FUJqX9*oXLT>XS$4}G_jRZDcc-H zE=BS(`GtRvm`ePEx>W((s(c+VT<@fqJ9-q|lE#n@MU28{T6YYoPY!k|8pjPI)^Uge zI)czYDGL`@kF0f%cK1kqZErlt$SyN?|$Ci`f@P&l9 zv>+Pgd(sLiInaXe6NRkBMP#o8s(BHi>NUwzgI=y#D0>YAomnDL;~%;rz!1fxMjkro zfH=9XyWx#VFG$ORz6p+^WpmY{U{x}ZfB}&?2UmEOHa`EpBiRFVR=gLIr4hnJ_;onX zp>d1`XuN{1Vb`FLC(G~08DEffG=sq z-~)8~gG-y2Y5?vYPi6<@V3@ouUoYG0P(u~NRGg(%>lD2k^*Q=D#hwIa%=ne83v36t z;*dFJ&9;J%IF0nCh1s1=U~wYgk0nq6E=0jNbR>rNe~v^#`#lmv%8)$oe|##M@y(7! zsq^jmSh(HM3t@18r7ULcu^&w;ZiM1;@yv@XPS`Td!6Iik6N9Vk8CbuL%U|g(zN=_l zM7Nw^qCqu=alc`Vk&0)0i;1XybhF>Y@@;>U;2JF~|2~Nqi#(cw#mJAAu>grmVhjDuJqfq01cZ2}o6ewzk|i{BT28O}CZi%DWL?j~GYFau!^X+sg^8&XAP<5lU^!_oFGvsf8einDt9tUjUNC zFn5ml7t4@n?4eR;Jc$a8*?3u`oAQhhvuckDy>Hr=MiJ5Gv=w@}@S9AEcVi&zD*302 zSwCkn&l>{|1y*Q`StowsU05z`Q;{<-mTLKyzJ(Mbr)>O9L5CFA$^VXkvT1F>zvWK3 zDv)|yEFPcDb15kY4%4FgI*M7`F{*Z>yO5$lcN zc^5Gn!=Dl)CQC>H^4Ae#!CRmrwI_mjUor#|7LN3yUHB%=c?W9ZSQhdSfdGs0w-X`W zf1SZd8gi5y3M-5t%MLMn6CK7R<_JcOB;pG2zID!^(ECp#%$^G_1{s9B>vE{o7#BPN z%hehCX4D82?&o3L%d;}d!SZ#4s*{lzWeLR?gGJpTtzztZ8}myS^J;oO0{NsM#v*a* z#F#@(Y9j~34Gvo~8t{d;G>XHslNd>3mfp`{^GzxYkfG-g$Zj+_nBGso8MB7=4UjSS++kk+vVn|7xW ztB$Uq#PgE!iJIHdtKfe6i*fmOM{)~vOtCp z68-LYhp=L0k7b!|+uV0qXbL%`2!?}cuaWdm3>HRAMLK(d@x1NS03o{FfqSAmc@L?O z9ZO$)J~Wa+kaGywZJN!%C`}4a;dKG&Yn4s}gu^(N2X zsNa~7!Zjz?ueeo6CD=pnau@h>TE?TZm4Lw%o@~V+QlR3HkFlR7>lv6hULv-n{XoJ6 zHWu)(i!qlUo@$Bql_{*EkI?=N{Rilc|K#Q zr*;&LoBFInfQDyg6J^dkMdhMu4h-+RnT`YI`B?R&Z8vRKlj7sS&J?6&G}^~8UmP{B zJD5^ztM+Ab3Cm`N;=($jYF)w8N0W<~bYWRt6QR~{B|bzHQI&i;R}0g|^{`G{bXW=z zJZraz5nHoxHicN)7PU|fn2v$m(5t8P!^r|&dXSjT>O3@EANS#G8i(f3Pd+@5*>c4m z%C5M*Iyrks$)hMVQ#p&m4W{_*)eH!UwUlH0^y3VEdo>Gwn9o_BF~U*A)v)Vr#Fox5 zq6~I@e!mWqeS8cL%V+5O&;o5a90(q!5c*qMqez}^6*}%hg<>#vzoFBU2_Cg9!B#U^ zKL$|eR$}}O9-qoS=Lu{w7#a=#piYxrVjA9u5sVkiu`Z zKj1!M`CL}Tj*QR1)b@pUc%RBG?hm&we*RXs_yA=8JxAEh!)P9aCKoet=(1x1MrwV$ z6PfhiAKROjt0moiZxd3TMq)isQ1eOZPbBHNn0E9J$d0>#bnoVi71 zzKFSai&!S$pQP286pD?(Fm%@-L2kv+Af)QliKFbpmQ$gqnv~=kMLdXtPLVF{-XNH_ zceKpX7T+KSv*sfIxW4=YWx%{qWMb%5!4&rG92b6MXF*8nuP%vnZ0z9vtB)Xp&q(@| zn8H)55*>-(A2vQUP7{@PhDN0saac;cH-yVMHXO<-k!aL8^w~;P5|6`1kKWcT2qPnE z(jSDqgqgn58&WN!hu}>wKhrQ%G)hno>n!!I1oXiliXD-?gn7v!3UO!}SekRCasV$< zMkP&P*;UN$B6?VV7AMJMd{$}ooXo12w3O3}DU3yld|t8-Onlg;CidCTBx2w^Ta0#l zxk^ReARuzAZXxN5EhIv-ka%m*bb`3iHN5vs9izVCF=S+}x@l}T;zhOG?j8A?`Rdb( zN8f@XWJZwK<+2cdRF=nGhnNl4wrqr2o3L1C=-x?K{G_lZbGq`qiB;VH93T^Pq(Jb% zB3Ht(V3jao^GY@m?9LUbM#PBPwN#$IX*!wxqykj6V?^ZRD=8)lQ8GPZy`xpKN|=AV~FDMEf`F>j`UzND6CiQX*j9BoQQam5jw zWPE31c0uD}8gb6frKXXx_dOez{^p`tyf}7yddg`IF}5ydQbh?e!z}a5$43`#VQKaf zqt1!310DmBEFVp%=rmcsCQlEV0k?{0Znu6x_{ka{v^`^LGbl{X+1 z<8BV@BJN&%8_g-R$Kq&{*dr?N-VAmGiqWyqo< z^tlY7FDneH9b6xVWO;lvMRm%xO5JFK_c{Ha*HKV7W5*cBzQe||do z#7P7*7ll;8L*?iq!OTS=Rd8I{O&wQuv8T#Wwt|^#L#p7wa-8jlGn0ZmR*te2%w!u< z1xJ>nivs4ITXs0}=y1h?Ug~et4tJ!V%N(6ac3v!%O!FWx1d;?J98%YpYRr=yhZq0E z?Em{-?9lei2pwI+i2};aSeSX!p}JnZ-a;=)28J{O9!JSj`S_ z-k>eDdckxOPRsy5tRM6dg-Ri4Vir1ol?0MqLe$#?&<*gHc5@Xu_Sn7ZA$fo7Wjwl> zm|2jLF21nH{-i)j=Jh(0iqvTd;z$5SGT_Y>A>X@+6_4G-g0`w`dtfQiLrqEY_{7D+|< zO#Gp7#ZTymfV_noHai)Vdf0x3sdlo(Kk+=Vh6@t9=m%cQR=;6l4Zp8FwB}^}*h3xk z5K*L;=#jMdAN5~A<8r)7w@9vj!b9LR5*eOy{iUhp^G2Rq8B(mW2!mzX)AdB%vd#JQ z;1FXiSjxg*5p$xWLuF|W4{44OXrnN>a3~^q`9$RXLCD9J0yS2JG#wfje0z1o#>{>bE9Tj#}VZ$s^6E4QRA#4el_BCaZXn3NUP1pW@7-Y z(8muoE=O-UJmF7W5kNNw)?+|KS4Wpwptg+MX>yn74uQ#{3uU9xAkbTucxE{SxSv9p z(z~`2EFbZ@Y`SVTR|hoGDW&6vw{AjCEUe7-x$rw?>0d#6%kVeEG#Lzrsh6-f>ILO) zD+r9KLS2aIA&n?%o8JX4Te$?Ji;(-O(9}XbQV&aH(>`hOC|LRxK6%hVRVzR{4rE7j zb$&0)j|6C*mf)(n%nBc|L>;BJdt*~M9;Q)#K8o`>@5=e;dLAxj(IxtA_Z+I@#X#zw zBA|}A%b}0>+%ikqy=Z$mi1#t%l&LfT%;<4GFZOCZOlrYCmyq%OS12b=AV?Go`Crp9fkB~G;V#Blk4rBWo8ZkDr zVIT0=o|?HEf2|5ES*k(VEaGNt&HAdN?{nNh*%F^MaTB7fEW(hMFo;WpoQ{Oq^2{r> zg0FG|lP?UbBXA;v9#%g7;fm}YX0l&TzO>3ee)#jm^7pXtkKz}nrxAa07W0db5q}TU z;+X$%7Nvjx?$ap$Px1ZF-aT0U!{X#2y8mg+L-`*@<&V>!oIZ@6=VA0b52NRa<3B|_ zK3~M2evEl|-ncxAj}N2g_x#^!S7L$x@(FGin89D>f(|NVZ}7l@*`~&ZeP2Zm`-t|)y%HEHjCF0@b_EA|+1An;~n$7#uH~~C- zoZ-o0=C&VZQK+bXRB`dmPfq($MfRhL>_-(D$A3DVxhqs}KdSDTRM3i|RF*e+eK_k! zuPT0`#m9d1>gMjXcsIh&axU$sITW6328Ab?OZ(w$h+g!`r;}#|XqgZ9cn&E# zNO5)=r+_>>@VW0SOIbog9bI4mN^$z(Q+$ubpNp3WIDPj%22TDwi-EUPjMLc~&hNo{PiigG@#Y3}>__GoJ=`_9`8qs3>Y8K;Hvlzdc#klGh z#N6z6@iw zud_iYa)2x4!!_?yD9H^1f>_Ga*Be z!gwoi!gms?^S+51`7%eXDw?iFDM#kzrpZd2%R>DjNUcq&{FmZY$wESwfIzBVlhqn#%7#O)tidb^MkQnU2AaAYY*==FxfV7#XH)@vrVYsiBZw}|2G zHf>-H(vyRXDcVgT+~pl(tFmVC3Dhc`M!P9=dykg7kc!-@p;Q;cRF8puYz?ysmWbUFfQ^cB0#uLESMDF^8GjsT5x7)86`cxUI|b8LpDm!(Bkyo z?4o9ec9VtHPsc#0PZ>DfwGg&8bRS5S5Gxc|YR1BEVwM&e(Y1V57(Y!Y0qgWi5iG;! z{TAUve~Y}>i&Ynx*)HO6L)WWj2!=+!#&1S=Sa@H4zAy%;;i(N1zY-gBmu(`Jj{z^Y z5qfhM^Ou{EGd+!C4^!!Svc=Q;gAYhTN zms!N$WTR+tSQxkQ!dVcSaFk|<*z5GwvYSb6qzCSEGMxWbx!78b5f^*hh%3-S-bIAA zOc?e?Su6_|5(_nW3PqmuLv)@-qiS&jx~%_(W10oMpVKJ~S{n$U-@em5Z)Wrq)C2jGC+k4LAQc$e;GVgg z9%qI-MclJ3K$u{8=Z*o{;t8tZe>5ek^*$8rnb*WjtJg$k$08uVp9c%Db?Lo9_7NxN z8aD5UVLr`Hm`-v$KU}Coud}< zp^e4#fJd=R<96L`+V83VrT{%0qMjRx3}dgA<`vIz)OZyuc*6xsJV|(CY}tvJC1Og7 zxMkvM6n27{-X)6doxVSL$6Y0#4Kca8T?n;w?WaFKo#o13=kMQt^fc`gX-Y*ezdr~m z-Als{aD92D3K?Xc$TAO}$vs8$g)$RPtpOIiwi5EH^`706+|Ve3BcwQEVn$Q+i%JVWVF)Ce~fsMcL#0MA8P*Y=a0gc#3MnjcfegLw-2(W`SwS!5+*c ziM&ho&CRvr(ujW;@uZ8>dlns^+2?pjU*bB*hF5JMC~-J*OosYwoWf}>(e>7e*O#K| ziavP#3cODy(A5{~|G|T1=a8W%4j$Vdc!HfQ z5jglki}8tvwP7e#+Oa_X}b(~pp=2|`XsV+#_JnYsgnl~l-Y3SJ!n z)#0_hPp=&NB()`{#c7BYYEDncR__?prxB?}gnSPUbDS=PF=B8MgDt`Dx=&)URFCOy zSL8ea4RtVsLWv{ZPg|pxqg)zs^p*zuf=sUbF#g$sSc4`QAvb7P^HsTZC+!&r^`X!S z`oyuOjC~U{vii*?OT#Gx_x2XR1g10L1Qvkq)159+m2UZmX)!o(9_L4m*^(pCt@52BA>QOUM@vrqo7^N=qc+Kc8fO9eNgghw{~td2>{jh+&!Zj$$%TxhHZmF9MEed>02Tp=u76?prYs ze|Ml@-BOr6d}A3>BWKF40GY&t9II8%=&ZsyN5MGsT($={jfs>Q70f1xZlf@VRq{|& zDT<^$wgJyPMYh=s7j7cd%2O)%Dr{|Nco4%)q+CrQZF!kwg9YBQufw9UM?R?i9zLb^ z8H>?(XRPs;tng%$C^~KkPmViJJ|9UU+nm2o% zrFjWcDsk`j-i5iCPwl1F0%IrOjF|022E1>2R1$-!9?bP{Ldy`JrX+Zj_(Cb#XXx4A zE=e-IBwJt95!_QW7c|Cr{sdf~FWsiXsZUK=`ZSN!y|Nr{%Jt zi_GD?$>8%xk?Gv>OX*)MHW<1_lgcP=j@MRgi?24j?t28$G{%AxXpC^+O4L1aG ziOo|DthOS$9YcI-J_5(GA|}esV0udGfxV&iWGx^h{5(P37{Hmyq)2*nVsF4REL$F) zc=+N^65s~f1kA_4F0#0h1k)Pq^towkVO@bURVs^GMQ!`v*-V94vF8~Ka=JhCVtC_! z(0PbY439`@(*Dh$-^yl>+oCg3B-mkiTq*et3YMY{Y_wL7;AjDEuHSX>8a%q_H&K%n zdX%SMmQG^6;dDE#VjPe1(;PM4ihSl_CO7sEGyjOk3mRf@yABpm0Wf<30lb5Zak5!Q67i7}JH{cDQDZ)0KLz~Zwl=CAoS zdJSj?yli$+Gc&tE0Y`&(UyJ>?a$(pEko3PtKKGf(=%b&BkH7Dk1e33PoaVN4S+E9* zW#m!Fyym*g#uzW{y>nLk=0(+M9Kl`u80|-VYS03+`tAQ1 zb~9LP-YLo=GJIs3&zzm55It*f$wu#w#IU!{smUc%uk-NTgZn{axn$c0K zk2=-B@GE82LDM6`;#21b0j;Od^90djiLtlm5U zRm2HLPENI1=Gzl8pkexu-2{SEixGqqJ%C5(m;D5SM4w?Ev4KKOWB4@rzU&Hkyka?s zrQ&HqnRt#OB43Ga+UUYLQ9MQausS&wb+R~q(QK4Gjfz^=9E`$@D_7aAVmE10vjxx% zd-G9}Z>73W+y467HK7A%9^+#vh&EQy9UUn4Rnk z;gm??VEot%S)2P@wp+c!Kz6Ip=7$ICb*AJWS;p0hF1Cn#Y{?Qn3i9J*RM1*&3JSj> z*RmGLW0v;(g>J}UmX-&a9g2Gk@VP2GArB2o|Kg@m=x*j4nZ#vk46Ykp@w*NzDcI`1 zmXmj@^|5Mrg3Gi^H)Q%+P;#NlUx&WZwtq?c++%JA+m86ls%;9-$#Ebl0LP$gYt6?@ zQQaenV_5!+zLltuW2_(XY%#%KAjC5Vw{25u=3$bK~B7(_7X!f!gTTgd}|rpDEs1)Oa$*gf0G+L0HIw3+M_97ZylE~Xou1zFYvo<^Dk+&J>R(Gdkd>4Z_S?j3%<|!{b7TTM8PuuPlo^SLQABMiGaXJ z<8-g+s!Vqc%o)nL^khT|CjiqZLVeFgT-m^%Oe8kNGIuEci2-huR!FFWV|;VD(__gV z=^OG%+bis+Hg_dQ!XoVw&6h(?lenW16Cl_ZCZvm5-mK$80s?}tFR^PeUSy#>&{A>AjR`L@x}SS?;Y0omC<4{`GIVs5y(yHA zcxUo>fER~lZCatodGV_3G@|G51{Pui@3TYWgKI~8eJ3(NL2~-G7@jbSJu@7SZ;!^@ zMBefgttDiAKs2ZBSRccczl1Ft4!vR^vnY~81ay*21QVHTx!tjiVca#Z{(IRfq9oN= z`l4*vyl^gsOCDiJsBmmZR@pPo3t_RDq{zZ|(CMkf3I=h&+zh4;mtaN@oy{K<+v>T( zBpT}l#TI?MKak@iI@}DDW*yirj#B?rINaQ2Y<}uk6vsfj+4TpZE4Mz)fq>=rWsAg@ z&AB6w;lv&7VJP;h*c^5{m>x3ALe$@hhS}#jBP!=$Q*lV1zjyF*4#?r@)H9iVgYvchl!i7aj;3RQ9S#k}^bmLkWt$QZ@^uIua9i z#98KN#AV^UiXq`5ZzD9v%aa+e?9a*k)&Er+)?jr_F&Q zO{0i?aB1LSSdSv1I?RnXMPSGdVqkUh6W`Y_W&(_2^nqIzgW=E|Q}iUKi;wU0@N*n- zGL5+JOH>|9D_dD5S`!PvO;(%OqK*sfNBaPWldyoHjee60tif!h!3#0(6Gm~987;ES zyQ4|7sU4PTHF@i9#^{m8C&K0dby05a@=w=CB{T)9UHroRevo-B?eHBsJGl0$1tT#sq=!vLg@f_|oS|U}my^zb@Er%odj0EWhn6e&kO$3@QinuB?%&&Quxf=iD6p!k1mqlFT_wyf z4o2S`ii^cx8zb2mxJY+Qpe<%1Sh5jSd97~*j)QeLO#Wme-b0QR90Eo*;E0l)?7l@G zn6&*t4wSgbjovOAB#nWrSBj=xM6EoP>3$K;r#02*f||Ch9b&Nz7pVd{+4eL*k>xI3 zcNMG|)-J$myj0gBFr$a3p(y^)V1drrsrDxWdBmj>@}?G_ZS$^#oJ=v$M%)d#NEfE} z)TCMI`u`6r{h@1y5J`;>mTukC+aDu=wn-CmV>wC}`vuq1O@vO!McEibk*{%HbH|z7 zGLA*WPdDPNiEx~^H8~kk3HvEH2c$k~btn<{YgP-!t5qA*&S0AL)l(7SH>z7Nd}bNl z@T5o7y@#iAQ{vJ6rHNS`jp^oL(i=c~Flqlb&S^fPnMJ8t$E=qvGNw>D z(UB+usUOE7IiEzqs_A<>L0NFZjbX6~JQH)6LMoR$m4MOw(<8BmqcOOcoRPlcPvOKvK55RWT6cVYKAOl^y?Wpw7!5d@~agXizQSFg~-*~f69J5yHC;oDA{U!c( zdfIn?Gf`=LSM*$>5B)*q2_9i0zWqoioBSL^Et_Y^m+2vbV?{~R^cL+*_JFM1>Wyv#X0J+GRkc* zfzn}jWzIr6WPFJ01!Sf^A?Cd4Mu5HlaG0L?P_k z$IsMY!s`zRHdY_W^DI1ZV8k@Ykj8&{0YX_#;pChr*pfB(!7GJL1Ie4w=32a~AkQ2G zEoz*S=d?D#Df!vL@;A4ZL+kG-0{&=0n7ml_O9~JB=DmyCsPo3T(gK$Um>1R-`Cjsh zLHWkeX%FLR4X4{??2YAoKw3d0H zQwl8NT|?ULN4T}N!K1bbBEF#>Af z=b?lz6!qf;aS~Fugw_D1r~Oe84GVI}%DQA`GT zq=%1)&q|qkNy|Yk8((rRHrq6hZ#6sl)z-J+pI2;j< z%*YGPBYx81pA2Wqdvd;U*fe;q;P%Ix$YbS1?*l3RrlBvU@0mhbViMgdu~Tze@Lh9^ zW#jyr<82&JaPYg@U7i}8n zW^N%nMy%x*J;DUSRy9Q@@8my5-R)74wOX_-Cw^UqJp zwlLZWsX89Q@~$O0Jn#Yno+rPlM7^@mmM<88TB81j^AM$I{|5=`)G8O8yFu3^DQKN- zw_!AjHhd&=KZ!ve<(PxHn2HsglM)xo~ zF*wX3jzxKEb6Pf;4rqy06ep{T784)c6qPtq5tr68Woakb$;^wD>Z@5?Y= zAOekTs>r#CU;RtGk2IK`y~npvvjRGp#Wt{Ql85;ORMWc7nM=SsWxq|r;)lOWQU5kJ z6!N#p+`r`U!{K`RNF=<_xfn4?X?9WJ)Bk-L#a7ff!G33%Zg-?P$SPs3C5)mTVZ_@{ zlBd-OvYF2rl#K5&pW@MVqb4yjFc}>?cx;`I5fslfFHEaxoks1647;{9Fjrq>cagow z)PCC`!k$Nb|NTH2;XifnDv@*52;il05Xl>yy*IFI@Z;5O+p`)z&WiCLO_vanbrckI zknK0#(cIr4f4QdST-F)V#0;R^}{w09mz^#ALY;PF%9U(fZb&@ z@G6|~7_^^4Y^f*k*;uxb=M{m&Jwd~cO=_?a9qRfGSnCe_IHEX$v(LmyHWMV80*~r+ zjICxcHwL81#FyD3i0IFx2ov1Tfo)Ze0e*d??=k!8r*ZBGUQZ!v1Y@wDAUbcfuO*Op zQ2A2i;!V#b6X~WSF(!g$Yb4a}?zZQ7T{^k(9C(>Frqehya#k$!FjZTk^}glOSHsm2 zR|aybu>KqIswkNpq~CSS25(@B7|RabB=Uy#8=#e_oIjztWw<5awv}TAAtq@}-BfR@ z79~#@Tel;Cr>O9z6oBcgl35_3U4JiLd@j8Z{o{S>P+um;P~;1Vyf~oAK@u*cT?GQ6 zhxAN31bo?GARZWybVJ$?NVEqEUh(f2{^2Ng*r19f?Q=09vLBvdBA&qU6(ioC`t|-2 z%Z9DQR%_Ylc*=oug!D06@;~0W)h#EKRpc!vrf_G8sAy-2kThm%4p?yKZfoQ+NT7bW z?D!DoHtleHf*W`7>5}(i?UElC-ccos_Q67`$eiDT)~o_4cReWnXV+>d2K-kdB0AN(}7HyEE@xzW#o9$7=h-Fd5ooFAX8%LTCwGPe3P6985c|;_`NF=W8}rSWU|8= z!`V31prnjmkTol5uod3lo&KmsvpFs`pcdd<_oNucLsY{)Tw3maQ>^0H4>m`*$>QV5 z`#%i^g~r|~y6_$l`UtBd4lBX(J2pVWnL9M+#^S4z#$Ub z#RqFf)o(L0v$|d2F5oL0K)jDltU^cf^Lc`yJ0AO%>xGd1ddG-N72z~ z{_)4Mk8id4MPuDY_l2m?Sg`djhV7&DBzg(!0&6kWiAFPue%gkEyW4&-FpgcB$yxkf z$;Q2TBfJATebD1?Wn{pXU&{o3)35o~*4USrM8!z zN}D~lWd}>)JyR=wZ^^{%$)rHk$z6rrXMM;CM4Mb=@cNP( z-UP=TjtQ8Lfz`f<`1)JBivU*c7^Cp2#!xll>($uNGHPSmITR*TbEr#avykyZ!qCV$$SO4a+Nn4S8F8d*l+DF`uEfSDqS3C+%FgKGd7}%#} z<<;dmYrct+)4`EGgJP>0Y#0MOZ%o}8!|Ezog8PFz+!5dqso4M5cTKRWxETly(g0HA@#wLJqU?hTswcXh=QloRm0o&-FB>#cv%5#jQ$e)85Z}vC!cr&@>suU z`UcNSIZ6}`Fk&vTU~&YMyp%(O;Xm)+y@Rzs9=#^Zd!_F8sR#3~_bABWV@NaO2ijp~ z@!edbcuUa@X{AUPajMjTf=h}OmPsYlv*08M3n#C&qXW}$vUW)_?w_d^{OMQ>>Iqnk zW^*8{H)D3)A-~=Vpi_gpY*0O&U_6(1jbu%&%z0Ja?>gn+9pVTdfQ|YI#KRR&`rT}2 z5G7muV-wg=^%v!ijmWchq3B$CPPV65%38GrnZ9p3vPwkzNqq(1yuGpPm=i=M8&C|B z&3Vb^@H9qaqhCv* zLLj3#CkRRNhYN&iIe0p3;s1g?h@UP{za;qvpZs^Cuw+COI0GZ9%aj`oOM72&DbO30hAO^?f% z7b%{@m*<(F=0tly*nPygKvpD^ zEesjJxoTew_oFkVCX&VeeKlWix46Obj1v#N6@|-Ypf<7b4PZ?qS!>y7EiqMdP&Ont z$97y8dRd$6b3<1)UuIr5+^ihDJsjQfF>@@2*Lxx+Yr8ih=!@d`|CZf?x|0;yuLVqy z_GI@cfPKtDW4wS~mOf~I5*eRM(pIvXy+wgn6GM%WEIwVc{XSSh!J5J|WL+~f$CH`}X=4ccZi~WuqZleF7dvx>MMBR`c?)@ur=Z$OQh;K+dIZ4;2U8V(tk&rqAY%dXY032N)%qd3g~s2r|k9xhZ7imWh8g)-HK55;&Q% zI5Bc5-3CK_%&yvg@E1K4&zeYxJ)3X9&NW9fX@|5T^?037pt@y{&WBF^_%eir3)uvd zkT>2!ZsD=m0G<~?lpRZQyCVWl{CFd%9`Q7nLmRp%twSp^oMl08)>hBZK46{+EzYr- zOC%m&%B;Ar4l)aXIUv$xp#xpwz9~{mn4+lEdDAv;b&IU0Xf;AQQ|u9kNilOEoE78~ z$Qp4FsE=8{w-)AF5>rnh6;zu<+(bIZngI!ZP4RRd&Zf89mqM{HAJab?w9MIrC(P&( zM^79IW@?9L-nPW%-qT{NofLR@W*u*wggmq_@D85R9K%<$^?jATiRdX&=Y5Ys%E68$ z=A|3DKWvEEt%T?#bP{UU<#&{v9t<0VWuTOcpk*U*Q+&d$1+#1f5C`;G9+IX@H>Uyd-#2T-x>V=gx|*jm&~W9 z=L3G*6vBEF{+A8@-ySN|2fspLGcwkp){tO%h5HC7+odGN{9RVnMIj#wU@s#c?sbJ3 z^6iuaG=M_IZ5)7yqHdoHj$yq;pi8J?Rw&}lV=Q?7pCN&dGtePxv|al{L$t5fD0$Dos1_RX@WrFi+7w;LbrWc= zwr{!9O=6R~Y}xThEA+}+J;P3#LbL-#;`zq1H-c>1TP^uv4L2B;4xPC5baU((9D$zV zlOF7(+wD~`gf@g-3&sbtUb2~#u+=J@UMM2QE8i@}snD9qBv}N$lGp-nMI|{^=kKH% zzZaB5Tn{Hp{QJ?sGzPjy(y9S|V$^0O7g-+H-PHJyX}4Ppa1#o{HPtZWezo=@LhFy8 z)?OrTeZJOHvXQQuhu6gv!^|E|-=CbketPfoiZbHqV#p+qc^Yz}!yZc2O`tMg582{u zy@NZh@fc`*vRHqBU-#P-iw|cZg{V1_nKEH<%B(!vm`9NkAXhzmKo8Y`D7%_S)U+Tm z-_l=iLc$C2!lB4Jif>$^qSAA;|i0`12b zDI9{S`!#n6=EE675nQIw7%qOCaJNbz67p5w<9rw1V6%{KM)1^LI)h?X#!vJl@;2@F zcrwj-@U+}KJZlZ46)jN&9}La&O<_i@In>|?>qfkv07j1jz2ttBB!3rjR@e)VK`D_tcOycRouX`h3`Q%d%4Ex@t;yu7iHeNJn->qJ0N0dTosHnM5~Je z)N1!DLiwn3HVOw~81UvJRViwW7jvMN&o5x^VML3rIu?QEG_QDhGLG_f5~0@)?NgWT zDSq~G*=LIfcc`PQ#(+NDn$a~|WqX zffbsqsI#h#K(c!;oUeui0C>=1*=%sJ`?(^Jb`xR< z-xRqpAHm{OBSy=J!`A}S{=*PmIO1{UDWprQfljC3N?fTTg`Rq@UrRT@A`*Ff_>l~) zhv)=^Qe${o!LktvT&i=x1NVygM;^lyG~l%L^$2^Fg;ZgKW8D=WuVoa z{9O;zBjP!%;2o`DUI>HI+omAtBwq31iU5~8DO2ZZ&O{x?bOvZQp%Df*G(9ZB&&;Dx z**R+9TpYHHpo=D^j0l3<c5Yn{$^Pv9Wi#M0A_g==g*j8QAuTdGU8J)`J_x_ZsX3!U;(8dv$My%>eusxi z`!Xc}I}Zb}Vjm6@X!r&ISV-pRV1;_ioEhy*ly7+gz|Vs7NE?~D8tI4E6K`LLXFH3qsE9=gO()X@$UDD zPzQ*OF8w~;jq0HPdwya->0k5vKc&O(UC4X4M=MZ*2NF^Q#@dTwBv@S%VDJ>n{=|FO z_yiL-u6&BUAMqoHtVfT!@nOjvdO-Z%cyjHH&>d}!K1Y(=G#m+D2L9?xpwT(;C7l@u z%+Izk@>tv?W;x>VV(gUB1nW5F_UH3_R6XMLKznrY_$pXPlBedGa@xE^?P8h;vNR9! zkiJAEi1@1~`|gsi?IK<`Oj3`y`V%ZK0}pfU$CJ|&E6_mLhd(FS{mG}r*D1PKyq`lq zoXwyoXYU@S=!eD03<`IfLE&yQ=;_Bf6v{A{@8aVay{`JoKCTm zvzc@sXVQI|V(;I5iZD_*qAzFW)-m=^%(C8H1hIyF8j9OM}^t8xi_x&)1Lpr6!+2S%m% zZCs0#kG=`d)5ff2c%R5aI%$j1E@t_VkA%TPk`b?RM)=-4e-Z7e(;`{OTEdP48uNLT zr+cX)p2VlHBDLJF$!LPDi)pIn z*6oxdTY-k(iLoK{?WUNU!HN-o-*zo5N6_=eQ(6UhUjn%;`&to^E{dRYxa>!lpEr$% z`pR$*#j}kIGZ4urQG_+UJnddhg9U67hr@+IuID?OQQu1U(hLEo(bZV^Qs$qFZ4Y4qaSQZA5 zDE6aedEhlHj<_K)3?OmNpQ8KXKpa>afz5qSBNod15SKYhd~*5_Kf*)&2oLciM6sVN z%Y%DhX;hCMFe(O)$-Bc^B~mF5*X6#ARN@g%mc7!pxJ3J5kb+>s5ZlWFQ(u z8KMS9RE=XMVlx&YKxC@@Q^x|uo(4fChu_lEGio&tGC8p z&l0E%6qZ3@$6`SBBmsCOhZ`4)@Gd#5q=k1QzFyacBgcbJX$@*0ggHiK~jV2_>9}Y%Nq83H!(vu|X ze0m2z#bO>RI#eESDf)Uw5oEQh89lGO4UD1Wt z%_4Em+9qzXXTlrblFQZn7PB{MsL^2A)1eV^XKkiQ##5*s@sQ~VSxt~~lquonOQ~>SfU~zl~b)VpU-(sBzqDThDLSLt*iApz7@{}Oj&XZS2NgP z=#&FU0mCwPaL~FQ+7>tShaQ4+5-Emp{&FaP2 z1?@p3D-Lcy)8sFaqpc*ELsvCRWrGC`Tqr9Et7ym6z3SlMPT!G}7i0Ga>MPJ_En|f? z+O!kz2Nh54X={ZE+|g%hbJ#LbbHL`bm{tom#B8Cilz!#lO|C>Ywrj`PVUrcQFF1rA zf{CmjysSBu4{dNfpWc7o^{XI~08&B#Suo!;xa$DIjtgqX|4BMa20gCj4M% zYL-@HoN6;h(uiXjL?Us{$mh2#WUlTtA`I_nS4z*>QGZ&NAk%{^`$*Oi15LG)M-9nz7&c@VB3u8X*g z?wgjbIIoa=tlZ}m)gp;Y>3>Ob1H9qyMdfh5Od+2PpvXH6L}fz+8*N27cJv=4x@gRI zhhgoA5(9S$xqhInOJcFJ+x2N}kfCyc8$8A0&_A)%{Tqe&wL+Dnx|^O5t+#|VhN&nT zephsmg6D(DwIQ3Qw8@J6_5m99hP*VRNDIY1q#JgRQS`*;1eRTKdv&^a$0LaFFfkQg zl;2N;g_+OEC}zEQce0qnP)aIX7MR;B58s}K1crnew=h?3IQ;qH?7d0$@x9L{P#>b= z!!&!gKmo^_ct)Oi@lp7tgh7lfxv0{8vDgU5Q;;vWX{I@#I3<&PAgR$5jjA#vna(S6 zbAzDn%2+YtMYs3XDnVfJ_ey_92ljP~?^=telOEx5!&vD}AYoOHd(`%kl<^zb%(DtG z+qIHMq1}FqycoLPZM7<)1G{xQ=!W!#pfV~97}Xn1KnX*+V!hL1FBHox3xhpd2~$#^ z30Vo%3OH0s{{2+;RoAx4*IHj_r$^{V2>R%?x~M|@rky%s_wN{uNFIsg20obgdM8fm z2%ru;LcFZ2KH(_RwqvAn)N{`R)rBJ4`mf`TNGDUlB~}%d7D-! zQ(kyrbY7;gE^}t0W>i!(s-D57N-80vVFt~P-_hSj2^!wL|Or6&Nn!VCf>y?%aH39IUbtoZM=km0%Q47!bz{zyhOg|7?8=2h2n-x zP&VSbqOT7jIc+w6)B5{?o3P|RfNweC4>8NVJBtzHQr&=8G04+-Q#Y3`OIcFR-`mKs zOX0%T?Gwo}M+stVub-35UmT;Bc)Tj zxr4VZ0~5gEHy4PkQ;>Q(_Sl0LZA<&U7)avhzI{>daB_E$VeWvdc>LdF83rgum+bQ` zL){L;Zm-E7TbQ3CgSM_IiZVbu9S6UDq)Tz$P5IFxIW-vp1c~C%f ze@a->)@@&qQ?}&xfyKv@)uRw3>CI#<;Z-XH-9>1*jc{z`A-RWv3nr^B#Za{BVBAKI z+c{ErUWFm+kU;cfE6G`wOaXOHm}Ubd7u_+WX`>B^>(>tEKPY~rg26=Zyc9KN42xMJ zZrFpVn%l>dNtt26pams`*)w6#r?yO$tbuTj0NDyB6zvnm2x+ZENE);BA@)T<%>BOf zH1%{sZtU>7YDsJ|&D_sH><}hzM_HuuZn6`*k@76(!`yp#5o;mJD)};Xw42#5{#SLzXPF zB#4VRD=K6z5wRpevY3;Qcg=&GrV-Ih*t+4j1I=v@$zys*2Kd#7BmLG*b4cC}yfgHi zY@VgXp1pr;@nEKSj#SUQE@hHEq3|$nhCNen|4b*-VIf5)EH~9N@BSa^yRCdbW#JIU zT)!-v=j0y$koyl3@Nr@Agnw`W1?p7>nV%8jD1&R1?R!ps;ol{EOiAD5FnfbryH)0% zlX8H^?0fqn8-uhQL6(OuRkZ^OyQRmM7D;GP6enuoGO@sK zjVBE_FEt$Q=0w1@tg7{kM1FxO;^&H}FK?T^%$4t{!&^ho*l&^7?Hz|qhd=j{3@=86 z|24T-za};Omh4yHHhsmpS+}l%cxWp;02_exPE$M|#x8HiOyY16aOf?vECzDxE^L{< zCa=o|{@>`o#6NtuUy4^z_l1rmaec-F)j2IVi9G}|#jBXy1TsajR>G9vm2NpOmpdVb zd|fhvie^Grh8`**XuK~Q%faXB# z5n1Nwo(9?%{&ELBM$Z&MkV>qQI2qyLczIYKBIgCTmOCZX=cy{i4nY=CxzP52F( z@SA*(_hM^`6j=7@8}%q?!{_9T=HtBaY5`5~aTG87V+*T3CE>Yb^FtAmbtxJJuoeCo zwjXi0)+8~1?tX~6t4*U~lLox3ovf$HK&{8w99mYE_WBWkX#(dChS7eRz12(dg7qs6 zBzxDmX=Y*WsV#ERws?dbUrV;CEJXYE74#NE8x>p6D9EI~c!AeQ>{_O{D3F%Fd^$4j zCUzAF!b1D^!`lsluC4NXX{A?B}wff>>bUhxAFV@C-v6zQ_^3%XD3_ti`;D^ON zECzn`ga45;zD|CeJf}{P?7p*WfspE)JoynB85tQF84;Nv-oFzx0n85Xk!{z$t>NBp zf5V`xL)P-hJhhCyM%4v^bu5~axER{XO)YMIXOGUwEROSYkB9Qv!usyko8HC;w2)pu zJlfV*Iv$xA<8JA7p`0;qqlcyK^8q`P<-e?#TdEawi-Z{_7tuwlh zmN&jCOkR$XCzV9ybqT|T>hu2F{_Fm+P3VUShqfU$(K9a_`monLJVdUBG{|{c2b&-C zx&)celw_ti{qE8KEJ%_vi{6Pdw6>1u1JX1Hu-D6CHuBWmt5O-MENr}L7Vmx7wHOYzfRYxhx!{P41#yh5!s0sXVW&= zJ|}sXS>`5*Jm=Qx2h+j9BolKdMU41u3Q4U_J34eOc;W}@G=%4~UI*F-N1~p@dk>N? z=*s3L@OBrMOdo}TVG~22PTNW+k)Uq7^XAZl3qA0R0AfcXct6~7-}dl+SlY$ew4-#= zUYI~)JRis$A2{i(bBKLebiy2A4`O)^B5Aa(>J0+=1Q2QRmJJ2cVI48Da@;!?@ru{B+Z_La}1s2!;Ag*hC%u{-L@#Cr36*8dLqBmROz=JGHj!CdsPIXm?}1$b?ZtO1M^puBiFtC$MY0kV3|qoQ$8`&z&;W|i;H_=Qi)i8GD|Zd#cteyVB7@N9^+V_7P=0v@ zG%L4sOr93{KT&ZfC=Q>`@uM3V2W1QV*{0_mse6a!T5o6XaHY4i%bhbU8n?}KSRS*B zkS}Qy2>Gy)N65s5YKj@*2MphH= z**AuY-|`gx$$Y_37tO(7Ywz{0DSLdhe%#yLWfU!(;1iQ5opJ5&Qtycy(Tn=8(aZMk z3C8XwTTqOV%W)LU7V?7|_rTP=y@fl+tt3U%zx<*bRr9!cvbRTFGo2KQGJ8@!$wEa# zQEzqPR+M09jej|y)DZ@<5!Wv>`LU|a-jROASP0S2?2?BTX0%}A^Edtd9kljJ5?mVw zC;9n-^CBALHB_G_iRv2RB_iY6w6D!0vpqi|7<|L!&ekr90w$eroy4^Q_qmkjM7uB| zVjnwlGU($q7j2}MgQE}PMe!4cv`2F^tjKJLIh=<<{Ic_MxU*+plB@PKfdbMcp#&vy zDV1_4tG<^w2ou6R07cD|Z(Wypu=L`7me3&ySk4KT_rdXr_tH1~;-*&`L?Y=_n7{&X znEEbwPp-tXONZNk|BWv@k!9(?wnV@!C-;ikFG-BZBq7!D`k!p5 zDmZyQh>m+}cXO#@6ZmQET<_9V)%?7)zol=8ZPVuKKE18&pU5BQpZ}*gWav<>>Q4~ zx5$Zmc-qcY`bCnXIh))|Cs{SGO*;(UWxvZW1NY_m+aun#@~acg$gFz1JwEJP*?!#n zYtE2b_H>00SA5wgJw7_#Op^Nhbk0PPRMzzxE}hE>oYu|N^LYh|M`5_6n}!M)=XK40 zJ#?!|o@jr6bZEc0FBs$1c^x><%@aeR$=eBsAYXUgV-t@NG=<>F&QB756~n#DX|g

<7rVVwn|-g=`G7tS>SH|ORKw_vLvA$=X^g{K#Dt5Vh?tv=2g?kQJff5Rq{@VA z$s~_NoRx8-dX5rNyrtP`%VXMklKRSI(p*51Jj%f1Ch#b-9dy@y#c87zhH50Z9Nlc<4i&y|#H*cwV3>y&+vn@2vGiO%zq2FN2=TDTo!l&gkrVQAhY2B^!G&^I zhlScx2X!(#*n+EL(P%BIds`T3QH1Y84lYEWmr-l5MT&1>yoHRgRLADQW{TuKG1ZjS z#?P4C?-^)h{7QC#!Kw&PW)4>BE0=>D1_x_2uo15!(-t!_J=m-PYxJQ;-e8M6+77TQ z47QmXtx=I5=$G8Uhp`?LDjI~2WerO>+g#pCQ$k{PJH49QU zlha#}7?xUwulMpuy-MG19?uY=oCT~{bcPI4N`~uvE z95e4S>MiWH8^Gk_5e^oENAV-(P{i=}sB%`ZhbK)KrDDQ#x+9au%is})95Eqtsn}rZ zc#Op}cvRVVTw`!A&k&Nb7?jG@hi%M(xuzXbMGA-em81ZtrfT$Q8a-7Y86Y%O zKsT3xk%&1QXmblvzv9MkkcCq*Q_fK-fmPt`5~(5vPNyKITt$;I7UV#)sxQzkH4Euk z6!qw|AvIg+DvdZX`N!;BHIpjSNOQE0X(U(jQgdAWm7Vl6O`DshE#jE&Nz#>6id>s7)#-|)u0Nz)3oq5{j@knY zoCYUDNru!RwN&Q>PO+{Lm`dn{8#K34t|^#GMjT^|v=X;n#bt*+b{Y$ndN;LCk^9Av z(qyUeXgI~AeyMTx;}ky_kU9`?c7rj40G_Kfse_=Sc&qk`u?W@*LpteBjVpV{-N6mR zl@1`OLlHe^B-%Q;a}uOlPaW1~04aklQ6|%=SZYGaJ))1JTEJ1-_po-h&eg5BtsL@F z$Bd4e$(u}oIqod@FuQcFjwoWtNsw}YU^uP!hoyMzEY0eqZ5Eo2xC%|r?G4agO~*8J zdc+(hqT_bk|urWQiGhX$mv9u8Dxp-*EE)P`E=(m=@Leq zqdAxBW4=BX7`2>k)TnIt^g;)_RIy8mT}0|dRL$220fg6S*kUKeGEK3J*rh6O>BZr6 zO*l;pAkF>tG!ze*B4&R1Zs?=w=tbr4@oB&#QWUS z8MUTWOGrx@8gY#UcRHAMm#5NuCVNktGfeT1p*nF&>ylO4T^CO8 zcVt1Yq)l@rCVfDo9Y8d)B7HENnJU41$+&|&B{Nl1(Dq0ljHpqQ9t)=rIW`+TOu^wW zJw{fik6}45JwVjZA^Y<&=*+%M?wTZW&rUnId;|Nb3H&WUZh5%+Qv~n5Di< zf$HB3RcdCMmJm^&s?f}IL#bY-mC@t88J=Cs#LU@eY({X!Dl?sD-b!@Qjd1|;1-wkJ zF=gZr$MFuSO~cx_wpqs5X6D?PZZc#RlF^z$X3>dBOWmZUl#~qnd}gtuTQbVWayOdl zXBN18G-fPSQAStjGfNGh7AY4|w4N=SB;`bZW;%0qm(McGA_drz(Fo>~Nf~aM zWOTtjQ{`-$7<5gf-#Kl3xeH^NVWoeUDQI3Ghg;~i3abg00Pv5+)Nj>wk>`iA&5 z%b_B}xS?rE6-R&}od6H11|EtSHqh1|is=Z*?l&|&!i(&E=B){mu6-Db5VZS;N_01N z*fxXQ&`ctRTva(l!&bU3HT_Uo#2I{fq!c1OG{+nq9n#k|0O%ppp*h@S)hL|?&|{|n zruj9lIe?1TW9D&)yW(OatF@wI|36XZ@fJ1effyfihA?0VI_%VDEm_+Iq+=pmz4>da# zuh9(j7MqKzkG!6maS9f$JSKmbDhM;Y3 z`?qniavQ%zKXjNz-q2w|Ilx>^FzUQwJfSa$0=GXJaB#RNpSTGxzj73An{V^E?y$KI z*sM&qHRI}N6W11#D_8u@{ARS*>)aRZnY>9_6Cc<64R`}Ij}Nsa#X~CEcHypVrGoE> z1Gk4bK>J*1%!MXg=(q!|FL0rV3(a()IWDxog_gQdBR&+P6yW13#H}F?P_GLmU1+-t z?R24CF0{vm_PNlQ3mtNyqYl)b>p}%C6mg;HE>!A5b6lw0sYm-FzUD2m)v0@fojdRb zGY?#B8ng9be7rShlR5mpX)N5aQxRD2&(UvT!<@!z*9Cf8tGOd2U++FHuz5{qk#l2a z&on1i#N4ODn}qZ-u$F&%&GiJw&0DKJk6r?#uSJD77ukBl(`IIvBTt+QKtJfw4ZzL2 za75jYqwztC)P@PI>gEx1M~@v1a?_kw5)4e&KStTOpZ$Anu8U^R+juuVX|` zhsB+k^R}0fXc!2duSvMrko!_bqCk%?N~E13zRr}G{gzCa!)&}O=N608BK^C~A*OKR zh}SlQr@o!5XSej#7rvOwH~OMZALaqX04}hI=%T~GRDLGc6JD8PTcMm1%a&irS7M3E z$StvoZx$z91ZS!Qco8r-lkQx&0}BvT3UF;3z|{bga{x|*QwD!auYghxVr>J+d}Nk{ z9GI*^G7kWVGyaow9~NXJx5N{Ph_|@qS%5anX0B@w(jAAJ*a0_F!q6?m?_n7kVs^r9 zW!ly`bQi#FU&AtPU@lWPlcJ{x{AWkFsEzupHt>$;95uVV@8Cg>iZ zJE}3&b67nS`Zx|;TQ1!M-C+#?%fm}Z+J3sMTqi5kT}PM&bq&MqAl$iE*hJoTGT%;C zu&a`84c!Q1Gkq7U+%t;Gkss}(xrY(EN9pdPJ4Tna?$$WuZV$8XnNQcE%ZjvYB}|gq znNK^(>6j*h#rEze(HU~Se=pm<8ScgrwqSw8BSje!+Rm_k(vrxah4^k0yh97=QV51X zRB@k0cQ)M}bQjZIia33g&%Q>wmBjbbP0}4jtM?tW!TTFnC@b1OozgJX=A&F6!=$jE zjnmJ@=_iMhjhoVHJ|w>9Qv!%Na_pC)wbGD(eNr^wK4F zlPcM5%yThe@_Udp47Si^{)6P<04qMo(g(K@vxun}GsXNAmXcHq8J+@Xinq?8%i5)x+W;v~GgX=rmuCKH=8z^;=_71;W-4LwDouW-kFi|xJVW|3xsVwyo6t+*Gb|#bnXpnBl95r-?4+xzL>rERpCJJm z5}6^ZlVoN_b0)zN}xsBqF zWm#u=tkX`!-&0#3n|0&Wi!3YRu}+^?TerHtdPP-ZtYqH#v5RNVo_*oPvoD@)Sw$Wz z_?}s1vjla?#k1aHSpkpb1L9H=A!J#PatBkK|tiGo@ULUJo)zBEPsI;uhJk}*Q);7jg#p9Ln%2@S1v1{Y2;`J4c@mN!X zARef0tcq2vid}bW^@>#$jZO9OYbusE*4D4KtP4EWc_`3L@IT_d(_=*ucgB_V@vHA^ zs;HR}TN!Vxs;!))JdtQj8bousywMc+}qsxsbu z=Zsjx>Q#*u&67n<_gLpJ-c=PVu54_qufDsfF)n#GNappmb@BQ}sroxSR)mq}NxL^r zhD>I2xyQP6UPVof%gI}%F-p#lNh4OoZjCP&M&44fsPv_R!IHpT6eCRlVZ6RgG~}t+948lbA?PO=T=z6JIH^B-GFLSQlicomU?h?k^;vCnO~8 zlHfXzRsR34E;C~dakkFYtCowHR+ijdTU&GfB-tmap|tt(ikgc0TkC}V3mqYCnB=G< z{xcRz8$2Kk$rd-LGi{NIn#Sw^r@K1(fxUG`Ma_!ZdVyAE^#{u;@mS}cM3>B1UR6zeMCOk(%O zS5L}cb}7^!mGQfqR-BM`%wwH}sHTU$y>~ki-qIkG5nKgvTSZM%{A4j4a%NoD2>l=w z{ZCzTLd#_}Mizq`F21+CdPTgUF}o@s^jMdjYy`<}7#S39t*UrWw)T8mO>c}hH!fUJ zr+QoTm>c0*k98FyV08R{lYswKkRzTm*kLiISFb!N<1X}AC5$K?P)0e%g%Z4JxhU28 zxG2kpEMb1DY)z7NWy7lXume*EiZo6pI>%$3i9`*^eR<4L!Z95>ENiOAn(~pi>Nkf| z)C(fn(x|od*_=AVV@)-wM9Vw)mdeq?yh&R=*n012v_uMo9lvSa{9_!Y(86j2G%d1RZoWYj3 zs=9GOeASA^DmUd!j5{l2D6NnNM{ z9dQo-Z|@{CJ=P4wbgi~49VL2_$S{geh&HnD@SR+ zO*UuT+Qf7sLX*-tV^WA#iYXUssEaR`faOl|Ny=w5G}YDB);Gp0Kgv<2;Usc6>N&tGx2cs~a1nn1!{H)#~fYXPiW}nppE{SFWsX#Mt|m^4=N|0uirYP`jK;HY?(J z9_t<15pNRhUoWvi{y$11onem|@~ z%=M)0-{-L|ew)?cbS@E5!f>r9Vzs^S~2UbUin)k&;&hn{L3VrE_4aL?OEeRpP&)vRJFRA(9ZsNa?M zOFxQEz;`1UxiAfba`R&}yS?zHo!`f8CE*aTUFP6 zPkw81&$ZUP{7%dHhlPn#!y*KvPTc! z{^q5~qx`a^E22j`(EEP#xdW+1k zDjMQTSH&AIp1t%WYb&$rD(|*#oqy%Umt1O@GXK_W%0#`s{?aYKe{jyC!Q;Pu@aZ|e zb6py5101tX`fq+#Jj?p%yxRKmnwlFbs#jSn8>FYli^|=^9slA&pqYdd%t`7S8ixO)3@;2vqxUB&zo}O`FH;O=iL`o{NVZvDmNEg^3(PJ zeL#Z07v2-twqedQ&)ig2_hRva?>)DF{@LRLS3mmtEm!V*{M3)0HGJTXZ>Q3?HTB$f z%ic@R_}Hf|IJoNbg`1Zb7u~*M>fGq+&)qrp;Kx7lnYtJ5xvO#fsdFG)t9{t+d2dlo?cHu>jzjyXu zAN})bk8i&-ShFp$^5O$C>i)6+joXHQecko<{c^!smwxZHynlb^ov~d%9K53G`z0-x z{rxjrU;EcJPmjFz>gQL#dGuc&_}#p}y!nSsFYG>i;r<6F9;j@%*X{>9mJGUvSoGPrq=^DSzqqZ2#Bwz6bZ) z_V-_Sz99dxbo202x2>s8oO<7H9y-wU;;#qptr@+g_Q{uv@Akg7|DJDM^O?KsJMOyu z#}7t7a?i4{TbIw?e8YhYZ@;cEct-g*PCGa^{oErvV=q?j_|NMz9=UP+<%h2ye)wC* zA7A$LyL!%jsz3G8S1!8X@$Sr}H5;xhx@g_M3jf;ik2@b7DxX`mb?ZGBB;NgrKPUef z-8H_@YC6<)-lc!~z~%pb?*2fzKEAAI0P z?LU9>2kY8Lepb49^^ae9=CZNdx4m}ouj2*POJ09rWy^~jmc8$}n<_6(*&kou^ZX~5 zKHlB%m*MLlxUDevrr#BP_xiF++ppPp!L?U)f5KXN#XZk1J~X%W!?)f!@8(Zm9(~vO z=Z(GNi1nG7*GBIux$1^9F8$}igBQ=dfAa@7-+TMz=l%TDoW36%$e;g8I`HO^+d}`{ zR$O$$GyA6|HxHa~Zu>3K&}|pJ`t|Go`p;!6A3yesx|-uZiCyqg{E9!ny!)(2{}Rlr z`rA`a&-jJs^DqDOV9O)Fsoh%ntB<{K?w()oe`z%LUk|_V)xRuz{*w=V;F;$WZ+^Y# zsolH2@YsXHpMCAJFP-}GYhTuCPd&fz>X$d%`1jXt`p^ZxF1U8f=nM1S z@nGvGQp@Ij>ZWU~`eS!Id;jaf_Not^c5ThT?A(g!7k)SXr|UNt-*wyVr*_nxF>UtB zgON+F_>8wTc30jVdC}m+Sz}Xf{`|oEUVi$P_kM6|@dr9v_FwkU{`BM!Y)iO5LmFX@$` z9&)OfHMTrj08$qlMx!vPza&$pqhP7OJhTBk+PvTn8^fc`h1hHukFp;uXCrx(onRpw z%%kifr!B2IsV+7R=~41QG8@&SGN_2PRYCC-X@X)SG+-PO7aIZcsAxkPC`=v|Rd9!bB?&|8ofu!43@ZehMpkp2RnXG*9rH(=%G<@mjJurQb(D)8j^eb$s*JI@=) zn-cN|b1b{STbS?34fq0HJ2yYi8$h4J}s1Y#U&TMD|%|7Z%*mV>5-`gxo4dc%o%#^`}RlA_}vBPu8FsOx%bFm@i#C2 z_D8NcmW`bKR>VnS<-hqq{=M-(!md6LocC(|E8D+a_VRtNKXuvQ!t(21YP|RC;@h9w zb?}kyy3g(SukV-Xxz8su8^^-$nR)HUhQ74-Q~$Z?&Q$HuufG2szuL0?)0ZFl*5C5} z`iGCkiuTP}^r2glq0y3m-L~wrzn?O(b^5wb{%p-(rv2iDUpK$`;=}&^_qR1Y9X<1+ z;WvI>y8M!#ynD&Y8y@)MhKe73=7%%>+0y>K&%bu8;Q9 z`;{9jBVX)WJZtmPvuRivNe-wW6iok{Eta$GkpSbJKzv=nGqrDG3eqHOKZ+z#} zACGq(f8y&;=C2<4-OWe8u<(;t#&13I^zGldY{p%w%OAV<2j^_P`qiEPUHsVfzt0(n z&HnF)AHRR)zdHBb-}g`Nf_L5YhhH53?z?~Ri}NliZ+Y_W&u#q86SrUYu5X;R;_5$# zGIzc)`n&I3)Z|^e;7ItPYto;)_ox4PE@$IM|9EQumcehW{Phm`|zqh>U+g%?!x?y$m(Bco=JLBv3{ra1~yXmPTosXaXd~D}E5B~77UCV#_ zp=p0O^F6KUo8P$o(zn#HF+QW|wsQ{oHRo@)d8+ z$G-8(X{}4Ue-ydk3#)ha|0DnJM{cZs>EZaVj=qrR`{vJnTzdC8dp`e0cj>HKw|@2? zAKvEc{@umf|Mi!q;JS(T&t3MnFWzTU%KJtXRhg6 z^w5*{?YYyJn|Gjg*}_xbJR|ek^q)WTr*zlcdHYuU^3x9tAHM3D{H~tPKb~<%+3LN2 zeevNnfos=XHRVso+RlC+{m9?azV6}+UYUP(aox_E+v{(9J@n>lQ`VQ=cEy)|cJ`$g zzJEqw$}cOcmVW*no9|fkzzove2*5P_(ouK+q?fT=bhv8!e^Zx4fzX$fA9I;;}<@)t^eol@_R1-?j5gvvb1O3`S<_e+~>xgdgXZ4$e~x4|KdGk z-@j`4`l3_P@0{EATybpuho(RHlc%pZ_ND(^T>QQBA6^;#^hMW?eP#AP3fpg)c;MOJ z@4w)yr`0@K_w}LT5|bKRMTh{`4na zIIr2iYRR;t6Pv!~S$ET>9WM{AihuFVmp}QA-9NJbcIx4mzwyV-zx+_`r9b@hXZ#1w zA71nG_iX>lm*4%tbKmpaBgxs9eDKm6V=96a^a+{}lrocPth zKlQ@G(CK~uy6FBJe*VzBzYX88?~6AqI+V)&?WceIJL{peD8hVy7k{L{Q0A=fANmr zUQs)>x%|cU?|=CpYrkH#=L2QaOJ{!jb8|m>TJ$^hyI*=&LCKu!dfqG?yz>1!JoniJ zU;WL&U5B<*-u7(b6F+FH_}Rrz)y=P2+PHt@BUi;*idroFZwXAh6;pGWTDQamD{za( zDZ)@;Vot^pJg4C?;`uK-ua=m`)vy-EvotT}&wnw^L-W=AwLFF^eKC#KqH!%Z$E^HV zjzfzBTP;N{RWTN z_`JD!Q>>tjre5Eae2-Nq195JSofGo;^K7dy5X>*|dSuLVTho*P}UP9o)6-Nj1-ub1HUt})ozUqbe-_GqTf8Tu$v>4nIsYGb zeEYWdpRwQf)T_m>F4=t38DHMs`oaEbYghj2XLm&&yULsMxy%>y4}P<@?rP5+>;50| z?lP*X?(ZA@q8p^UTe_r_5Gm>IE@?p}r9&j7rMpuaqy_2jl#mYTM&L{@um3sExW_rq zea5(7oEK+~@flxY$71a{e``6{+*_RRs&&QIATGL}H4jsrUg#Q*A3aar8nilBekKsU zuUzuw!|9=bRKo4x=wRyw+1%F!QgMa8Ti@wEdcsueRc-fxa^sUXyP zMut8HeF17x_Fs>`>;AT9RamZ$Ps7C!P+Kzl5~ltJ)uOP<^=T8Tjmu{FFKPC^4nJW& zf4m@8=NNOiWBIJ@wrm*A=go4KB!$rlSEH}PU* z3!Y3bH*<^@)}`~8S8u4?5Qm|8;e?9Sj-={FQX$v6p*R2951|QMN-= zP@?o~YIBXzwI&%-7+dIes?9rHYbRHqW{Sp4C-$Q*=S}?QCD&&8ZcRo@H0hP>c#U!N zSi@g20u?M1%rI5`6L*neZ7AS4j%-`AUQqk!FPNH*kqz*Bn3HkIv3yzy;Kux1k|O*U>4Ym0jdQtzI8 zsStYFhi!z))T06I(9%aXH;lXJx-eegFIdjR)IU#O za~~_1@JTWu!C#)I#bazYvP2$IL;N(E=LW&kK3F+K`yV-*hXeo3eOUA+5xlO2Vtzg+{5U z?I51%I-1aavlZr`?B38&T}1KheDUhOl4s0H@F(`xQIB8ASlQYt6h{^vuTR9lrDtr&r;_Q>Qn6^KjQnZi80 z80vCCo<4g0%~r`jpJV>u{~n5*KkN5PVy>uKxVtjP!mvfbiP}2rpmyt*iPc5Po2lMQ zE;bYj??pbH$a2J1nkFn>PcJ&wd9#Ap zKJ+$xTG4I(xp2=E@neTh$=75AH8>yasbhbw`{VQfz7UiZk6J5zFH93meca`JOHj%J zA6L=d=B=8{FFAAl%C9bmUG)8%ez)<)xrQyCrhASK-p4sb7%j{9gJyo~uk-U9=)`nB zt&cqplsoKJ30F>Kv>0uqIS4l<>IlJ`Bb6ef_3LOE-~LUs61{H_mpyp*LKw~>6N;kQk-k#uH%=CWfqhlueEn&7_8pUIoWUY zw8>6UD?L!l6n_*Qx2*g3}k*@EOLnq~^@ zOKoG*#owX@+U2*~@@004hPqjU4V1$g4n=ZmRsQ83Z?BO_rEf3g@nF9_`LuVM$ONC^ zaeH`D#u$d!YKR(spV0qnWcKn57vYoZWf)5*3_UBSf`&ff?;kM{MjQxIK3x`9bZ1rB zq@1U_!5Gs``}MDi<=?@>@L@$J{bw$7e{hsnfs6gPmX-*yl?K7-8$vs05(d*3i>KBG zKlSet@RJ95y2)~h8`68OoW%p$%kzwMU}pguXqA(>d(rKE-A6)mQrUUavZ3r&qEx3eQfj-DlGV;NCLKK4IiwTU!1} z@sToD;;|5}9cfxpqT|hzvu8t6Ws~jni44lid`&_2B7Vh-N}s>yZFs9yi0?@w6NJ5M z6hrv(qG?Nbog_Db&}x+Vd&An-){KLu*d#w{^@RPgh~#oE2k+<~tXikTS6_b4&%~Mu zs4ep2P-RQ=9l-T1NzmqOMkg13*Zl3iqN24Z<68yexlq4ue*PH;$3sUYfavla5BqS7 zYP|hIB!SZfwa$n+f!-H4iuc9Xg;kvq=C=%*RdDK3|J(EPymsf^y@ zU8{KS!o#&4rdLwGGG5Lgg|OImzz%0Ct~FVKLp;hOl`=)X8n(u|+De2>dd2=0>ldp| zSp9ygU+_;@Fe3&MCEwPY6+Y%l5!EsKoy+VHT78)Il1)A{$HsPzt8Ei=FaFt7n>zmI z&gks(ft15fsRTq)Op0mEuMDuM-j3W58GUGM5&2oy@cY+Tx%t}h$rGfC`?`-7!_0Gm z8qP}d7uof%nPu(uXVjcA3v|S_o(Y}6e|p4ZDxG4?8%U&Q-@;%6Zq zSf8WMFpwX0eABDh_;EQ1!N9`)^M1g88^V8Si2qGP`X4sr|Bu`03+G0Ir=xc62Unlf6V%~#Fx|2uuvjI#JZ^>WEPjE@ARCOB zl=@uxEc!6fgGU`r;@3#2>3TI;Q6KVlyzg?{&AUj^d}*YD-=}W~8v}Hn5^n}66~40d zt8y}*54+mKl6$S0#z#SiX=tWBmQ7FdUKobj?ZYG_rIj(ks4D*ib}RFHZ~AUq=(t#q zKyA+D$?&xae%4C4L2e2!iAGs0H|KeH5Ef7(w#;9#ubt`Fv((@_L7@6!|s&nC)n#pNkP-DL` z(CM`7eKTVAteyAg@CWbNNop1=eLoXQBp=gD!9Y%mC&F5L>$&C}#;HR>(|l6Rq-=10 z>FDP$j5QvCN$$&Qnc=5)jd7fTj|_|W>F*sK&nSf-vTSa{sosW5Mlxov%<&5KC|WCp z{9fKx5D9@W4L`yVTWFcb=R$sRZWPLs7>uKoOGz|I2omI)=$KB;WVsyjS zgv;pN=aSlHROF7}7m^`xqGy{eJB18zEPdVS>qb|5I6xzmq+a7=Qm=W+Y?i^iC4TUp zjocwv6<+x?$daNPhW9j{HJeizxqu57E7q7W@cNBTB16^-ee?Yy*Iw0po`)fELYB*je!#ok&0qU@(`blUj_CQg6f-qWQ;r%I!VUeZux zuIkW+A`d@_&M4aPiB;JqOds8egBOZRYvlGlSc6!~~ z_6EV_L%{Jqt)w*!^uKMt{&yD+K>d6Ty?)IKv9eY})z$4#d;2=HzODsnY3)M0yX8=M zIW0s>YYW-hN>xY4Feof68A?vRg>G*v zpo)sO(A&2x5DUu@baWI51qLod%gY1MzyL4A%j*KUxY$GX_C-)p(HJx~1`ol*<3V_M zLXeQq6124R=OP(5#Lb-wrKYMuYHBCY$;mx*e?J0^jC4YsogR>f2OUI5w+(G?8$-s% z){wPzF;rZf31wzxL0MU*kg2IUq^?c@QBbTvD=X%Zx%s1iF0n#T4wRGg4tn=46bcR9 zgf=%(AQY4z(2pMiEw;$x^=Lk7E;zGE%W{{cL4z#mV02LHuKp7d$P;)ag#LRpRU0-uR92_-JO^qAm z=7tC%B5pxjTTYOZ(gGvw_275e)13c9)~g-T1GKu?}Lh8{nD z3O#*#3>_bfL1JPP(8NR&)YK#aNl4&B`1oZ|S(z*3>go&m`uaou{`=7WJ|o1)xB+c! z1VKSTd=MWWI)sic4vC8&LWhU3P;4wQL`+N#QBz|=n3#%?qM`+4VbKD$v@}2s4Ute} zVQWzix27ZX2Ul<~M`sdK|=h;wp_6>A%g9ITVX+Rnp z2hhO*DujwE3(3m9f?mB6fCL0`q1;?1h>6J)^7QP3`ue^>-@dIuYinoF*;xefn!sv3tUHXJ1~TJ8>U&EqaP-Mt;M76(^YYF2vi*tSVtFutKF%pS|+EV5UVz#+cZ=-jC2{P^L7TlsVT->&l;p=sJ}$ zuWaTKuiTYZNT=My{)+fMu|23I%*1Rtb;ZPv>mChb6Zm zXCd?^S#T{!<_P%dd!5-@QBU_t7!w{N2^FQ-i;|vGn^D|ark)d@E;2C9@w_{~)2Q_4 z)r4z$+8B!Ms={g3nku#<%42ufQ{>ism|BIq zRms(Rt*%h&8FQz#+LDa#Ca(D-E(zt<~6i+hqTce9#ekfyyT`HB{4FIJ^ta*UWFqaV#UG9iO(Dt*4Bq z8*r$Tx^|SmHdDNaz`%T~g{!yaMBsd7;HCBjc|c5T@Mn#pjnp`A;1_%tCisd~a-qcd znv4cSnM{Xae_>Ha{}L)bIdT%1D@JF=N@IMJMbX$T7I&eh7J5nERl$%OPHdQwp5pB+*$+`9$t_Bg155Lx0`sU-k2?k7te!-7zvsG+P-3ZE zsn$_jv>;w zI&>R^H4EkON6&NN1~47=SA-W530gA~<;{28xVhsgGnQi}R#5RzWTW04-N|AO%+ay0;!&0A@--w=_rxy`lgHV7Cr=P948uB_^S6K19dE^E<^1i z*lH7NVg$x5B?3of()6iR0*x-iQkPv>UtEoi-%%;v4+PCdY=>4{7khXYU(4%v$PkBz z-omcibi!P(?oC@?O-5xd>F2Z2qlji~B6o0`DAw!!bRAw>j?~(8?i30G^(hue`?pTz z|Jz_-;SrHh(J`^Gaq$U>Ny%PC^eeoPQ+zzB%22INK}<;lC-sc&rCI=PX#Etu`+18t z2L|jfm2~VA5e>sJf~S_R4NfJ+2Djrhk%viy##fhX1spIp&aQ)Zl%|7dN4S%?@X8N* zWhOYYV#F(nzOyNZA{&WySl=8nDg+^}%++lOye3G7!E7w?eZWqH=;zK%Zcv5SH}IV!_+%}a|8 zS!e(BDCmyGLPgwU`J6-c#Rex(aI3=q@;>c@z8~LGP2O+c!+|DSmquMLH?;V*vbTxC zPt5HXk93OU34Nj)`m{(_OpF|l9}KSkpVx?FAwmDV!JM-lf;a#sfDyn0aDfc)yL7-7 zumS`D9v}@!h5oKddW}J0EB=4{&nc@T6J+C3@8A+fOzQd+M-+F z0C*2r0zUvkK>FYP*blHlf9Hk3u7}D1T_E7!{rYDO(x2C(82Yj$wfInAQr=Y)=kXwNvfESPf9smy@3NV8HE>nL6kO1XC4WJIh0)JNG zn*+zd8vq9o1O9w)K_{>eEC5+R1oXEr{8>Bor;PwCfD7OcOhbRyVbua(pucOYlmSWL z6yO970Z~8$$Od)+3!oAD+qc?*C4daLgZ{4Jih=&lvmpYZKozhFU;>nYDfD*@S0V5j zxCXiadO!yV1e~G2{aPOSyB5q15CFn~F(424377!Y05$Zt?^8g3*W>m8zkxrcNCo&a zscjEn05`xg;0@40f7kK;S${SR{av>k2`B>fz#jB>EcpR(z$Ne%`uqL}R$v0y0vv$v zz@Jk#P2dIK0~7&|fhOP^pav`gXwcvB`e*$c7w{Ii0HlCY;3I$stO5jp5MT|U0Iz{M zU=;WT39`2j9B}btLEH7!r}FFS_(eU{DOh~iOL-57qmUZyHuZoVDh8j0A@~& zFO!&?@n*Vjc<}8uiQ|;|c>udU9oKHsx@V?=2Jh?3)-BD_afV?5MT9&pB7(cICvR1A zy)bP~GM2~$Y-aVi(OtPr-(B{P_PYO^D^IRic#GH_{pip@QrS=?Tj~+^Z`efVbvrfM zo2PZ>m(A#1aFm2YA6{j>X^A+Q`y$Tll_spDTO(p9D&}NG`sDr~(8&~OYhtb8nanuW z$u*M@38PDT&Aa!_-ujw*J+UVnZ*#+>mD0}_iBt#5ij>YA(2aZM6WRQdx-rwF92OD7 z+!Xhz-|b#m{MJDGlumt_$7$=C*K8rW&th1A+-NO3`a^3sZf!w6D(OOOcXJG;3h&2D zCUO7vilzth$Tlnrutv&+51$?zSHEqbLPZuxZST17ulYp9kKSx33AonRO#yXEKDu!XtlS%I#4L zCE+DoFEc3IbUmPUDi2SOp?|6G^WAKANTYa1pq6=WcD~4iA2B|WvD$MxGz%|qozG@| z*`Xj#*`GMg%eKvKJ6Gd|Y%;a$`EK8@{tfqUj+kV8b~zv0N*tHg{Zu9i6^J;yjvivP z;REsa#M4X!XPA^#G01F!3ek!7-HwN_uRg&zAtVnTo{PNCjusndHp`&J|3Vz~mE!tP z`7N)G>v#mxOVU*?T;tyxhOlZSY9$>&UcN{n&)%n7S}%EPl0;_wMDx8iP#7)sNB;3?xB2$J}VC zaP?qw^!NI>3@xo=FM04I;bO6>t&`inWdzRouisFq7ou^eS|MG3k?>c&LC$%#GcrAy zE?xP8Rr`*Dhv&q@k22rvQEWa6?<;{RY0h8v@`=M8X5@2z zcC*VFkK-&K!yyV&cm~|f-R^xfw)CWW_h$2x4yuvtZ&bYG7f8I^I(1HYg{-$7O_HIG ziIg4A)ykQ}z% z?5}c1^$n575Jr9^p{!AL@D&L&?#XgjRg~3m!5I8v4gK*0E}e-I4r^Be%P~VK6Gy%Z zEpqVI27eNVS?u8^sSvYj1rp!uR8*~UPS&jzdc1ORW9^CW@@X^GZzY#>Uv-K3(lo}9 zF@`VZp`#r+=%!vAf52%CURD8#R4<}4Ym1FW;HJp_$tOg+V(XZpmAq?VrnFLBVI+MZ@PQNn`SQK0q>_6t%w zEx!ZYz*E-#)u?A3eX$cW4jhKv!ky`K+6g?G5Ayjo2HfU~JC&%9&xB%R{NmH zYZjUpy|ScJJ7R?j1m^UX*JqR>D&15i+vw4vRGp1S-rr3+#(tfgnoN{RewFt_pcZ@? z*Ki+SHcdmodX%caOI< z!}r(;B1Dm^$(Yw*R1C8H94(D28xyc{@Kv>&R_d_?_ge{(GHE@j!Z5>196F<#s~kCV zx1$R}I_$h3KKG{7x8Lk@(-;Sv-wRT(d(63X(z!7Wcl7<@Q&P`){FP%tMJ_;@lm6Hbu{iArvF{W!{?| zTN|Zo+AM+BlVx>T#oh?03N#Ugm!$d)GNygC?8%(Q33qE4{wg_o4v*1jvym7{J4IyR!J`}!Ts5=pIRI820YvP)NH=g=MS9TzkON8Gu7YJ zx~A7@)r=Ycau_1b$5`XG zncUqYBJnQ{9468m%w|iJN@FVVw+{ICeB{r$^`CQU{!d$0#{^uBc{qLv0|6jC! z=hr#GnG-iSL+1tm3V8zlbs+%G7{$SvkOVmUk_2Z`iH82pc(hb_Q5&wh**o7Ki%biI zXli>*dX)qReO@1DbIhp?ElT4cQCdrr!g^ghb9%q)j7rOrXfkDpMNkXFm0U|`i!+_1 ztzT=>v4C38ukjp%U8x;WWu(${X#H z(lxkPInEmmDi`~UvO$;V5LkKo^NpF`N{)>i7uE;W)`(eGj=O5V4x z8gRUW?UX;l@smo(iI}+Vwv9B}f{RIw$G7*`Yg5&kk8cfNn|w<>p}k_wEZf)n;#0>* zn|Ghw-OjW{Y?Hn^{a{>Gs%s4?BRrxiwd@-fs_|NWNn}RC<-eiAW1OJoBWY^xx>9Ld z9@ylUNp_FS5_c{0O8d3s9dYE6-G?~Ot9sQp6SO6Aus@wCBem8vN*-J8F(FmecEE9T zc_s(*Bj-&peK_H4%d4V=vuT7S@Ynw}LdFv6UK3M*baHfR{WD8({%ptsp>+z8*OYQB z|336PyILCWsYYgY=qfkD#ooKzfPFzU6wY#(rH&q3f(@hxu@O7bKvGRX#=Wj7^a73D%rBs(wE8 zD?RnGlqc*$bf{L9=vrG?u?L^WYf_@qN!z=Wd>5&*O4cR4T&8JEuI&H9$YT`z9E zdG#ciUBYO)7YBa*epR=AY}UZF*gsHdWwDI|;T%xpGkMrUA1Lb*mS~Rbw7$^6X4YbuBSI$lPi4cHFyh4@3SpcC(W{q`Yt~a| zHNQof4+NTca@W0{veSPn)1dWy6bl^|6%if*LPEjBfI&lsLqmjvN5{g1MZ!Ra5KvKI zV9?PZEKEcMR1A1z6gVVU7z9joR3r!k5f%*|1r7@tLPtiyfJH?^fCh@H>?GgGrPe!|wXjyd%{tfOoUm{Zf0o zQL0(7EKE64%1DCQO_+%8IHQr={|xKmi@hT2u6fKFLD)<6m`=vR1tiJN0za&mnh zqJu+FRngOZl91ql)*X0cOwHC~4dEvnTLvdt)j>^5mrvpDO?XV-5-`cbJ$;LAKX2Dn z>|VCI{uH+NNJaPbDlsFMfqSUPM z7)!lKyRlmY;@2~E{v5Af&NEotf?n=$`>(BAlY4AwVXcU_?(WEHG+VAC@4|8;4zaa+ z16CZ}Y$Ngs&2%#_^>28fd4r0!PbZH$zn=Sc>}Gnnd_}GppUWY9KH(nWL;`EW)17R5 zht0UA>?=`-oP_xOm(R097JGk}z&%C!kq8;fslF%Tid#(ms3sjFMY7M9zpgcIMi|wZ ze<_dIoazxmK`2c3f?+v%Eeei)1Qb86XIAh(G*l{2DP^$uH|m<2y2IF{lD4xKh05TI zZ4u0{>LQ5IB#*}?x3R5#mHdD}v8cxDz??Mg_+Td+ESo`w^y}yH*mLKGa_=Q#5={|= zaK|!yGCNaC`3`lb$1KRZg3NodM-_{Nou5+~>A6qOSy7ysu2R=8nFy5)LEU-29)!!duf6`tXrr*6@0{F+;%31Sia?FEN{4ggFUc1>|LJq&Ld%oU z;W%9V@nbQm00GM%cbsjAVW!peKND#}q91uX$aLn^Q9Kv2Wm3Nhde+F|j*6d>Vc4%Y zS-Nrhra0C+|dHC{?7xzAz)$iXgrXxJAcl)!sRns6_A;I6Q6qti-<}=V_CextG~{# zv&Uf5I`=xNWRpwn93CC->5D<7u~!Wf4pl?)lU7A5!U{8{`NzmaOl~0o>0d`}TNZu% z603)07hIBSziVAT;#59DBWJX3nl{O~CuZ^b5L33#;S^iGLuH(KOCY2;ZeQPFu*I!; zgD)!HY54P*be~we-Y?d-scrM`G8(7MOAjA=`=>Q8dwlxnn^N~pdz;qc%PzfRWv@h+ z`fo~Vv%E7T6jC2Hle#w!SOYUL8(S>Uw&%0GlF>#*g9x!`Gghz%3#TA@j5DLou zcpsRMeMd%TSJR_<0rUU!KOaJekfCru9vB2zfl|N@*aygfR6rkC1fBxTz^AO&;-3_w0$32Xucz-K@cmJ22u^=1jq@HJRo^MR)eet`3B@0kf$I| zL85^~0~rP~45S=LIgkS&2SBobWC2+MvIL|pNL!G5AooC$f+Pi*0x|`p9!Ncq3m_Lj z3WF2|*#xo)q$fyEkhdUjK_Y=f0{H>t2awVrr9t+9>;cILk`ZJ9$O4d7Agw@df!qQ~ z2$B$F0>}iAS|GJR&VZZ&$q$krWIf1wkggzIK>#>F$G={Jyab5_5({J`$ViY%AeBIl zfE)qI0g?mc7m!~-I)Zcrc?j|lBqc~nkQpE|KpKHG0=W!w8KfvkQIKsQ+d%q&^a1$* z@&V@0l@%mN44?vxfk%KczzMttkO3Kh33vq%0os57;0C}0F915g9KZwA0bbxO00$l+ z0FVGW0a_pjFay?rTQ~^11Cai`e*R}d^3OHVKi6Ybz%k1Y{O-?YR%Bwrj`sz_DTYf! zKGu8?XRskuFmnr|#2^M&Q*{J`=?x3XB5M7!P6!+e+y3j+$$yTM$bHSHR+}g`!Ug?- zLFHCWELU;&&ZiDfkDrhm37sqDjrnhu`KV&5P}+&Ggug;av278*Etw0Tbf@;lB_3MQ zYXOyH7gVlnFnUWtwWh$R8lWf&?1`>_a&u_I8^M4?$w zt=+(${sQ)*DyTMAp!c1FN*4us<2KmW4d4}&0acFzjKWh;b#pED%)8 zGtdJWPRjiCf%-w@QU4RGAh0{x*M)D}Ca22`;@(DSN5)zksKK^pYTUN9=Op%w5N z{si@00QwF_fiM_37NF|4f=bK=MzuevhGL+yk%J0z1*!uB7{MRFsH6wIu@dy&Vki;R zu{_X6?ZL5Q67+LF&~Fbx-JJ&Yo*mRS7jTT@0OOnt)L|4*f0IGK9RYn&5Y*cpaD03K zeYgZlIh{Y|7|b~Hi#c)Zp7N0qEnNI>RDjZzlf5@|Mx5f3f5(wfKYc%lzS|)p?ej$UL$ykIs{sW`^vr93M=SJIb~a+UOPbMovaC&TJ(hyU(P}I zxZipcEK=gHUtS1ww;y45J_q5x<1GE<%t+|V$3~9PY5S=o^35KD1iV?~p}Kaf@DE*X zRsD2YDShq{wc;qN(KKEah4F86`RVxwBPvu%-t57sSTwliGAr=q!-N3;Ks*CjR^nMZl^m4Ha8;3;8cC=n%WYF{G9dEi&Y< zqNWv&h8;q_@H`kX`b)zg`->v;;H}qQlO&7XW8B#aF0k_E&`YRR!Bm@iZ-wfbXjo>X zJ9eV5PQN#ml&*Ax2Gh$|{-s~_aRuNFaP<_{{9w!_=^Y9_v=3KLz zkqk6r_Bl$PX`x*ilk3FX-2j^~hv&0}i~4Ws-&TFh#D1wt z@uvFXgRE8Gzy@*%cHBftWzRZd5_&dWinq_NF9k22>@Dr0SS(>4ZciLj*wsY3??`y{ zea&G)e;YV+lI^IOU?TlF&@&CusBUvj&*PC}tJ^P5vuk`CB#$kO&4baDu*{bSax97; z8+t_YHEquBc^h?babSPL@iSc|waNE#enIDR@)h)WMR@elqhQpU?|J%O(YNCyzXLWV z7x(ZM56T~T{DcO+H$^BFV2ZlNs|`6j}~iRUL3oA4m0Yd z?J1x{{@W!G&VuW-YwL0%Te4_D*Wk6A?x<0Ks1S zUbw85x9KQ>C999u2&E8xnqIQbgKo_AEzD{6!lJ@>|I#EL`^!BF)YiGp+LjU+3HQs_ z-jDCZ5Ew(*&X&H>$mg_wLW22V_U(*BWoZMIC%HvcsL7kp+^bm2&Dxb)z8sDqKoP=O zb1S2Il)ZIARbzu*AfC12!)&{hGx#y3;TOg$r+x7aF@PkjccSe?}&0~ zc@H6H-?H*=5{Y z4XH{+&!V4rNR0y&ct%V5X_68qA4`v>j&BRqAU#8}S@_+A)9Sm)LO*I#WSqxZ;uFm~ zp&Nq|!SvX8xhvhd_gycdu}nuSEJk@SvQnutWFm6ase8@rOAST7f5C8d77BANI{dIq z<*67uvk@#pQU|B820umIdrQ66pWkL&TCJRn(^;3{z5B{=sHZX@jyQ^}!j3<_W9sS7 zGu*PTkC)k}$^+dp+i}i~+4~-uuH^(jYaUh+BuGhP;Jc|E8hz~Gh0depGn-(#t+Q1T z@saxE6SH@5-WWI^(vT!YtX&Ol4-_}wOy{|_hG}KZz=g*`Q6}=Hk#k-sK+6f z{6DZ(^+iKfYWo#b_2^XsKLn*e{mI)x?B~xcHn9KHz)>&rZNJFsb9~rGb)`RbIL6$s zv6Kg|*BR&ejlBYoF?17R4DV?-C!$vEr)7LKJsYOEl^v-0{DOfzc=m)Nv&J!(y+{>*jitwMD7-k49;(%OZj5RF&*zN6 z|9v0i|N4GKlz$uQe`#p{rJ?^f4dcIQnE%6u^*?NXK5q^O2NxF)G5o~$kZ@|2oQ{#@4cbO_SIQ( zDGcM5kI_NHxXJTn#L$%VCi>l2=jDgMVVDr7b9lMwXTl7Q*-+r5_vW6rdZxVni}UGI zyX6vDhV!1x@^9fhPh!1Al})HzCsqaOu;DP3otvsKuh^AWN|szB_WdXlw4|(*Rv~qs zzDO=A>!c=fHp=+APRo?$*xHoKwvt#* zG{@4mr$)j0F0|jVfu7$~qwvt8xm9Y-^MkK~aG#M@3$dd2OHy=auO^wFg)OlOp5eQJ zAP3lXq*hlA?vDL4(T{9>ZF=;=`=j+FzV&p%_7R6>JygH*EIWOf1X2;Whfzb-`-*#J zvi7-eNZ@r%3CLNaV64T*_?CN-O${Vw}E}|mQby6 ziR8%hy~bD@dK<>L}6h0eqGwkYiC+2VwJnROc%&!15< zyeDJDI`1&Ko>#TF;_4W;#=@n~_92+vNgyJEI!j-8ah4A-fX= zw_rpRyvF82H%}3nc_cDeH_<;8(piqa3d4E%5bA7~^>f$B;WU|&V{BlAFmUOcZ7Wjg zY}ShbO{|o#&JaPEevYonA+FXML?*Y{pSd|W+#6nwb>4T{&<@3D$3q!i7go|)S21=% zyeBy{zO~_h@h0)nXHFA{I-afbfjX-UKQM~fC!xt_p*sD`<6nKu7P&w5Sx-3&wnd9a zqucdEw^-9Bi`3WAgNIP3iHVJ1;G&USFN89e3^fbgmNnOwTJ?{pKdikAQ$g&iKJ3hE z7_U2+b#0~HV3x%1SU$Aoxb@ilQuY1yncm*YsY~MEG`iHfpg_<(B}c#qVyib$|J94= zqI70k=J*Z{*^*Yv7;6Ws+W8+7DI5si%Ve+V7YmyOOwu?CzhcrE^=a>Qr+xUTY~(s2)+wPG%&|<8`#yxNWjuR&r7w$E#*X)ceZ2_> zmO9NUck5$Y0`+2{PntBN;uG1uVhffWf`J7b4+_xI_*b@4(YS=!ZwW8!U%03i@SoKl zHnKM8jH%50I=XbE^gz)aedX!Te!d^2-d;h&r}L@Vhr?bj+q_Bnk*wu7o8Lxj6b(;( z2EOnP_WGw91KtNYu@1>Q(FCqC_R)*)7Jk1q%K9s(%GpY@?CU49mC;kaoruwd2q-zA z&$O-QI%n%CagfVv604M1S`@_wW9^@9qD6pMmq) zbDjNObI#7po;fo+*YypzxspIc{OP`dNdjETaY90Nu4LDc+akdCd|A4W_4v_CDn~}e zTb~AhaK%y5>|W*Y_+THbn;VCWm0UuUwM2Ech7p+!adVJexa*YAmst?e&mGrqoNK9c zZ-~I#T#-GkB%wXboszEv;!O5o%2TGQCf!fM+AuFo#Wv)DuzW}l<;|BLGcWN&R^fBL zC--!5^5h$KErb#BlEH1wHrGF!b^5e>JsIpFpzQb*f+e|Ye$Yxx-guuhZCJ>}Z65AzHHYUVju_FfP7mhFSHI|)%39=uX)&g~VXJN{ zF&bZdoL2p*ScqiWIsX&)7?)BKr%Fx!bt3m+qISL9T_@jMdU-wOr?2#KyOamG*A>ie z=O6kHAd)a?;%1f==7bwd2OXF(x^OMqUG7MJbS`qL^*wZRZ2y8mFeWuV_|*nEVY@A^ zHq1F-_NYs(q><=@_aTkmW3jG79mk#rWmUKglNU~!Ymv*iuW(JI-UukeKmDRk2X^YZ2S-({q z(%$)@OuSx1$l8Bg;{C`-;!RcohyS3KMVsCu?^xqG@(J8M z+Nt=o-XTm`G_*s~wA?Wr3-GroG-YqNsiQ*7fuse@Y7nP0{CzeL5-_t=9*a%8)I#~>m! zkA+^qH7(UWRCOY*+Ev9k1)ouB)V;Zlk@hRkqti!olh}C*Mepu)_=nD4r&dz$g84P? zWd>}gDW;ygt*EiyZU!NW`Br-^*c|zDs0WG>7{GxN=XD~d|fqzD{4gnMZi~MDS z06OX{a{@LbVEYL>)6Zs91l9$t=jZx>_s;tK(t&kAK-jasXMO?Puh{;>-_ICOXV{;y z{uJUA4C2!R8^CB(wShT%hr2p|Y7TsRI41ML$V9~hSdjBnWhou_`?GyjhT z)vy-*{K^4at!(TPRy%UxG|*D*;>>e#QePAyu}*V!;B=1 zS4ZTphepdxenPs%KMz0>zYDO%8l0IfzRIa1%a~K}ZX#st-~qdRI=`PsNL{hK5zkbL zdSde0V3qt;lGUSArem7RAuG*B@u*A_5?Cm;_G#e6`+3z6eL^ymhqZg2B9Xz*qZYJ} zUS^ktv{%s8<=8enHxbgovA2+~-mKp{MIA*~Fx2-uJ$yQQTd7vI@X5uNk+QkEXqzX` zf{kd~k~3WSpcgnVL^iwMXzU_wP^#Qe!g7|mhZAb?ZG}j8AyD8>VBJt{pe_uaa%k4u zul9;A4xXMt=`jDG_eSS|CyW@uR4>+`LybQocW|jQpybzReL9 zYx0I(qx6O!`KW%#(}3!=fJ+`Phfz8CaFrbu46iE(h(@^uYVSCmhU>=h3g6dQ_%|?K zZxV1=me2UWysjN57Ki)AcaHdk_ypgCMaLEFr|qe0kGojK5QaUQ3JnklYn#Ov4JrTd zNWG{uAx}ndjk7@K@za9mHwlbK;~D9-m?Lu~!XAxs1&j_DbFBKuK0x&|lui5B&1aO_ z&0e+o-uR4hUuL>5(NZBRwVP1Y$6WgHA|%-N^B}K@+VPha=e<lCH!boJw8%{#NQe-oWV#>4d!lmIw`(gDM#+6>n>fTifO#=?|){`V{H= zw&D37iNvHE=A~ zxm+JWn8$$4@Rl+H>4JTHbdU4&2XWWM>u=2+S+qLFNSdSMc~AIy`yZLE?SIwpnX$i2 zo)o2iK?6Uh{9RQ@jJb-_z&(jX%k!_>Ac7>8tIh{i;2?|X>o zbmd)Xj`S&f3Aqi0+)nKGhM4R}e)y3FRlIkaZL2r|vkB+lA`oJYt1Ah(bq=>Y+))6v(lkY0#pbrbrS?QtxH5h8Hwq>q({5( z2+{M{Ld*nHBj>90@0()Kd|G?Im%5^;Kx{7bqFGKjR9tm!9NH|BL2EGZJyb$$Rbus@ z$7;HT@Gh5d)XmO>n}{vqzg1vab4pO5%4S+2)X}E97GE7vSrFsD#PCs0aMa>zGamKJ zNvV!cYFA{xK+Qhu89Qq|AV{%0>?-8*BH>|NFA94yuG!fjddCOhQt?`-j{-hKW_sRg zjE0z2m?-s}0p%w1iE>YIW7(}ZR_uiw%cJYMxxMKD8TYJ{4KLFtO`O{HBby-VS$p0i z_c7+a;>dqXylWl`>%I^x;%UFT^(?S#yGv|Gr$^|KHExfR}0*1k#L_o?p-3IH6x}q9yoO+YrXZ?*RN)wzZ4mL}@`&W^MtWuuR!;HOV(EuB-|vt;$2NMZ zd17h)l~T1kfT>WP=HBU2*!Ah z5-z=WJ)b?JgAMCew3T0RhqKLf_&+cX!b5LQI<&C-+OEarEX1!On_o)BG%a{CD>a62 zbW`eC^X-`vN*{MTB_Q&PLTY-^;y(0G#A>}tmceAAtNl9Y%bKl1kIX7RDc5^Zv$yxH zL`dEl<&YzGF)%gC*l^C_b4wmEZqEh|3Gvw7IQ58F&l2#3RCP@iZYY)tT3EuDv!@@- z)76IEo(tX|8}6t0cv0>1b!Vz4DbSMeq92zUB)+$$ujt%!aQVa@ch|JK{qd-GozITF z)14*#&c4gf@kUVb)CX^7CfymXMJJ~v#a^kXFEBiWO^AIsua(a$Ym7~EA;B@P^44a+ zSNRjUn#Ek@mR@mnw?{Ww4aT=ZIfYf|Ukqfbx~6`!8GIIlK46m3lJV=f0>&=`<5Gd~ zr@-&+JiqG!IPgdq1cHM&Yd4|-j`-#z?p#hwSbf2E<7R$Y%s1UOl?i>SQ{q>bS0com zta`rS(S1LRLAkQ!O-S4_g9+8`Vm*2$(|>Mq2Zo1#P501AeRylf8@q|)l-ByffW?7( zCn~@?HuLK_yIhy4uw@nvF^lIVjabdH{$b0ADH*tfxEYKJ?~RsoT5V3^hnnwG4}uP| zbXsrfr@kxex-GSyRQ1J|l|6q1e^z+$w!^mJe*hjOUqmo`+bH_cHez&pf;*} zUmJDr%EmfqW2F1Z$0c(EhmCfhdzGDa{1mvf*wt^q+7*0rs46gl?+7?9%T(t z*;{L2-zz^UM!D0&L}~b-c$8jm9j#xQkdO{fV;)hRp1AlsYCU@|c5NjhhC*|&JyM@P zeU9at?!5$NOmn`Q7pY{J@`4;b4tDIw5%_$ z`WGyAk&1aAXlu4T&)&2(vv{sf&lA9^uBnzsIb=J6!sXb^c(v{KcIhd1=vPm24_a#n zzldZ}IE!Frzofce_^!vX#I=I;_sUM^8-Kl0#--gq z=|WBnQM zB=;IkaV|k0)OJfvQW5rXhAHDH{di245BkXRcJxJC-uqnniY+N* z1?$M_VQ=g=UZJ-aTTDuX ygGudd#7gM$3*uP%Etm54I!0NoWiOn0w{>i$K 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

3b`)kf*|n5RN^r9H`-r)3 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%0D$C;t@W%{Vp$C`n7Y0A}Gv|;*4zQ>b+ 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 z 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

G_yo~7Dvu#h@4*J0S(EbHT} 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

ediVHf`JFIw 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�X5MX_ZWURfX8(|Sc8jQ`c& z{{U`4k-w8~{=br-g1?Z;q&B2NDwo=rx-xZD>iX1;sUJvvB=ynMO{tqxA4`2aRZNvq z^yZPntm0MtC4I%at)Gekz9x5 z<4B4~N=V8`DoCnGYDnrx8c2Q+NgD~az{+%y^pNzC43O+Y@;+ck|`t+k{C%ANe;<0k{KlHkmQl9N3sFQ zERqDt6-YKBxf01$NUlb*3CT4`ZbA)iM)EQ38C<&#$sCdblIxMY56L`|8<4yo$q(U) zTaf$>B>x4HA4c*sNIs3^Gf4g`BtMJfUL-q_oI>(dB)^E{A0T-e$uA-Khe&=I$=8tl z3X)$%@@q&wfR}GZ@kvxM!e;vu! zk^BadXOa9SlHWq|kC2>3@(m>a7|DNwj2q@D57 zuTSuRWKs@p4g6fcO{UAw=+t??%rnfmkL=QO?e_O&~0%I9rl z-lkLh{o&f5m7j;?;$nDE=H@N(+!y4@&&lscR=*RQHs7HcKdVnaB-!t`tT*1T{KOaJ zHp|2Ne@4#mV!rk>a&&K)8)e)kmBXcbwZxy1^h5pd$?%ErR!!i=TUAw3b&!aPle^i)V=|D=%4 zhIB5Zr$c%sq}PRXKBU)&^oEc*FZ4fizKo=Tq>7}5q>iM4q=}@3MEWK5LY%YSiNRU& zz>dHh4X3;B#b+c@!jzGD3I8c@n*S!Y=l@OW(bRRBfC>10$aR|}sW&s*al9m-%rD3% zb4EUyAC^y?5-d{1*KZ#Gxo1B9BmeSWWPbOd#xG{(8-MaYX6`^W-hb_zzy7~n_j}i6 zJ_D}vr%}!Vj&4*a$>#^(3uE{(Vb|{0F5D)+nUfFg{prjv{a=6h+04r?T=(V7AAD=; zzleXuKAD2NX0Ptj+qOM!JGRYhM>jd{*@nek-I;b^yVnkMpV@(Kq}|tzM~k{&a9#JJ zAsQ9l;I1iTnzqX_H@o+3R9o6tb!~fDkBhqRDL0?5 zfTJphM-(7^>$bLT9NN+iP|Mn-ZEf;E1%tMBy6?}+O<%b^aXZv($NQ@8wGG-(wQY|( zwug4x_O|7AvfOpMYI_b>6-WaGXI(q9q0R0oxJufLw(kAPt|jWVZ69v#z1`ByX}L3f zPq$NTDkxY7?he~AL@(>MtWDcloV%?zZJX=9?L0fMa)^AaHMej@N3?9O`>J+-UH3`u zTWeX1j_%yetz~P9juk`gj-p1#cKBwO^>v_Chr8eQ3{knkYg196ryInUwFcZ3cwq2i z8@SzbMf{D#58zxuvZdqH>vUUt~v){U5 zW8a1xw+JpPSsW<*ItEQ{58hC$FKYX{whMh(ak!#yswvjgl(be9x@GOxj@F{B7}e7H zHuc$xmB!wxD@00$D>WmtWyQOy4)Tg#DH@J96uY<$bWcmK8cq~#gZ8HFKHV~+)UeH+ ziwZ$vICraW>6`1?&mG z+hm&LuBq*4=my7a+akTH*wRousVEulX{$>5eokF|9n&O$fFg0Zu4AvNaIDxq+bx>} zDuy`&tr@p@ZWwlyjp|gj&0WR!rcuY9jmx6$dEHPrRShmA#y#!fzLNc>j){im;RfqCwV_Fzx@x~Fhx8#ON5MBCG{x(er_mfSVicXSMu^{k?`scS2W`fN*8B2}A)+FGBs z)uyWBtfJ+0H3xB$w7P51?b<}gE$e&Qziq{4Zhu|T{^}{-RP=5`q0qNc*VOUNdUkZo zw2ba`ZG-Wij;?{#kJDLCDIfQjuj#})P`EX00_KkN6&;5I#rV2S-esi>!~@@SyKj_i zpzYmnl;`dLx(c^}jvUS&B`v>eRED!%U2(fw&GP+p;^^? zMTJIR?^F~+E5=%sb=;9AG;Qwb>wAkz;W&S{jPi7}_j=k7RiyzP?W?ll6!(!I7z9g3 z@vBN1OSVaR&!Ai~YFjgQihHv+terK*mcG&9szITwy~{QXSG5m0dvONs>o{yF)MP^vuB%1!TKgXHMO3kF*T#lMTK40IIxPgj9h6=OYPfy)HN=9V0hlt z(c4iBs3;D$92*8 zJkG&Qg@4`Vrjm}oj>5mBn9{LP)iuh+ky*2us&2hTUXmEy)K(M~u03rHx&5Mva8;{e z!)7S*7o{W%0_F8iaiyBLDwk#rT#KNqyv|yfy>jt(y5Ls3>li^^AggUE$j_(TxIbF^rU39fc=Fp^Aw#O%t7}CYp4$e72?; zs4`;fSrYrIsZed{*eq-NNi+L~OC22_W$XK@j+v%W_VVz!tI#MZHuklww#_;X9d9ia zjjGn~)GhY3{?t|0hcIp#Md5r_2~=LObsTXWqwqa_U)|<0Qlh@Ly{A3Rkx|mN_7soG zHqt02cXc!rjf$2{wC!l!sMDlEplaj3Y2xKT%j;U52Kt_cUTN7(Mrt<*)Fo43?1q-j zjrBm~OY0ry_d}OCfXf`fWe(sn2XL7KxXb}u<^cZMZ~%Y`X9m(bQtyuD=2BxrbJYV^ zin(mW9_RIH;PQ_zOq3KNb;Cw3;E-B0wSFy|*NELzr56=ewcxAlWvyvR?-T=7}pRAjNTA>To5L$^JQ5sE!B;OsTj2D#%EQH z`{*kah)3li<>-WlQM#U%#^t1ejt5e88X6RBR=M=w;mZ=hWeMQ21aMgbxGVu&mH;kG z0GB0z%M!q43E;8>@K;;{@ENJ5kf~~&TZXHg4LL4pY(~SphViE~B`Dj-?kYrx6II1X znh>^(yKV;>6gKslj<$%VygeJ`4Wrp@?SGoa4z#p}^=Qrdp{}LYwbZK4h=fNwxN&hy zdyYnOGzI3IQ#Kmf(BqDAFfAR4>;amzc8C04PpL>*DO^RVZO7U<(ALm&w5L$>Kj%KG zhJEA%OWJ#s4rt5o29@N1DuD)@0~`5u=|6! zT0ZCeib+6(6X8-*npZW>+>Nwb#$8kuOItP)ydGWcC+CmYs-ogR&*)6WsB2fpT}yfE zw!WilGiX21q?`PH-{zN^N;D0V728TRDuIU4bOfk}nvLn6VPh${;d?XCyuW4hK*>05 zQv9BAw|(pV-rGv`W2QiA|6MXKXU-EJQ|eJMsRU;qv){UTL^s37+)cV}8LIY6cMy1p z`#Flf>FwT7(Lx$p5Q{2?%>SJEosjttx9?A77U3MU1IcHR{3kdeEv4quTSNN(kbWR+ z_`A~j9}9mg{Dh>pOUtK#K0h9&I{I_RJG&IM<@mE&%eFdxeJ=cb_(}CR+Y)w2jvrB1 zvqg0V`+SI(%nk0^iyKrl0qOd;zXdQ|@^(37&cU^AEp%)4-_Yxqyj>2tvYl2#=Kq)o zA)XKX+x*V`TzWT|D(@y!EzDm!Q{|m9l;6#38t*1kD}3bLp*RTryUtqSD0sI6r}W;k z*WX+A@_Wl(3mesl0 z+fZ50Bw0clFdjyh~z^^K8)lC zkbIP$lp(0^r1?lL`N6H3e+O5_N09UXMDn9Z{shT&xN#E6-^S?=A!^1{vhp=aj-H;F zO6GC!svO*f%eP5#{3aZIYGSI8PEXCr@&1Q1Q}6ps8c8e}tGK;AJ(Wh@43b+>##y=b zfE?_38kaUoa%>-R-h$-zi7CV@OpfF1_$DNH@$t>_5YG1OlY>1bT}jMf{vk`s7OYfOo`-)QU-SlaDxD?s8j0#IABieOu;t-09TW{ks8^yE)*w) zwo9RXS`WkN6sNn+n^y=l2uihpf5o!MAJ8U?ZUKTP;DFG!EsS&=AUN0t zv1uEIgRENufaisM2~=eLV^0SxOwKsR{Mjb7djDe3_kJ;tRzN`(9MA7g==(1;v}e-QG2DAgR5* z(!|jy^i?lP+JLrr2+Zn*fVY5)8%PHw3ZmN0{K1nRG-eO->e&ItFc%1IPcOXa7(HnD zc977HrtU!vd!&qLIF2aLj2+<9=7^nVJ|Tq?7eMefqa8P++#aZn9@M%AS#3lv10XUD zzNgU^X;ioamD`Ah%Yf1hTDcv`HbUE^AxRs-$^?q+MY18#w-KC8Ly2yL{3O7L3{+SK zoi78zGbl0xx!nkY5}>l>bwH?Z0_~k)02r2mlR#T!>fnI-c4&wUc-0Sr29ZGqjhO+* zGoU#Et&sp@GibO3WG{nSCeXPP5SR>TPJrzh2-^?}A41CyK?a79U!T;xxDVO)%?C6a z&JH+e(8LiyP#Xzk(1)!0P_4d3u)J?R-8Mw(g_DFs-Ptz+kc5GceIREuB)J!y??W%> z2NC_?Xdk%TzsQ@1F|7{-_JPzswrf9HsSh2k4=vn>+Vz1weJu!U2IP z$X^OlmxPl-!>7<*{m5k?iCj}?&NR{ufWS0}PD7H?C?pM%(iqv((6VV{lV)#%`bZ;1 z2JM*!Q__&B4B9gdiZY-m0}l72%mMV>46^EHD7_#xgL-Dr2{V*=G)#v51qEeLZvTFe znnC+#Q1B4@4;-3kRBGYYm(_IQ!tB3vETW+d2woC!95K8sTh*a|jOU z+Xe^yYwI|i#c-(Jz=?DTtUH7bfxaQ+H?#*13LipgLy)m`VDviBJS5Ffya_GZ1}>`A z1F397rfuL*8=9*P{A)w#dWh0`WUwAxV?BE8dhl;OBxXG%ay?ppJ%nmK+H5_#)p`j1 zdgQzwIj={~>yh(%=&AK+<#y^|WZzCpp5p-;svTvtqpP(;BsL*gXBkE)43tT9^3BM3 zfEpSVT#KwWg4_hMN+5#-C`drZZJ`9y>PO>kVQbBSGdD+OK)IGDWZPDb42s@R2)9m3 z7x&{z$w7R%+6P1_(SvjCSgywog`z$?=8@hn7>Vdb#N-x1;ezU9#xH=P@?sVs+^^4! zye1=2CK3`6CtL()st*xo=ON+j5W>8OU3@bNFTR;++Sl-!{%ztBZ5Oinz`f-$Pbj=3 zAKo!}S|q#FJj-p%qhD+HTR9&6@@Bxw^_b5NBGt5T|0rmfmPgMLKB7K6D$IjO5AI+V zu7oC^yI8;eVG!28S6MU@9^Psp`}WGWqAU2Nf=P4VGV z8Lfwr9#kmXO9dH-dHIw;MRiOqh~?;4nsA*bXj+YyOfE1@kX(RjCFf8mi|9_JI~#7) zYvYr>UbYZ`s83s1i<&lB)HEr|4_>TWT70t|6scCI_~xL4WjjgE<>VQ!A|Lh}Q1dM} z`Ib-STQ2#sjcrtcDEV?!V+!YymHTkJy$>3pTOKHJw2*yjNF78E3;Lc3)JQ{?cwDw3lY zh4Yyc&EXSQ z_yjq4;#TCK<$eefn%7(}D}Y}3ECBCLE)c+tX7Xg-c~W#fsaMK)le1I~M8E~?jYb#+ ziIJ3F)V93*RA%epkTv<~a`8%ao$!_}Y1k0u3=l6KZdps=+O2Z1+h=+4eQ1et1ABTL zV4PYY9GY6LVPposxZ^mwEn!)b72m_BWk92uAbGS~zHQT9K$gS^ob*V+-A zcPI-gpgqS9#qvGQ*NMd&K#GGx9d$3%cK?TBJ{Oi)Q)B+OL=j|> zW#aIU1^G}LL#%M>ppB6$PpS*;5nf_@^<#Wq-olUi>gCUNuGCG2P2mV)*!-@Im)YPF zZ?CZ0D?AoftKeg-ME_m_$+E*sqCVj-pOiJ^xkQQ%gqH*W2m;@klws7?&-dgpP9R^4 zUjm|N7l?)n$3+e?{FF--BKnZzPg01Up=>wI3@46$1Pm#9(zQQ5~Mt~KLL%oVt zT&-e{&p=3MB)k%m8D6c#ZRh3O&r;>abyVF#>Ia(Dw_TOuD0RGkOCpBPTi_!BGFYtL zD_oL6Mgf>3MDkOZg+%LDF`XfM2YTY*4#^Ol8k$YM9#mTPs?d&w;~b*^gyRJm%oK#x zA!!ye-~GrM16wG|C&NsD-r}M8wl+y-0UwF!ENL8WVh7wz32c~V+AxXf0Td(SUTG*) z6w7l!{eT~t)67y2I;CoDc5-ms!mRgjaLN#~QwN5`2z5j$xZge=GDFf}Sw33>1F{I2 zU5KKmgRWPq(;Bo8JaBFTTmJ48-j9aa_;doHE+d7?b%aEPm1R&eCnPIoJOgmJF zHsoF!Tl^?1hH%MBGn#@zkl|Z@wyM@BmAt?Xd<(7B=GUZJ=g?hHfOc_`1Vp)>pPw}5=`6&?+qf}a+vDY3&Ht}LB z&vODkE@PZ2RE5%>V&z6%ktq$At3bJ4NT$*~#||?$_Fm+Lshy1>s1+ZaapDO{af}dl zxYWhP1v|~k*MgDp+HIzI)+7hEdO3yJ=XL`l%!Wa&b13(YqS2`EYTe@Oy6^_ANgYFG z+C-mj+2qkQ$}f7mGDzol90WK=ZC?YK!?3B4m&&x|dD}ou;9m-+J3mk+s1OmMlX_D# zi}2B9%@`j^5LXZ~FUdwxn`NOWL7b9$bxP{Rlr-kd`wFSuvLf?CYEYNMIy=Cpg{Z71 zI49!l1``~$4x%~CDur)>b9j>4^dE}mK#;?&3o+pjHxX_NaXL>G44+Q4Tib%$Q5wHfWPC%*>AS|S$EYY9@z08Elz2$i`rEkJ05eboGT5si% z0*HRO!TD*BwXZ1(kzXxOhFd#PFgjPc&XCudIr`diQnc70rWpi2PF{|zlaUZU+ZQS- z9vYF~?gC3cWf{#8jRPTX-yhA9Fr(H)h*YT@M*Z6Htt*bfyEvz(Ka@`>#CGl|Fflp` zI0L9)vQa15C?mCx6c3FO7}p7>X(QU5Av`_&M5?LwIOZ}^>leaYYaenE<`89x^od(mh(_j$icP#0bf?Wl>-bLAXP@W(uo}s3Q`jywB--5n(b%^51F}=oNW%*wkg+!9sh8M(=xFe z;XCf2kB0)ZWYL5U504uj9*_DUi#;{k83?k$b6uS1`&`A^c8G$2zKSnL?^U@7sRvZE zd#hmb<6*6bf#vtF9qc~HjMiBIsG^SfAvUHIfX=`?@V!OCD7MfkHA;+-V|*wipar1o z1~ndgvBDvyC}4_^#?OO=PR>MdotS@I?#d9Sa55K%R~}v; z8dIlz-E}@#p>|HpD&!)HBNax`idr@ua9T))Q}ugwA*zu6knu5gsS~?Y`*~^+*JKxP z0dt*t=5rBNmmSwFpaxnO39pOMh9x8xc!*17@Nk6;V~yh_Le2a#*lz2l$_Nw1SP7ea z-BgZm@D|5>**aStg%=E@ffe0JC9TcHn$d zGLM;+A1=7-*Dx`1uUncc51XqaSPt82I*{Uz0 zv!bT*>=#~4Y{GZiu#1ILFz4>%x(4c^j{sE0&>?)5UPrv4ab4@uo{4>c9IwG}8lg;w zQ71eQn`@FIC`09>3efJKA~t$f5Xe~cJ(A_m=vfbi5peNObCmFIv$ zm!NHj#yl*4IdR;jFq`e-$C9d-p#jb?84su+R#q8DDz0HfLA7zoP+%#?cFGA^TsL!Q zpcPL_ZBq&X)JmTc;drCErPY;E7d6TN!T37RGrdixx^iqHTWU zszg%m`wjca80Ej)7C}~>rTLxG{C)+T1ktR<<5%XKCSbeg8>I4@{DRm>Y{GU>q8JE{ zl;yDAZ>S9@e@v~i7)r*OqHR}h6hctY2@1MFLFR0`8L)q1VH`bCDwbnJH=q1=$#81z z$^wPi@5r}egnnXJ8!;TCemGLUJg-YK7x#l$rk9lLk`kYb)43)RSGWCik<{ZR6_4Nb z2qS`%K2YhO>>_M60#5Tf4V`27D0$i0G})#)E{59KZ=OM}yMsy0P?%(RB%#Am+JftL zpb{LT1ma5AIxegM#-cs;J#DJR38SM%^|7N6jo^H}P&M)d|CXxDfpP*L>038JJ%djl za(=9kI8Kxab{UVtCa1Q9liAWUth}u6B;wQO4pann=h6^v+oA|b?BGHg!y65^HRCLp zrPV=wIj9{l1N+cn4mYMmj>!i0k{zQC3SV&a7R7R14{F0WZP<4Xw^d0<2(c9kw=H5p zs9HW)Do@NeoexYNVD=Mq4`2;;-C+$5f664@biP>4c zx8f!#z*4aB9w1A+E=)N*U>I?L60_8mU#(+KG&_HdIfnfUQ?xN@kcfkMxXtErpp(Bu zKjgP4qQYyg>Oz9q>cwR0XjZc;8xA-Pe87<*epobykHlz}6Hbh!+Dax5nuG_k|5(Fg zDsso^Ic~Ef24J*d|Bd@j0glB1m>mIV4DQT9PXi!K+0dP&Hrs4Lv~l0kW1?WBQ4l`A z25_e@mr#KFp#e2}h>$2If5>SYc!%K^La!De%_1=w#Lv87Bl)sGj{z}wYhjacU=n7K zpG6oOlQE*GbU+lXHxN)6XfvJUfNn~fkG2MM^ODP>G~A-9L7fdruYS_BeVl`{PYLr; z2?wCgeYQ8e$+Goq1_u|ISIjL3_Li+C6lafic<4ARW-etO=603G-4>4KN}i`%1&(#b z0H4|UDYE>Y6A-6ZL6h`^NZu20SR@2>QY==h3G$CZyeU`k=oXA%fK3*6H;0b%p%s%J zunEiBQH@|bmBs8Fb9W@p;YPG=PNsl&g~mp7%Fj1xPNWueayP-mK)1fsV4t7B65!ca&kZ9Sysw zK=5q6jpeSeLa>P)yV{vS`JArkb8POYX0C~R z+OseU)HU*q_l#C|p&QEH~B?ZotI-o_@)1ZqZ|7OyiW1h|~nHebeD17Ohf zQp>jC02l`1wki&rqlm3adxDK5V=}60Om4HIVQRn(@}zg7Qm~AD^x)hLhB#LUwch1H<##(<|<*wjg@emDm<4}ZA%pB>5OpO z@T6%)6R99;W^B9l-kxO*wDBxh+prtBa~gJU^mD-GXVOzTF$TkacuN>s5yx9%v?-~6 zck4sP%{E=IZ#&Az`docX)yMQ=^mTvs|3Wjh)c+c-R3GK~Sfr0i%CB?K#iO$gHP<-- z4r0U#VirQ$f|{z1#;@^o>SLQeM)h$}A4hbb!O}SZvQfk|_MxDeD=JQRA=($PT&204 zo8|2?=Uxit$hZQl1FwH@#jY~U1s579I$E{!BwKqWjVTFluQY%PH-l|?=psa}2nm-! zD|0n6Jv9pF7K>%fl=_!zbJa5!iD(@`u0+m7-uCI^fDECz=$d?g$Ho~a0&4O|9{YkC z#;#C=>}%l5W>rBdm@P8Zkb_%F|MF9kFV!q0(c7T-JY}jYdiPKC=VSehdIq@iE=p z?x}J1nanxF-epLLbyKdd;2ei4b`7mmcJ9>2NM1|_tXPh!d!ip2=c8k~SPdR;$Ti`!?e@?gXX z+A;0Bbydwnh-uinJ7PSLfi-i+Ll%t3JaF0+=M6nR9}nP|6C*J_rH1S~W=6=`*2B8N ze;D?jQ+d<~>xS+7L*@zloh#PP!L1xGq=^fPIDaMjD`FP9xpdqsc&@E)n_O`hn5$J@ zPre#N`KtNzaZ1W-JTii+wlF8B{KT>M1|3{bJFzAp)*E!j0iQ0|aEMUzENDhup9wTf z;=W$E^LV%`Vx*$W%EOwX9>>BlFCxjFF6zO~Ekt$lyhm3RQAY_+BYa$g6MkiExRaA& zEPYF$%39YjB@x>OY{i|le6fit2_xoIXqSpehe;AspPn}Dnu?`XpDz@?0jEcNx@&Kn z?Y^$vBsT6y=%$BiH)G^%~;Lf1nwOT|LBBFq* z8Fb_DxUDCFjw>n$IdL6S#i4@-h`K6y#MUgF+U69O4xv&ZBU;BOS}2WDM%)B(Feo$_ zP*)=$1b2-wn7w=iZtpU--*ooLaV?-r%I7)Tt}2^`NcSiOHm(Cr_b89BcaJ)dvnm0( zQtDWR-EvPnNyFZ?-`Z9d~&&6RU)*O6bLy1+eL1{b_hvldAKV#+;N0^ z*_%efouxj5rYArF1Q>C_u3YVpn?{)TrV-}7X+#gM_y}Q`6w(Y*bKasm4V~16opZR* z-C3F^Lvfy$r!#dcQ92QyacFVdN2wBC=Xuob*TYvGM^J;VHQI@seq6%HA@(=Qv&wfA;eca8rtiI_L2i#EjWCs zNKrV)sV#A+6U~QX%9s`@LBod5T_6l8qh z_3Sy+5%-^{fpkXHy*J#whvq;t#>MVY?0$CdQCOQ%8jVl*(GKzyvh<)X!U!PHPkRJE zOolirdA*Ktb;xHZ<(XhR+@uDB`V4s!c8FnjB9b=*Ehb<1hC(CnTwoE^n(vImw&_s}lRs)4F=4dhZIfP} zN1d&Q>7U@C18JT*E|5SqS7DjXN3c?hZIXC+#`$FDXo3ZZr`I6jJPIyD>Zwowkn~Pb zG$KaIs%bHQ7M8uh@G!=MHa)c8+IPBT3vNl4$LaXnv>Ln2q@)wu9MX|!NuXV*FML`Q z^+nJL5VaCCng%Kh#r2GuhU&ulg1BrNL^Xb=)Rw83ieu28jz3i#-a@Hqz*%b2MO;`v zV!?Recmv#m5ew6z(uR=m=)8^qx=pS7zX3%DoTVW>VUJ$51f88?>QfusoM=~1fF6?! zt9Lw@?+AP676!nI)(+pl*T^goTt_oe(7l@QY6%n)8h$rcl?6qkqidL)*6xnul8}TZ zK9C>Is(V>7pSGTd@7&8%E|Qy?;Mj)uDHv3ctzR&?D;`yaBF3s7gn`NCtP$IOgMu

=LI1*zej8gP86TN>2C8fO9-T4-B^+#*eF92W)2v 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≪u!DwG=hV1e8cD%LnpDQJ;_s} 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�V%L=cGyI3{R}A>(9I}nz0ar) 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 ow;QqrCrb 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 ->7@qptt-lZ}dL&&)$ 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

CC5kd%h_ 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�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�X5MX_ZWURfX8 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

L)ya%?QQapq4hU@Gbnxg#fqsDnIW7geP&p;b= zfALDZ(kE+>Sa1zwW-QpGi6<-^Bf&H-PNr1th>cFBf^?M~tsUc~btj3okiu(3+~Q=| z;>u#Y1)qpqXHU`KeSBqf@W!){$WFO&+;mP$U&27EiM-*no^4^r8;oqBn#$;Gu!}BP zHS6AU8jf6pP9>L);I?I%!EoZGsiI*{6PlRfLDC1|VZ=N=<4WZ_g}l=SnFTf+oc7Xm zyFKK`oDREScSLTJX$45o9@;f;Z$y3CDm!u)OtGifh49K*9K1Q89|dvatP^~l#N$DO z$H2*~Nh^vHPbFU}VgcB(B&T6?t+55>@Is6-+g<^o{HJoQ}ccInQVjsZ%6HJ zTlGd5rej;28F^=BX^K6=o*9;BPxnS}l+T2$XWBFE8JzX2Ha;Vy>~alLM11euQFzna zW;bbi?tnkM=JYiIzl3NhtdQ^rLbmcpMUh069yVJTBfXt+Y^)Z30{ryC7dY@5_-*(U zF#NS^Asl(s7vcMR+;9##)MP#d+?L=#f7(Zzc&P}_n9gSeOEw(kOz0%~uHn_pj(L6I z)l8ZvlsYc=1v7N>6mNRVo2NDRH6Klsvlj3d9Y;uJB2k&{-x~P1Ld^LI3qX)3zH(PS za)OPQLzV6g;hT|Yzv2(Xm#Y)`@{GUf$l%(YS)OltFJe=BHSbjX&gL)41H|xic<6Vp zLg4|AJX1g=%Lytb2_VH>O8DdCPnGQY3{$zZ3{B&msoLz*R@}SFP$D*VLf(q*8pdd> zi2IwS%H4KuOjy*{j|y*DvlV9x=0*5)d!RxRU)vd_EbEP55+89y|?-(e5{U*qwhc%S$ z*KrCbvj#*V-ZyC{^Q7M_#qDH)T(D$4j|x_@qxoZ6rXq!cv_Qt_gsp*TuzpQn6$%SZ z#y@)%S!ZG615AnffmVqXHHYF>wzNOmQwc3SoJ=Mi?WS^<-Lz@#)PbbkGGzF>7=I#s|yqAP2*w0$A&n`d*9 zpWaS!50ZSw1Ik%$tmz_}{@~sr)+Ft^q2A=*gpHHhTR>lmDQa4cd!K`Bn^;{NmAp(4_-$(O^8~VM6kG#KB9DR3{>L zY{~4|7Yu$6C~J9}ak(*GCoVzPvwGIhvT=9Jpmhh>NB4R|JW{B6$Kk$pi>ZMKq2sW% z+#4_uLfC3aS*Po`PO>FQwS#7lMg4s#|M*C4A)C*m$_gFV5VvLPn)`@>Helj<78>&v zaznLD_fcGwP47OK2-D^zvSwF`ti@#UrY|Z#Y+;EACQf;YonRA-;Hfu{n5Z|8m|zAj z*l$q=@@@lYu9~-7He1A=7$wIMI*D{D4n*OV6!lkSF z0Gj(Dtr7|)R@uurmPNJ>9E*r2T000{DY422~Fcs_s5Q+raN!_%zuO%+q98XY_%Z~<-lNeH2qX`Sa(z*)StjhQo9utzce21N? zUX5mrZo!}R@RQ3`PwvAz!ePbIc6yRJ=@k_ieo=DoZgKA(UEViuYH9NS1Vy<|BIV2a z+Z~IqO!B)V$ANovi;9K}FzHyt`iQ7}q=E6SG>uIGNzY69!^cMS3uNzESDb>RdvlaT zzjPm>B#)Br3zd!=nI_=v$lN;;zExQ@H>OE>?58j|{`?{Gm^Os#bDe;iCTR>M)KD5T zGVukMKxT2rp!0){DGX;r#}A?zE6lfmMuhupZZr5+!AQVpdX5;8JbJ-_%BKo+chy2a+! zoTkzs$XKB;(F{@!iW0!2lQ7XyfR(M;Mt_|Fw*;gk%KmLTyYO%*EX;Fo4bskNwl>RE zcEpU^Vlv~_l5?DhT+ElB9q5XJ|5F@og+MfSSbS?Moou&7o^@-_fdJGV5#c(>!tzeX zp@rpI!M~&4uG@3~g(6+c_*|#czY-I62Bo%f8!rbLrj3^`5HMi*n##*p-pL73qt$LL zJ9cZmsDVbK$>3X_>yVFN0MD2cw`JAh*Up15nXz*$flUMNG?Kso!Qf(k>m7wKOq|Wt zKq?2(<{5PGPCr(tCqj#EPTL^b*N{k~?f|K&rkBqGKh_dHXxPmHIjXyK6o^~Ve5RLX zgLo8XG6SR|63vOsmmwKz)W4Uig{nWd$=D$k!bhUY|YO@UX^VnJYtKu!K1GIS;Xu@r2 zcRrv6b}epz?_YxZ4rC=M1w1kud}7`>VMI(NSqZk3Gy}*6SxV9;K8r0(_*=p-)EDub zgD_o`7TiOZscHss5Axjv!~gwp;d0e>1&)cHe0)n!!Q3M3NjgerpE85_#nY7LQ6g;wBy)V`%C|SxcsFvU+Vmhrej8e61rVvnSquXVzsVrYcSMlUz|zns-vBepk9z zC{v%1?la{ayGm)jRhcEn7;yK>-zL@jzEQ9D&G_rqVh>2YZ~1VGX}Mn7U7nJ6uP8GE z?p=+hJ=$#}@1BoT^s)*fMDH`=jyc{v-bs4j=hsH{zS5-4!#X}5(NJHzyE1TwV$T)z zzxJQ3|MH;zdo-?pVctK~fQLi_8r6T^nPL6$X^;P!wEnNwvNiFt6|cVCCt9-WNi{85 zXL;}Rv89Ic6x>Q#$omSWf6GbH?H0@Xmp*P^c_(R6)hgxf$TbQlj?e4tL{gAA!wVTD z{L0B_=Pj7H(k}DVxw35sD9Ir?&dyV2ZjpL*o$eL=_oVH7J80*|ir8OxB`p8-f#h1$Lp@YjPduB9 z`ps>P$|PM$(kvIu(Ju=P$zG?{kY}nh+S`C$ZBS=J=naZW?T=wh76 zWjF-+_Pp3$$ojvpDUs{nspR^VR$TKho&?X9Ue+10|0iPXqcJ3|mJPKq)U2qozb?n7 zH*7nK9&gl%9xyWxI4v?Wf{C$ey~$s~sDWz7qN@UHLn#IBHNf ziD}8KQJKoeBFkC-ZOTMEjgU(X{scu1_s_VygYThoyak^GXI8u)T9<}6qI5npcoDJ6 z(pvFJ_122zE@8N%vJ3da{THib3%cjT(WE7bVxrCO023?JT&O0o?1bFytu=Lg8C?s= z>YLUs@##%Mk@HkLdeR1K;3Tu84b|{@4J+IRYg9_sC?9G9Z=EXboz?Bsn3KkH6J-z> zGm!>n?JV={nXCcPvTTsq2#!9axr)!&Da^`F<@+AW8mYmfVsb~aDeu^Ww-FL)UmCZ- zNEoi$0%JtxB8Xg3vyo+$iqYmet(>4WOi%$K6Z}yO|9CPC*KI?QFf4Y%3C{;0povRv zF7<+(84jXXNB1a+b_=iajNY;wdth z4yaFujq<8MaT{i3w=s&@rXtzpyjhv{T}8+!e^-igjqNZ~ZI$~zzyl~6&Y4QA zm`iGn&L=Hi7o1PhSr&K(Gva-hs3Gf=|IKybNt60Ll{B&Qvrmt(^KpLfFy(*a^dMbE z8y%PFcx&i*Kh&?~@Cm;loF1LE{8%;I%)pJGYpa3I5#MKfJMiMcfSFw4!u9oMQ%uEa zmvY1>73Vlf-#(*cKOepu*7TT=DYA@qui|$gd4v%KPr>*|8;%%ibNy@s)7ygEIIqrrJPVs;jvc0 zx9L4Z8bWbMO>7xQPZIKSGS%OIgR;(?AZts0i`KYy#VJeMm9%dt?g_+|c08CD!@Hp< ztHH!kN8iIbqJh%#Y?WX2K~E*4j{Y(TN%_xj2zWZ&bF9@eC!<z%WK-Z|Y^?;NcwKJr&vO*-gA)o7B{fSI25 z?>-~)riRo;TM=zEEH4plbhH0c%%izZ8*N3k(bQX_Wf6o}LK|&`+US{Q2AzvEnDo($ z6(`t-J6cHuZ+~Bk>8wT`w>=? zZ=F@s_jFb{tL$|c?>GJ%3p?d5{^mDVTG>_D3~9GJTc%aLQx$ypGv&X0b~Hb1S2ui< z&@OuS6Yb^FYo4TjJMJ7*zwxLqN*lQ;Tgk|GIQ(SIJl$(TdlXlWh)RgRmg9_p`D`0bh?Zq<)_*D1lP#zsmz#aZLHOBPMt^ zQ`s9r(>T^6%TKH*ceI58=i1F|&D85Rv(YN`hiqn>ax?qu$e!z3E~jU$hFjUX+{)JL zx3YDyl|4)I%G9kb39*YUj7-;TVQX>=TZ?RA>v9WQ%Nn}e!Ui{QVH?2~wjsB$O|gYt zzfEj}+r%bs6K{)b6AS)oH)VV}?*&T!>TP+sB;_A85_#P9HoWtY8@ZW3xA5myx@zM7 z&??S)Fq^eOHprx&A7+~4Of}9%Bld)I*0~%*=2r2&MSL+)@kOoD1W9h^ly|6n(R6=BTsY?djV~Fz z1D=b4G+W=wWnhHH;&5J(&SkZ!+pubdptl(egTeDPr>p=b95pL z**fo1aHm!GIS4bWKkEfDS>10SEay>E!MDlSZqCNLu&c>+ci_4waNUcSXmEAfcpqNU z!N~q;Y2e6q&qI56gZeP+^9^A4A#7@RO#|2{ z!uGGLUjx{)2wPSQ`&$E8J`1n|YGF$oz}6sazgpNO4PXy7fc>HY%xszn`{U?Dyj+6u z9&W9HJ>CG;kFbYoVaGRsy@{|#YGL{2iLgP0J?qrK4r~BB5n<;SYG4;3?1Ea@ml1Yh zE$o{JyQmiSGQzghmeFhj?Dkq%Kf>;)s~^Jdtc9&Z*j=@-e{WF6RT%Gswi;OCyos>i zV7zU$u(p!-&Om)X{zN zXlMlEY1Ip0g)Pu;^&12H_{<#q?j!gbHrKTsg3vO`b~0?g+OTCRFs;?+rz$3`&2JiX zwO2H?8${ zh9cPScH%u@5V9YhQU=$0NzGsKw98RIFIciYxj>PUGY}kw^5+`l_4&CzXIrS ze{C?j)M2ca_ZnvYj={E94B}y$vHoF=lA8Bw4qr>ddYE}r)T<|~7uV|97+Mg+%6Mti zD!!Bxg7l5&p&;FCksuw&0w96y!+OBm^m32B;X&w2+*5iQlKH=eB<^&!(*67M1 zOpSBIcmA0Xm5~uKZ9Ec2lnm6GrLjwuq zKs_58g=--^i7WH>t2m?4&SbK*&J0aVrdncTVUo>O%<@Ycm37afyUz59f9ghwGf06p z9XDX3AjO540^O6R5K6;KKFkhKPC54~))OA34s&g310cX3kX8W?K}#9rEya>iw^95D z6SMJ(0e;%LIoO|ZqwbLc`rywb#3+X>DaL}~0Iv}kY}QB!N=F&4gg zy!9wQ{VVU4qHVi8?yv!ljdBZ+9L=qe5Nzt+2Zrbe02qqW8e`jEJDeZrSZKL-Hx7`= z&Zw6i){X?eUHoU^T3_icU%Oc*i2Z^p3+7fezbP zmbYjiYTpx(V9>IF79aGy9d~V$?rf|U_j%nXVv1QgN#6vk)6M70{)r|k$V4J;G+rTH z>eI_*fA$5i2-zy#494ru7hHgLAIN-iDVB#MmtP>0FxI`72GK|cV%)nOhkTB(&F5b& zZ%1gv=qa+J7n~l$$D(Un=1##@PeTl(@=khiS3C@!veRRDx_~lpvN@;8&W8DvTOp(l zKTV}Y5askBO0Qln$ymE%Ce3-f+1m?TFf^LIy$59REhcMu7km$ALQ}*{gguBaS=x3u zr>ak5PAzte_kC>G4}#KC34qZt-_j8>^!q{RR25)9z?$q2Kj40bs^M+JgYjh<|LGup zdl3K1Fg}e)s0>Yz6L^ByJV6}WfeGS>lMU&@az6FHY3-7SKiIZS9ez0Ms7Hd18vcrO zCRj0U5B@zCHuow+Tua7!aO0aq*=)Cj4X5&DT%buq1)5}{Q= z3VPHO0iBIHAWtu0SGNx0^#VI@7pik{ zj7?$e+a2~4qD<;A&Xn@uq9^FC-+4zj7|nYPDzhH7qs6b+M|e1hP;QP!&wUUp=8NY{ zo?q?*tw`%C);S-OHonF5cx6y*i>69#(RTvOxZerc5yq^*pw|SuMS>bea+wv$g&*c6 zBjFiv`LpYCY-rJ`$a|^zPxVNp{|aGKPIYw{R1qHLf+%V#&GjuWFkiD;!QEzF z%Nk>K{Y|Wt-jS)gV4Q@N#~hC#i-8og)WR?=0%QA;FF;vsqO8ukvb>j}sAOsTI*#-S znT0oC;>iG-eNA+IWmF_Rur`Z3EG+Ksy0|XBxVyW%`{M5Iu-M`Z?(XjHu7kVXdCzyx zxxc<2Qfns=h>#Ur(eQo${Itk#jn)+n#RVS(i`So!IqP}jv7G1(cyIUl-h zRc9BUuj|ku0XC8RQ=J9t@2UrY5;D6XiJE{MX*Jtu@8x@fKWn1vn4BWJV?lw=4Jppn z@H7?JpM$t+*`>cVE7}K%wHM1JS^U=gi=}d&L@OD>G?3x~>c@Knk z)aLrsj_{ZnhFbylVSEp=*e0y!iyk5ji8xD?IlnWqF+~QzpDSL;nY^`6A<4RCk{jyd z4_%U9QTS0OaTEBIZPC;@%;?qMc)gL|g$2D+&JXx&AX;{n?vX6GZ*cNSB zHND8SI_TW%1Kp*D=^KIvxMcKxEXp=O3DgOvR_b$S({FO8xs6)9Se%XB%*VMjH1L{0 zW%dCbY&w;QDbcW1vO-a9VR+;$DR2HFqgwrtaBXkZo{g9<{4F@_>m4ThclV?J3sG*P zDOG?bdd7kMwh3usQvdXzBF7v^!-m1OKGmq}h{EFRmg_>T?FHZS-Vs)PR)JwD857g1 zVh5!(Ggg$32cna=q>jO`%fj@Ek zg|z$ewNi#BDmqR0Qs=>!{=Dp)CVWPv zWkwl6IlhwWx)T~@tz_XSd$gAcZqnEidyS!9x;e^ykTNUxNZy_#?LezgA>|OM9hhSW zCr3~L>CdJHCs#(>8?j44&Far;{+WC>k*AXL((J2z1QVRH_StQvca+po7ZI<{p?HwO z7o2>d&m_cC{^mlzD8Ys^Q9XmxbV(&D!xn-pB(Evnq{{9wAG zC%$nnj9Tu&aA=c%@Nw}|zdhkQB_wdMugc4VX5;6#cPgGce}eQUAcDUiYzJ8=Q69nW za-bi2I!ZT$&-2zss-obhOY&CP(rpQmAidO^ZsQ<)EGxy<$D-7^cfz}LQFru`_{4if zON_*HT%Y+VM9bAM?RFrZ*WVX!nHx;)G^7sAk6mL zoXF6|FUqvW$RXniGgq zJ4g9DBrDRhZOvsS4iUES-!8=^qY|6p9Rl;3s*->uEsT&}=0n7QhcO^r5#OYt7Ul#`+t&L>V4>;Mi4G@5A@t|pR{ zgNOO}hFUZoo=k`LwdP%7uIi%X7c!aYud0t=6ix*oM2|3aIxN^dtw{uUl>z)d{TAgeAE)=4?{0Dud97>5Sr76o^ z7a4ZXMfK_zV8_p40Ns{y;)0B z1^~Hi0?U|SBEpr~ixWNH2CsUrjATqn2@lF{_Kp($bh@@*X47%57W|csgT8)7Bm+K* z(2SPlY>1m!68)j1mq?ezEst9E5+mhoMorP3y!%nX{6SsC7LI#~8~uKVv%zXo8^~mM zDt&`cwZEp8Y&p-Jt+KfiX-@11?@woM6wxwQuGt0E`_n<+=ukqV{Tiuk^g4oV z+fEg={v#m5DAoi`t%=bCvvVWE=Prcj*s=7F=?yh#OIJTqzb(nI6t3vL?&YZ*lF+lzhQ)`#Tu9#^s-$62p4|fck3qOg|1o@2&e?42$E}Lk8tEP9nG3{>x zW`GwD@y9rc=jtsP8~}?fsdoRcU(554&ZD)9*f3L)^lY>=(czUb$jt%eU|J}hzj)Gd z5>iL4N9~ir#f4yHt~)TH7guW6$jya1re3O@Zf;9)VcmSU4L0u3rJ9v)k#=bRShbx+A$jrB()?}I8G(u02}OA zb@W{P!!mTlYf=;5S%nvPd9p=JEa|)wk@R*l2Flhx7~z1aSd^fI`Y&n-`ji&^2t?O6R?@4jJ@Z zjLB754!u=)3%eOY!IsxyAYi6MHR^Q>jZn#r&7q7PDH;WIMDs|_?} z%+?!V7Yzm9N`ytw2OP}*9R8?Ho)$eob9*jx2;Y`DpZRxQ+vrny3?leEd_s=T=^%I_ zxS&}l41FxEp$(ZTIgEv@+U5aYfF6I3bDrbA zJ~xjF+^}6w&w>1T!rs$0s*ky3n?>EgE$6!HEoXajAJ~tVgz0h#HNJ@~Ji^(Rj2H=5 z09G;Lhgd1Lw^_Tr+39$7C_dxrtI~U_U_b!%w!M<(6@ntICI|?06>KQEFMejYvPVTA zT%~d4eH(5tM(5FI3{Y-9z|$A%Q=0P6jWG88B|ew7dU1wgo=De_5;ls#s9Zd%+OdYQ z6|K1@SBl5#xgZo{Qy&wTWfuWuFOh>XojhHJA@4X*-{T*DNGT)cS5T7pAzH>wl`dcuz7;YxS#ntC2A=MR(74TMxXn`$E3BhMZv?7TCR(5AxoOj<77d_J(#%Jxa$`8K z|D5?oHf3W(4BmMcG!R&hah`O9?(sp|Wv4M`wEqPgjY3vDX8JR5k}<%=kXjeIZOn4R z7&^8Un$9Wa5SP*fH#!TYHAtf$yH_IiAx0~nh-~lK!vG0=xwpBzcRB~(p&mj(hUR*m z5jXF^h_IbP4c{5pZ`h!E^1ZI%JI2w93`MJ{uDNoDPr13Z8Bwq;-vr6Z0(gQz|04H+ zrQ18$bZv-4meZv)6n&IMCRk2IV_tKSFw7` z6qb`Zu~}-j^7qEQZfu(`vm{wpgy$_DNm1II_7ScZs2|$d8W#i-oeeZ@ehS8Ou^w&Be*4xdWvP5mVP45ue zvy2G*pD)5HnzY1#NooEMrcZJ%1$klw$n22}HFQ~7 z$?z!B1^m6)k+Ci0eG0eXu5p2L{H79Ts%XogqAST?4JKwP@ZSc`CA##n3wU zeatI;)Ph@}X7V$6Ca;~(ANVHtTo1R>zHzVO;C{jBx!V-6ru8UN1h}m}k~elIj^oH6 z;nRE8-N&4d0GDHgApHS&;5R8tc7Bod)koF9xZvh^g= z`WxF@+mb6vrIOqbu(UwWK@QY)qRs`q+~ht59J9Hu8i|I!7!r>Uz-eJFu2yUx7+z@6!w z_tq#u_q$_4mo8o&`TMIws15jCfr?-{yE1}70!2&S)gle+OOtw|s`{jT{)!wMMf%fQ zZr!4R5_tk&S}1(fbDZ*;`vL|M+n=+TSKUdJH7`sKK-0U8amMBQvErXzC=sOsT%$#u z^~_LBR^%{V&DsLY`WxW`>@~1_UZD z0s1r7M{*#06Y3XkelQ0Fw1r?%ur*d2SA5K76gK*kq zwqx#>DD`Qa6&to@o$azZY{o90X=zWSYN(?#92 zXDmDJRX{i!K|XJDHWi+V`DI)!*ZYj<`bz8x_oaBu5|Tww32a*$Hs*ntnLPY1I*r*7pT ziMqdU>?30FiR}=sy>{!J#IbI57TT&{Tg2)Kerdi`P%{Jv=xy^)PRk1;?+AF)qn=f) zPQi6?#vKq{hxYUEChPj~rx|R|Y7~9~GFga6t&a%1lK3-X4~_sO(UxWvGeM5_G+Vr> zHP9J)_0cLXrAX%Y4|i0^Y!ULvEI1}c$~6@s-e4QqOHWIgLT`@1Yz=Mz1QE)FztG)# zQm>KLp*-I6FX;-EQDj`DFeKr~B?)WR6r6uwpWn80XW{Q4I|?0eniiBI8Kh^OSeJNA z`RqeD{zZvwrZ5!2jLE!fCR@qhX$mcU@cV&+oE~ibY~#Yc&1U0cK$@n0y@=Xr#~D36 zX|fLN!teYmDVr$n7FFbxs~OqY7TopDjcfKWCKwPWY%ub}TbY`0oaL9Y{wJd5$a>l} zCfPC7@jSV%S5`@TKpsyX5SlVVknzq)zRLag7L%rkwb8TviDm0a+pXiZ>&a8~L$ihN zP@_P=lDY2r)y!+QwXYIZ81u?&@<{GZ!ycZ>CGHgkuf#xZRQZ2n;G#Z)kr;PHC8_Uk6)WBiOBRH1a5;)X?zd=WSQ^1P%7`~NwOqnX)<<(`K4%bTZ5+&ocy-LZ-27$WrP zK;efFbTh8^4>Hx=w<%^UOF4h$j)x-+$!&R zh|ty{xZB-xe*yUHebnG4Bsz~79)8h`P1?V4B#hcO7qYg>{#0FZ)C^_b0G;Jnmzm>S zQ0Xt~FhrWo2Ho3AP$_iLOtKP2lHOGgkM~-DH?yEBAZ$wCH){Mn))DUQ8BThbl%6Q6 zc7THZ0X;QF>^Y7Fb_yf?g!f~GZV|h}btDMP&^;|*|9~vrE?)UPI9+;WLO#4LIOiR5 zoC1G`YCsn}wo3{P6HFfrFY|cFC1N{GM7Iw|An<2&7vJ8no-n-=0L2=-Vt#iRo@6DJ zWThZn_oBapg!-2QP~r&XV*&_Koe@`M=C(xo_!{R!*wSzPXQx3Ad;&&i&)5xS8?2WbC4=bxXS;~=pBVh59@CpDc-x^%#18I)k-?<&v8Mu=7L8x<( ziaBu=OuUzr5lJ^~bmXHkSH72=`Optb_eLDdqfJt=2BAeGjo+p1xP7=y3$#>*u55 zQNBdT-tws1*m4>7Q?@Y*VyG@Zq;R7T?+hJh^mu9OzObcLQQL>PUGIv* zU9q4!m1$GD)snS#?2o-0@>mrUb+SueUs0ruWO)Tc+|`kKzdICL6qhyy4Y;XT<8p8@zh#L0O+ByY?1tAS%auHd*7< z_=g4HdBtEusehqCY79#W7*!zyny-U5eF(4AY6}DwRA7542TU2C7^BeUBD!_X*E2zT z2N~r-Jkmt^qSP`O@4KZ~(-;lnq~NX0q>K+lzKl(;F6q5M;SK#`QOVBuu@r5qcxr#R zwAb6_gVSj3aa2NOR2m7#o6=}I=lC~qy#hj4c1vZNaF`8Q3GSYo2*qM3;}vCET=VD>;wl+`XX0;P+k;cux{JP4hg)oJ!22hH~?z?j*^P$Ipp>2SX5 z)`RhNWPwK+gf{U0W=5{n=dm9;!=>xdBQb@Eb!Kh9Sg&J=RPWTPKbAx>a{socm@L?|E;E-fSmJ?50ezO-wOJ_x-@KRrn5fjD2D1;r!(Z+_3WN;fsVnaK@58uW8-lTM~0MFVNq6;1xntVfHo6&a#JT@rPk%MJwO1@fVp@fcO|VQX&*CIs)4ThQ$Eg448U8 zpz2q@R)BZ|IFcC@ZVfz}3Ml3Z?F_SOzEJrNk|LD-A6k!o@8B&uP6bjy-F zS0BYrqbgxQb)}P&uE0?+FV+qE2`k;PxnCZPu9;v!b*mHb;V01v>l>WQx754fycgoM zRr&l1K(_kF1jK)fQwNILv9;hGJ_vSjQipI}2CZ7H|7Bc6Pk2zJ^+i9qvVgb=v7^cN ziRKp28s?18dUa&}88UuB#br)*r~1kDHJLN`*)#2f$0~RxKWrWDdolcX8EnZX2IXAH zMnaGye1%28<^;wrGzUn9e}TsMfR5}4$N36(*YUbXg@1;YdykIn3}^ogN4G)0x^hXj zaoYC0a<#{pX7Di}(Xvj_@CNtP63p-(tlt*A>etuFxcgghSDkV9hv2S2nnPh9q+v3$Cif$jeUmpvjVWD(SZqzFYFqIFnofw$Fhv-cNjOIh+#Q{3= zA-RnfqH4XrcE}0pk-4%`$DJSXoJL)n!Y_RC z&RB!DwayD$O{N<3flw!uJ0W3c4*1h|!cg11c5sw_$|;7e{@PgQlqcrOEuD3KL~9Op z7nFXfN!N}3S^?(=ki0RSdJxQ_ZiUhhKk=~IUkh|n1;I@^Q6QLJ-2kP3Y|K@?3?}?z zCe9G!5LbGv_NoZNn?(oaQ7HxaqL`Lo#$qL(Z7A! z=})zo`@GBP*2lMz&n#RV!gc$Kgk8Xg7P&3)zNtmDtkC|8MJ3t36lafk9nm>-&!fof z*6!+)BZSEtJ?F2c{jQWTIg<;~{ZAA8xFIMLa*C-8lj!^#dRD&(mS;GeufU=9k?{Gh zv7aVIG%r~u17)O>CG+-t!Q$D!OSfBKVvtM*nhPvm5l@#*Zlz2l#K@`QE=$|)IU3>^ zO-Z$54}$B&s2x}8u+nyA>L!dhZB8rb3+w@PiCsx_X|v5C&0p{5RL{Y3280;HcfEVr zWK$`HGbNP$(+W0e24l8bSMn=anIj6i_+I~Jt5l2*E zm^Jwzt(45g^i}ib5J*W9uJI8v{o`Y#ck#-hZ=W$!>wMQv-kY8~shiPxfosU2o$jO$ zaWJ3DjoU7G?6IJRFYJ1kocLp_U9dcII-Vyy?i-J1;HSm%rI$G=^?e!!{60FEeytd0 zq@FOa{aJ}+?G+j@>SQCAW*$%0P-8s)CBH9{ag7h{U6S<$=Ot)C2aENbm-dc5g)o;m z5$L@kYpDhHm4I6wxQbm-P>K7Uov6_!DS13S|uX4aDl8t7$q6! zAq5|2+8+`J-U7|x7pJ65@Fq-Ho|4470HLuhQBTE!4tnbPh}%SAPcenZvcDa#45vL+ zt)DI%OL#KF1f9Ju8>@ISFm`81^255F#>M-BE$s#;IKEQm4Tx|F+q)Tr-AU&HJ~moT=8HOn;codz=!>Z) zHXpT z@6Vj_xhJ%HU%pq|l&KWalfQb9aE zK|F$FKR@_+QyOfO8%TTvg7zihA4;qwIs+$`3;0racmHj<+?f_o*U0j}=Bc<#nCZUP z(E25Z73R(jVtGDuVd!7%Ucu}|z>6>XY4?0;^~8E{EpDOLqCj8#>vq^@5j-B+SHck7 z=(kt7fg<#)i6q+H{a32czb+%|K0CgAx=iQM+wT~AwFk$PN2qX96t>T(+1$Cqxa#^s zL>61>CCWDfqB>74o$A-RHEqLH{9T(~YNJMmTv2p*|e-j~d1#OKeU6Cb*c)_?YPoG7OuDyA zI4dSyER9sr_v!lm;3fBPwCq@p(jKe)(Ulg%HBHF$;VlyUH0brnW9^Q_W9_D6^x6za8Rh%9c(+G<>&fJ;e#{wDHt9+rzoRI9Ji2?dx;Qnz}I`P-s5RHK4TQ{7m+=rWp=rgrnt$p?)T4?9 zW#FAl^E5l3m7ErNABzon-E`+REi5LT8xz|Gdo))=U8i<8_B(safRnFYvAEK+oXk9< zo2~QKV!6nt4GlH1^L%A+pcs^g!>&=vZr){&f$9<*s99%3Im>r|3I zE~fd_wfJad5tqhOHqEa|#92k+|Q30r90c@D|aEz9y62WYu>=$P%nPanZAKwRU=X`kSJ z-9AV`(0g(EDHZ-MTGtg7`9@FN9eN_;E-q03Zu?yWkvCH1l!PC>7rMcttNln-{6_~i3x{5dc$|07wDXr}NAhAK3a*FK`bDM3d-KnNo zn}t@vcg|R|pT!<;-YjCk)yhb$)e7fVjn>>>{ZXh2vzDw^n~iRl@L`|mt}SnfZ(TQF ziO@FsEFsj9;aE8vT?%KPry9X>XhQ+H7QiT+?xPHbMKXcBM;h#%f_n5U+!HyL?3fs+ zEkx%?ndhCvd!VHf;CrLrBO}q$vf?B!fZsdt5J|R?Oi}o1g^H#45f&&|LXKqJgo5?{ z6Qe`u#-BMH;dB3oPkCQA4=9zld4W{t&3a!8US)XV45bwt@4U!BVy*A|uSu=SHm6eg z0mycOyE+BhZLv~(ano67(;m}3%UojevDR{bUT&}}Wv^=Q-Z!9jY4eZyx4&y$P5Jb| z!q!UmRYK{0u)S~)`<|7#k?f{%K!rGXAfed3q}dxKp;4Xzxp>y@S<RR6LLKwZ7PhHghg&02{iI1nPAbPz5L44uFk8s>u6^SxaDSC@gMMGRuS@?NM@zJ-j^a zBs@3o^Q5EA@5~pffI@&hx}7dQ;AVquL&J}Tp?EF)$xpA2E2~{aa;)Ygs8Vk=tZ1@@ z(^0aN?3A9Ay#h`~>{f6nWY^kzaDRxbd1rs<-lj@55(jg0TnRQ#peW;NExknd9;}=F z+|I~zqr#nY^yTrZ`kmU`;BgZPFd}HEH0m)*VBT=(PnFV|QXoL;Eh&fKbQsXo`!1>^&-4(++l zZadIQfQG-XmQE(qqB?~KyABTU^<9}k*@(yoZOz6^q`hXKxMX}l9)C0O+n)A`=j?y{ zY3}!JV*R~um~RK9I8P;vbgWJD{ij3w6nzK?K7KNl1FA%x&+IDtlJ~E_neiZZPuhMW zwpZb{69?P7vgbJ^3-r8$u?k+A$2R^xT7D01k+x{vl=$5e-0CMhN1<~{Rix7gEl6^S zM!CHkMWZLSgMT`VjMTfdp%_Agg$tQ}GX{PvDd^@8`xwVt&V0BR1m=7rr$V=J+J8;% zjM~l^e3eGxgD3n4~Ol z${D|UG^`?7aduZX9AiiLX2$ncpPHDyQK`0!2+t3&m$k_8UyK@jU+5lE(uD* zkFF+?KeLTU-w>yBU~tj(4^exzkbAEyz4AM69*{w39ZV*X{tIf)b)|PLyIYvSIE!)3 z&GGh6k`+PJ^Y>zuthaG1M0SO#5WkBheKo_egmSPu=aKhTBJ0*>c;#44sPtxuBQoHF z;jy~$*lY#Zo$bhbX5K3A&;b?Kto}FW=^CGjEfz|_UL4V*`H%mXY{kjQyD|1~4!DaT z>eoihW&qw9dK3oK_YH29Y{7)>hkalpUrizSUCg0&J&7>mCk3sXpd`H_rD!wjZ_4KxUHVm|8z&aem6o&hm+)c~+lLyct(xqIeHYkFia z>?QWpS3bmZTm*~A_4R9&B%*$=LGaKp!%m}@p8i_B8`MifjT(<+P;qs>5l`$TI>JIe z#Bo{f)kekCET=l_LVC_alVx#DyRnFWF?Acs=!$rztu$1BImXg$&u>XWP+n__mtngn9Y9k z2(ou0Wm;kaOLA$sl4^#-u&JlcPXC4qa~k?|g&*_J55Ds+WI+nVMI{uM4@3I>CZ#); z-3Aig9d0{*^>v^6?Q^y)H}*BR)F@})zSZW&?wV#>RL|c{XLxjXd@nE;MDY5AveaLa z9*Y?Jt0(527;~@SrBEsX4Vg4$53iz3N?V-Yz6GcIYG0VyBr>USYWbU^sLnFU zn2$z^slzpOy1#j3?6?gjPiXFQ_0L+ktc;Yjx;L9Yxg#UxR3X1y8z=i}d<66HME8CI zZd(zzKVmCa?5ENFPsK>C??266H0}qWZZSFrR_h9V$nZNA6zsEdKgrPPme$UUZCKW6 z^MYpsu10%dzcu04R<{sL>Z9C%H%FtYuV>5X(5Q`NLepVRe{B^}6*K2ua&3ZVMXUfa zBz6khSa>P7u0{nF3Ny5ULBw4xzuou6U(Lm?m#&WV$KMM4q9k^}17-?naTF*?C^Hrg zs8-;VekP6ue!{d0%5R|H4m$nlMewj?70eXBb- zJ=Y}z7fRV%&*?%EpKYHs_NFI*mM>E4jUGpf3NXtzGTk&c{D`4jC-)OC?K1wZVnvUV zBeMckTdub8m_L^{JnRPoBZ?LNy16GG*7s?SI!LqJz;W$9x{yoiuGdWl^^FmA)oKs= zDTd{u^qVNw-?56-t_L@vR#W9pgKvSsa(|2>OQ|TFRcAjF)1O@T-%4wr85PbArKm$i z<%-Ll&R}ny8sn(aW!KSBMi)rg%UI@e$fg*86?>IZoM*POsogZ29$%>@)lyGE13pDE z?x(foqE|(fJPh|XKSH2+31nOVq%PJ2wKH-s$~qe;e~&_&>T6pn-Wyc%%80wPwe>3X{db3qtm47T*A6}keph2)?SR%kg+xSZ5aVeG`BuwWq z@PoJyD=NVd*j)*G^6C_LTqz~DS7P>*Tq`q3FzL%8OYXR$rN*eW4xFQNTda^hm7%SZ z_P^YcG3OBkS@7pP(I$s$w`*v)wk&CHP=5GC1TIH=JmbK}exwbI%6NzvA|DGarf?<8 zKXV+!lJB?9o|Mmb*0#G88qlwYqhvPXN#A76Ox~(sWBo&%bfN8A zQfWzTA6NRAI^L7}AryY@gvi;KM(iBTs9Br_>>RbISvU~KA2rKepZ-)L+KbE6^8hq( zRVY>0Y(5_}PoPHiA|ln>DoBG~`b}deVeyM`$>is(hbLxNwAL139%@rziho0V_Ah(U zbTx`uDU#i!6#Ti$^7t)M9AUUf0`0?Q@6-D4#vO!tiR~Hu&ic-@mlZ8W{yzbsG8?fe z@NUsTJ;yn$aJ)h_?7hb-pEGYV_ibX?K~eLq8rPe?)|Ql8d__Z#9d>>V0H5#J20F5- z>Old)_dc8gN(r=PIwBlH;|0=qptAO#_(OACaJv?m14ZU5s?lMR^TDNa0yasZl}0heD}P; zlt91Y)DB(M%(Phco)%i;NSj!VS54_QCLO}qZv z;iAR)t`)S|Q?R&>^pdg?$r3DM4B&?O^MrhDPTW4bx(+&i$ikc}oQgYKku%)!b>suOI8^R&dcIN+V`aLo1E9;|oJ5<<^*VXqtgkScBImKo5Bej^{x9T1Y)Bc^mj zP2vid+-87Hc(QfNsywyLemYjz>c=mYJ;lqspycIja^INC!63W+jW^*uei zg3G_TQRT!`LnNi@NtfWK&4>pr!^}06P9JquDx+TMALvJqH6N1SCPqO@3@{u92>`=S zNS+C~S{B?&ZXDJvzm_~!s?(aYC<*bUO^xq&G-Ny-CUCu$E|>L@Tw+)H=K4N-M6q1P z_aX-F@-iE$=Ark^u`fM7^X>dPYx$NB`(KVxbnpaXU2Cliztd<5Kw4{7F*8HiV?i0@ zVyjD0V8ddPVGxOo74^6^j7MFalvu7*nVjNKrVq|lsNcuVb}LYp*&{`t@%O5jS#f9V zu~SR)-I**q&2{y2>DG7<69(=%w&~%N+M`6zYp9H7vs$$4g$u3QjYQYmVmH{D&P@Fh zln-(Xg}IDowTRoV9lmizJInttSjk7~kH&An3k-52LtI1Z6>3*xvKN&70coo^Vsa@C zM5s&A&p&P^)0TUs6Ti(q^F1`d9Sx}$2MXi1B3K?U7AfM40ya5SX|H<8b ze=7!yuct!1{wY4=Z9e?Pm6oBBjktM1-acv9NVTgxY+*?N_6FG`KZayNNy71A>dohV zacPPzTCi=Nk>783WTQY4(7CASScm&SgZfZ5B_92%65GZvh7-@@>_&z3`_Uv7%#Vol zTXsm${nrd}Cz~iZ*EU%mCh4~o!j}zHIO5}k8UrV(6fhk}gCpKgqj4J}`#!O>=3PNr zKElSkU-^1|=%zC(DwE0JCQ@(Wvq-+~7DPv^j+r9#gV-C+XSh{mY9Rcvg3l%WfdaRe0pH5V@L zZ4G1lZ;2;rv^4LGcU^Hhg}DGt5~Tp8ypIvvl_Z{Hr;%}!OWrNAjLe<=o(7lSiEhp| zAA3W_&Xt`D@~+3c?_EP3>;`4boG9HFcm82vuhrp~l(T{g$IQ~dTO-lp&vw0o6q06_ zd1?8U1lqK(_6q0l8KlZ~?_)w4^T{A5%FeP33?^~bl2I(On0KrOX~gLf-w;3UW&RUJ z^BJ?BT|=Qp|L(e~_+13Z*oBwIma@^Xzy)48Da>>UdfIS-^ktmOwOc{ zStQ5VE80@kR^daS@N|8?o+}^C3W#?=U4l)7mE=|?T$Z_W{8GuO$s$g)Hzu!#>K{Rx zIv*=zL_abzzR7-k?8m}*uXS{oYk=ZtgDPuy}U>Q;Kh$boN$~A=&wm>-u=R_ptow53718ooU<6 zC+k$TU6%ck8WFsI)`|VynFxZn^FQe|-Xnzhf)K%j(tT*I%J7taMS&hxjR;pqR{P9( zGq`?%`rE6(WjdB;`__d+-W(+6hPTWGUr+zJL%WVA$62DPDGU$mbB^u=gulTIWkaEE zw~qlY8BZ`3^&@dPN-;>67hb5uC#@{72_Q!#I_&Pe7l3v-pg?zn7y^n!XXX8vO00pbnrQePuh{_)g$c*$~0c~Lw z%(>n1AZ*IY%v@lo{K}As<7wCG;vV&)4fO*5{z_5sakPJNC0L>ya4Ax|KHE)3bYqyt zrxe4F8fc5yt0(cb7x!8_NmMn2jL*biK;J-( zdq*OUn;R>ecGL^l|8y&9k=iT~WZ3=WqzyaF)i?-}kN zIo(QO1|SX48srPTtZv+_dWV#=D^A_>j>zi2Gh9hk!P3z%lJQ>D{nNh=mzNsyt+ET3 zF6_D!tLu$aq|GwMjr~+?I&-dM>SY8e&rCP&3&~AFlQ{* ztG8$rZOp(bp$kI6M{(H48dRIT`o)!Ml9gG|n0>XlM?j{llid+azmok3T;x-avBeF% zBno7x8449}CHrBZ7dH_nc#Op^Tsw4J0k9RWB@?NQ0zKl>8?aF6S7JxYxle|(Smgj& zky>Ao+C!2RSCH7_|9T=%b~nuQTzm9YKGX!)8w=aZ2;U0?&7se;|L!Oz>#+X4;ko~xo6Rv#{sU1qI01$}OIepnTw4R0O>zJAsa+4^sCU_C<%MMBH>f78<$18X;SqfQ z%`n$4y%^iL6+S^XDOfioBQn2>7}N{>@Wzha{wA+N+^nb-Nk1D|*wALhxl0rHP)=oN zK-48@T3t&6O8WWQ$9j6BbSIjvg%8XZ*sXc@%oivv-q*}FQyXpk zh}sOCMkxK_!?p@E&K9^El|P!pb4USw?w&-jcse6*zpl=Ep8`;Cx>1rFJp}E8^{zFs zoznU>3|&sW0vm_-&S<GJ9=DlQ%*TYHv|7_V7MMxg}E2yiEM%E@cc_uj_5XLt+; z7i36PKP&L;rPd*Eqa=^WnY88-O~x9GQs#*XxL>tfYt&coH*73#x29D?OMLAwp1OyB zuNN0O!8nV#3^e4dS8nj-&UqvtP=v)U6PK&AbP0sln7?lk3-mn~3cWK9NnT2NL~iX` z{=2_spe&jv7v|^xBSR%}i$j?R6!=}q#(FcRs7a5WuaTW+y!Z-sViA0whLSuifx3F+b@2YuYC(^iON_3=^0EdSe zIpeIBiXE@0z09~ZO3g1C_?LBKBGi7ep^6)2t8;7oP4JJg*G$sXph4nYy4LKziQnV@1>a~nW#)HWizm4U^0t>kB*MwZ;$Q02uvzikwW3Es$n z%};A>Dat|HdFc4}dgF^YCFA)Y=)8I_0!Ptz&!O?{8b{%wSSuVg__o%Als@@#vaRR= z+eYL59YVUNgRWbn?DuAE9^LoTJLmP%A2q3rDWKnj9)p-b+d|CYj}F4vH$zfH0!l7y<(Db&-fXUcaD{E=os;B?dGvzwIRdZONDN)uY=Lh(FJv`QtUNN?7M z#%iK{DE~xs5aPDwLW!Y+ z$^6i?+FC7*`=9m}4z|EMrOwB3b)c||!1@8JTw~E5T1I9f*MWF(5{|KWxA@*QZkSv4 z(S{}540Yj)P)G2V?Qk5#n5Bp5AvXPP?vk!FON0w|x!7)1a+X>|N!88a%~QBkIW=W7LzjHogn2Wm=S8 z)UK!aY;6f?t21j*=d4z{P8f7nEh;}jS9@*;Oywu>jO}Q9%6Sh$iB;{{i*dM?8g75T z){f!I@}y1P%AWK6ARdN}+wY8Jk3#ZMg3A_|*<>e^x$|So6tpbVsS2$42wM;hCeWNd z#wK)f2&Hl@#EQv__2o!`wg_dCXsEo~FRMg=6je!%pHv&E{Lv#WltjR5qbda&|BAnG zyN+rnLk-y<(^`H6GI42LRO3^8iOM9rHjX_hXJ|+-mY}LpC5G`@&sZ?3m;Z$Rb^_~Y zT_)yCcnd14$Zp`J+WO>Zqiu3^joWdku5qre`f^Nqc^&XZEBkbz-1i!8Yg~?Tt85PK zHPw(d%8xeSes?VROro>=Yy%#0%GwF20JFdsM)IwARPZ@Wz^yfqfaMK%XKxq2y*Me8 zboR$sC9A51ofP#kzZ#E%L>e;DNa@hXs?rZA?U__IlP-4Hsfe9kOD`Yt&i}`zi4@!E z+(0I6rz6nQyb4XX*0~%5sufMQ&UqBAbs{%Xl)6kbW=G=Cp5Mnk<(u(*qGlG>$j!7m zXtP)+u?EgOm>x!jf0t`JysAygP+M-O>E5A6v}-W$TT}M{)Xf=uTA?Ao5BhhO0aKEX z-*Qhs8Cd+!O@LgkjpX-6j`_&Z^|rzhWy1LUkMQGg4Mncw-gc)p#)?mLZ(fD3w;n)k zl~^k`cKK#kx*3U9&OoW)5Uk|n61rFXmcR6Oue%8N@4ez^hl~893i)TRI5kjMr+8*4 zR0>bnse!h!MYe62SZd!_+VJOl<<`VC^0uE{gp4Up!cVO zZV~r$99ZK!D{JJp*Qi_L;Q(LsOd4eeD;x+AcnH$nu}{RbZqd&DIQ@-K2q3#mg2Cd1 zw{ftjuIXa@0EtERfBWyxbxI1o<~MDR+|rc|KE7GDn&n9{f|Vjxu_VD(5H8fv`>3XtY1VSnsqTY$nwFbF zdm4)=Kg7JeOwU&=jkZz?#&O8Ff1j`YED7iOejoKM zD4(1F@f}p;6OZY@J`z&qN+D&l?;@ns1%wnKl|14~B~d$C!jnQ$D&g|$(VBOY{o6!s z)?uC;vYji3xCzN0`+tx~urBlqdBpQe^NA+Mev4?r^&_dZZOU@Vwn}#4eJeO-IM(+OwhMrfUUB14s#>gqU8P=G*Ik|h4hoh$Zj_e0B^ z1NlP3XM%%e(IEn&Lxii=2`D;5@mSfP716`FB$I$i%>-6iXkeYL8Ovk>QP+nRv9cIJ&B|kmZkb zHd71oM>=ZPhRYwdAb-@_wNW8|)Uo^_1ddES%OCY3OXGITPE(Fm_JzDk7ZV6o_Cd21 zuhd}&wLr)tdtzx%*6Mm?d(CJw_w?kE;zLp%c~6^?tP$qjYPye?vI&^aWZ9%!Z-9UK z<>+%aN*WFMAs#29)K=%>SnLy6G$VhJB}532SkPs1blg-Y^NwuA%x8(VTBkKm(Z=Dp zAjFqFgslCUD{JEbCZzE%d;{1Sz5(nEOU~(Zy8oKmhH%JZSR;;M=*4JL!kPDuZwxal zyNU+G@uKmn3G)V|2Xs?z!XBWv%k7ts0I6~y+KKI~Exd+Tc6Wo)9Tbt!+eewu1 z)q+1s`7t>07G%H!GTBl;(MrbNkniW~fQ>yY#mN z^*#^#l^?_ENY#ugoPuGMqRORUSbeA>DHv82sx%6Q)q*OBf?*Y)%AjCa+*I%ihDA$- ztYBD-RGregGpZTpf`K`b6Td7ie z*3+c5aJReah_#8Ym@nDF;;q%{G)FI7Msat!qK0pwvcQ__!f6zUUVhfVSN-(L^B|rS zbWc<%>_Gn0%5UX9L+NO}xuOLOICI8td19ZO2KNeNlF-OrhM?yvhOYM3m*Y36H73lb zH73N<8uNU@(;E}{|Ef18$5L;6m58MfBjOxOsmYs)asgpDt{({D&+~L6G>cErnNc$^ zl~0PPe5F%*fRg~6#g93fEAqv(89a`+>B}i>Ies6ijNdOP<2N#y^w%A~$udQh+dPX( zAYrh=lC7kgi&PH68w$3^SSCcV;uel40&ar z6kg-E`~$bfV7g{Nx(=fsj;=DtGZz$kI3DzpkCrR)U1)MCwofUA31YcMD?3Cb;!Z}rf z2Pohs65LV&^AfyC0XLQ4z6w~7;LnuMixMm-oFxgKseoM)995imOYj{9?2+IOit}j_ zJXZmyOK?{O?3Livil2QFd|UxHli-Dl^Ud81Q8;HvFr{#AA;D`D&VC6VsBq4d;2H(o zQi8WC&bN|aTH)MUg6}Jw+emPw!nv&k=PTfL68xj&b{W1FW>c*lu6= zGK^s>$AOt{*(6fuv)4(-E1Plp_D{S5U@Dko|2sp5xN;NpaEQFE+yx!?$_&a+_$Rxf z%QJSPaUAg?ur8MF8#w{~TNblJ3aWur7VuU(my z=J9J+=A^kjv36w>^70iOE8CEOe{$u2VC32{4T9Ezv<{Cpk=zU7BqZXW_6$=eqq$yC zryz9-Ax!NgDVCzn`JBe2CX3SvwAQ9#+2M396Dg+SF*`CmCv8V^19&T9Y}KOP4~LN3 zieF7{b_s8KA1zGM+XixjZF6Cu9Ky`6jPQ6J)y{|UdJ^hS8Yz$AgZax6QM7bKHc^aF zc7i`W(TF)*`UH)A89lqAgp5>PD~c!(fM9@-*%i|z0<7jBC4+#7sV~QGmOrZ&<)@=a zBOFRsU~f<4?~!}>4DC=|(+;l*kE21`kU(%b0R@-$P;iN~O-n?Yy2nM@x;u(m!%|!GZCBn#-=OS}g-&BrTu1}2{#2vY?{7hMJ%-7Rw*b#D@vBp{XKY_u_pO3=- z%aWxxEZ3<4*4=AKJ)5bG!gs+Kbua3xc1C3Nk=d;; z#$8cd$dTwkB9bgd`2D;d%dl1-+1UMwW%k7Cj9uiY|=X!BWJsD<_qjlB^gH$CZ8{^%A|S7`4= zTI{M^T9oTGjABjJ%crPz4TQCDto|t5lXTYn(Ot9mv4n?gKl>8p_K0T1*Tz`s=Pg{v2^7zUkbA*dUnZKc9(2IdN{X;*c2EVn+@Io0%Jw zb@|Ycl!|0zSM*>D%k}OF<(A98hUE`efY^HL@PItjvo*&y{Aik{(iC!Qv~p4Xf_%2 zx4X*_xLz>E?&szs<=F=JMCcrayVhhtwwvtQMutn5Hh!zHp_dVVhShLIG|bi z2Wg`Yr@)THNu1;Qn1TAZnBsx7QcR@Fq+v{?8M+1TAoJK)bFDLF1SN+-9A$-r6P=Vr zm=vsEMd-3LN>u(Mh$qEA4P7K)gPBO2D1+EvS;e_FbT&QEGg^4HWn^#|-;1!Lgji?- zBrZdU+OdV1nBm&u3p4RJ--tQy>R1WQ@c;0_t7Vr4LG@mpi{~gmGA6LtX8G@AwrPEf zEcu7szRl1EG`{;wUyk*@v2QmSct+Rr$X$LE+XfPgr7S+;+90yZ8qPlkqyc`vRhE12 zTRL;IhqT^;+nSEXGD(#Shy%u;LBo2InLIPMTK!35uYe?U`U%N6fSO zvcTC{UxRKTDuan)6c|f?HVePkmv>Y8C+ni-G>DAggykQ%=u$lH-H4a>hvOcQA9C8- zn-(OkQnI~i2xlVJ>VX2ro}hXUYC|N^<^p6eR~HTx;Z09)&gH(UDP*zCmg2N0k2m-g zepQU>kW@{F*43Rd^x@KfLka+a-UpCqGy({X#!p*fj|%RTJ_g6!Rf~XSP>&2k&f@`v zUOiW6gl64|9u6m?C=b-@!znA)9kXIv5EaAeeLXARaM{_{hj6{@-CVUz>lC@y;>*3P z=r1rwa<SHtL^H)3@10C)#7$zndo zv&U@i>I?>N4T5x-V#o1_WyiC2islx!C8kkna2oBcH4QrfA}~fV+xr7yOMu@~p`}u{ zHMN+6barAF->1h5n9`5iI}Du2K*a?sS6WWSv}XL<1AM-epQGVJ8_-!`yUz7x@rK;t z+yZcn`w(ZCEbZ84Q_pycfCUk-let023g~XgTI@s$B-|vLZ3?15VD^vzKN93~=~J-A zas$*?#lYHM2ZI@BQ99N&A?`_=oJ7N<^w5hDaqgFK9$3bD$o+BB`P`EWd|k9r{vD2@ z)AalU@HNW#m#(tR4VGgu+!9CZ?5NwaXpAaY1+Hn{K#@@EYJ z$Gxujyd0L`lDZy!h-`4=#A zvSM7{NzC6l@Tu~8{ZOq3+(qi&oxKGJ)_ELdsZGD#-c&@L>s8_?j*UEKeLGGWAcrx>+z6inRLs zH>i*eip6;aNjLfr1o~0 zR!n}+Z6K}m4}nV`$({K4ARs@ z%CEV89S?q0XuXQ-vC!}2w*@CS^3T>;{WF~Z7j{HKVMG(kO<{^SjGLOH2Y2N}^y_<) z9A`U9W0}-Ppp^0~&;5FDrqSvRi~>$0vuqUeE5(=FX&0ymPHAG`ee2D4kn@RA4uw{So>GyCTy0m zI5pD@muq`ROcc)?n(N2PUt7FeJ4&K22vyX`S;K{j4<7H{x1l}LExSFVHZo%)>Ux3B zv61n&V2s4F`424`XYjssx>I>3j8Vl+v9s;WB;tKgFm{{@t(vz)M4PuFm!7g4x%_sAd|T$#H6yz?tgUm=1zox1xT2~CZdX%*b;{M}Ek?O? zes1yLyrf0i))Ww?ZzrOYZl9Hj#8^RP$ZAAIE9#O$NkQ9~k8Q*3eL5!N8RK}SVltjn zWWNVO;P`pD`Ov*K>E;{|cdNeCPvYLS3iB@>7{6G!SS(q`Hi-4}eZc+k_+}qwXo5yP zXgNkYE+o}nNZoTJe8n*VYtxWID

3b`)kf*|n5RN^r9H`-r)3tN??9F5Z(O9q~F* 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

8>(5taT6j?~B;bGN6se1`}MQ*r1~9Z&Zkg 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 eoN?iV&qBdN76C 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

VU;T&3X5uo%G}KV$l-a_ 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

d^>PegcvMgIH*cZ6IeqoYbCucK6DLS^sg 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%0DX*)-$#yjuXx<)6^JHZcKHRgNYhvgb$mh+T{1cCM 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�m4EfsD> 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 g(U*cFP&h3Pr@!%~e5APL-Xr>t?`wfqcz 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 z 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

8^-AK(&>%zhk0_050nmI(z%?c0PVM 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%0DM1Ap=2`)^^s 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%0DM1Ap=2`)^^suxWHd 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

ns-Y_XHUhMZQbh) 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 PSKzLo6zLy&=s}ja7xZ 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 ZiA#!K_ZTii(C+htUpV+rR*wii{R_;<^6CHp literal 0 HcmV?d00001 diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.1.8.6.nupkg.sha512 b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.1.8.6.nupkg.sha512 new file mode 100644 index 0000000..03fe433 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.1.8.6.nupkg.sha512 @@ -0,0 +1 @@ +ch8vDXYeen53wP28It8GS6PEYI01AntvpVUntx5D373ZFe4W+vtmQgxZO2+b7hzLh1xnZkaKqbNaZLfBMVrNGQ== \ No newline at end of file diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.nuspec b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.nuspec new file mode 100644 index 0000000..af31c1a --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/bouncycastle.netcore.nuspec @@ -0,0 +1,14 @@ + + + + BouncyCastle.NetCore + 1.8.6 + BouncyCastle.NetCore + BouncyCastle + BouncyCastle + false + https://github.com/chrishaly/bc-csharp + a BouncyCastle redist package include .Net Framework and .Net Core/ Standard support + .net framework, core, standard + + \ No newline at end of file diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/Mono/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/Mono/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/Mono/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

+ 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.

+
+ + return whatever was following the tag. +

+ 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.

+
+ + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

1.3.6.1.4.1.22554

+
+ + pbe(1) algorithms +

1.3.6.1.4.1.22554.1

+
+ + SHA-1(1) +

1.3.6.1.4.1.22554.1.1

+
+ + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
+                LinkedCertificate := SEQUENCE {
+                    digest        DigestInfo,                   -- digest of PQC certificate
+                    certLocation  GeneralName,                  -- location of PQC certificate
+                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
+                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
+            }
+            
+
+ + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
+            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
+             }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            CertConfirmContent ::= SEQUENCE OF CertStatus
+            
+ @return a basic ASN.1 object representation. +
+ +
+            CertifiedKeyPair ::= SEQUENCE {
+                                             certOrEncCert       CertOrEncCert,
+                                             privateKey      [0] EncryptedValue      OPTIONAL,
+                                             -- see [CRMF] for comment on encoding
+                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
+                  }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            CertOrEncCert ::= CHOICE {
+                                 certificate     [0] CMPCertificate,
+                                 encryptedCert   [1] EncryptedValue
+                      }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            CertRepMessage ::= SEQUENCE {
+                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
+                                                                                        OPTIONAL,
+                                     response         SEQUENCE OF CertResponse
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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]
+                        }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+             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)
+                             --   }
+                  }
+             
+ @return a basic ASN.1 object representation. +
+ + Note: the addition of attribute certificates is a BC extension. + + +
+             CMPCertificate ::= CHOICE {
+                        x509v3PKCert        Certificate
+                        x509v2AttrCert      [1] AttributeCertificate
+              }
+             
+ Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
+ +
+            CrlAnnContent ::= SEQUENCE OF CertificateList
+            
+ @return a basic ASN.1 object representation. +
+ +
+            ErrorMsgContent ::= SEQUENCE {
+                                   pKIStatusInfo          PKIStatusInfo,
+                                   errorCode              INTEGER           OPTIONAL,
+                                   -- implementation-specific error codes
+                                   errorDetails           PKIFreeText       OPTIONAL
+                                   -- implementation-specific error details
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
+            
+ @return a basic ASN.1 object representation. +
+ +
+            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
+            
+ @return a basic ASN.1 object representation. +
+ + 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}
+             
+
+ +
+            InfoTypeAndValue ::= SEQUENCE {
+                                    infoType               OBJECT IDENTIFIER,
+                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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
+                         }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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.
+                  }
+            
+ @return a basic ASN.1 object representation. +
+ +
+             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])
+            
+ @return a basic ASN.1 object representation. +
+ + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
+            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
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            PkiConfirmContent ::= NULL
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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
+            certRevoked         (10),
+            certConfirmed       (11),
+            wrongIntegrity      (12),
+            badRecipientNonce   (13), 
+            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
+            badSenderNonce      (18),
+            badCertTemplate     (19),
+            signerNotTrusted    (20),
+            transactionIdInUse  (21),
+            unsupportedVersion  (22),
+            notAuthorized       (23),
+            systemUnavail       (24),    
+            systemFailure       (25),
+              -- the request cannot be handled due to system failure
+            duplicateCertReq    (26) 
+            
+
+ + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
+            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
+            
+
+ + Value for a "null" recipient or sender. + + +
+             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)
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+             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)
+            }
+            
+ @return a basic ASN.1 object representation. +
+ + 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) + + +
+            PkiMessage ::= SEQUENCE {
+                             header           PKIHeader,
+                             body             PKIBody,
+                             protection   [0] PKIProtection OPTIONAL,
+                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
+                                                                                OPTIONAL
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
+            
+ @return a basic ASN.1 object representation. +
+ + @param status + + + @param status + @param statusString + + +
+             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
+            
+             
+
+ +
+            PollRepContent ::= SEQUENCE OF SEQUENCE {
+                    certReqId              INTEGER,
+                    checkAfter             INTEGER,  -- time in seconds
+                    reason                 PKIFreeText OPTIONAL
+                }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            PollReqContent ::= SEQUENCE OF SEQUENCE {
+                                   certReqId              INTEGER
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
+            
+ @return a basic ASN.1 object representation. +
+ +
+            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
+            
+ @return a basic ASN.1 object representation. +
+ +
+            ProtectedPart ::= SEQUENCE {
+                               header    PKIHeader,
+                               body      PKIBody
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            RevAnnContent ::= SEQUENCE {
+                  status              PKIStatus,
+                  certId              CertId,
+                  willBeRevokedAt     GeneralizedTime,
+                  badSinceDate        GeneralizedTime,
+                  crlDetails          Extensions  OPTIONAL
+                   -- extra CRL details (e.g., crl number, reason, location, etc.)
+            }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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
+                        }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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)
+              }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            RevReqContent ::= SEQUENCE OF RevDetails
+            
+ @return a basic ASN.1 object representation. +
+ + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            Attribute ::= SEQUENCE {
+                attrType OBJECT IDENTIFIER,
+                attrValues SET OF AttributeValue
+            }
+            
+
+ +
+            Attributes ::=
+              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
+            
+ @return +
+ + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+             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
+             
+
+ + Produce an object suitable for an Asn1OutputStream. +
+             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
+             
+
+ + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            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 }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. + +
+            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 }
+            
+
+ + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
+            CompressedData ::= Sequence {
+             version CMSVersion,
+             compressionAlgorithm CompressionAlgorithmIdentifier,
+             encapContentInfo EncapsulatedContentInfo
+            }
+            
+
+ + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
+            CompressedData ::= SEQUENCE {
+             version CMSVersion,
+             compressionAlgorithm CompressionAlgorithmIdentifier,
+             encapContentInfo EncapsulatedContentInfo
+            }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ContentInfo ::= Sequence {
+                     contentType ContentType,
+                     content
+                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ContentInfo ::= SEQUENCE {
+                     contentType ContentType,
+                     content
+                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+            
+
+ + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            MQVuserKeyingMaterial ::= SEQUENCE {
+              ephemeralPublicKey OriginatorPublicKey,
+              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
+            
+
+ + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            EncryptedContentInfo ::= Sequence {
+                contentType ContentType,
+                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
+                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
+            }
+            
+
+ +
+            EncryptedContentInfo ::= SEQUENCE {
+                contentType ContentType,
+                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
+                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
+            }
+            
+
+ +
+                  EncryptedData ::= SEQUENCE {
+                                version CMSVersion,
+                                encryptedContentInfo EncryptedContentInfo,
+                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
+            
+ @return a basic ASN.1 object representation. +
+ + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            EnvelopedData ::= Sequence {
+                version CMSVersion,
+                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+                recipientInfos RecipientInfos,
+                encryptedContentInfo EncryptedContentInfo,
+                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
+            }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            EnvelopedData ::= SEQUENCE {
+                version CMSVersion,
+                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
+                recipientInfos RecipientInfos,
+                encryptedContentInfo EncryptedContentInfo,
+                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
+            }
+            
+
+ + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            KekIdentifier ::= Sequence {
+                keyIdentifier OCTET STRING,
+                date GeneralizedTime OPTIONAL,
+                other OtherKeyAttribute OPTIONAL
+            }
+            
+
+ + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            KekRecipientInfo ::= Sequence {
+                version CMSVersion,  -- always set to 4
+                kekID KekIdentifier,
+                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+                encryptedKey EncryptedKey
+            }
+            
+
+ + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            KeyAgreeRecipientIdentifier ::= CHOICE {
+                issuerAndSerialNumber IssuerAndSerialNumber,
+                rKeyId [0] IMPLICIT RecipientKeyIdentifier
+            }
+            
+
+ + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
+                     * KeyAgreeRecipientInfo ::= Sequence {
+                     *     version CMSVersion,  -- always set to 3
+                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
+                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
+                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+                     *     recipientEncryptedKeys RecipientEncryptedKeys
+                     * }
+            		 *
+            		 * UserKeyingMaterial ::= OCTET STRING
+                     * 
+
+ + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            KeyTransRecipientInfo ::= Sequence {
+                version CMSVersion,  -- always set to 0 or 2
+                rid RecipientIdentifier,
+                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+                encryptedKey EncryptedKey
+            }
+            
+
+ +
+            MetaData ::= SEQUENCE {
+              hashProtected        BOOLEAN,
+              fileName             UTF8String OPTIONAL,
+              mediaType            IA5String OPTIONAL,
+              otherMetaData        Attributes OPTIONAL
+            }
+            
+ @return +
+ + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+             OriginatorIdentifierOrKey ::= CHOICE {
+                 issuerAndSerialNumber IssuerAndSerialNumber,
+                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
+                 originatorKey [1] OriginatorPublicKey
+             }
+            
+             SubjectKeyIdentifier ::= OCTET STRING
+             
+
+ + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            OriginatorInfo ::= Sequence {
+                certs [0] IMPLICIT CertificateSet OPTIONAL,
+                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
+            }
+            
+
+ + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            OriginatorPublicKey ::= Sequence {
+                algorithm AlgorithmIdentifier,
+                publicKey BIT STRING
+            }
+            
+
+ + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            OtherKeyAttribute ::= Sequence {
+                keyAttrId OBJECT IDENTIFIER,
+                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
+            }
+            
+
+ + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            OtherRecipientInfo ::= Sequence {
+               oriType OBJECT IDENTIFIER,
+               oriValue ANY DEFINED BY oriType }
+            
+
+ + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
+            OtherRevocationInfoFormat ::= SEQUENCE {
+                 otherRevInfoFormat OBJECT IDENTIFIER,
+                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
+            
+
+ + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            PasswordRecipientInfo ::= Sequence {
+              version CMSVersion,   -- Always set to 0
+              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
+                                        OPTIONAL,
+             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
+             encryptedKey EncryptedKey }
+            
+
+ + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            RecipientEncryptedKey ::= SEQUENCE {
+                rid KeyAgreeRecipientIdentifier,
+                encryptedKey EncryptedKey
+            }
+            
+
+ + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+             RecipientIdentifier ::= CHOICE {
+                 issuerAndSerialNumber IssuerAndSerialNumber,
+                 subjectKeyIdentifier [0] SubjectKeyIdentifier
+             }
+            
+             SubjectKeyIdentifier ::= OCTET STRING
+             
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            RecipientInfo ::= CHOICE {
+                ktri KeyTransRecipientInfo,
+                kari [1] KeyAgreeRecipientInfo,
+                kekri [2] KekRecipientInfo,
+                pwri [3] PasswordRecipientInfo,
+                ori [4] OtherRecipientInfo }
+            
+
+ + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+             RecipientKeyIdentifier ::= Sequence {
+                 subjectKeyIdentifier SubjectKeyIdentifier,
+                 date GeneralizedTime OPTIONAL,
+                 other OtherKeyAttribute OPTIONAL
+             }
+            
+             SubjectKeyIdentifier ::= OCTET STRING
+             
+
+ +
+               ScvpReqRes ::= SEQUENCE {
+               request  [0] EXPLICIT ContentInfo OPTIONAL,
+               response     ContentInfo }
+            
+ @return the ASN.1 primitive representation. +
+ + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
+            SignedData ::= Sequence {
+                version CMSVersion,
+                digestAlgorithms DigestAlgorithmIdentifiers,
+                encapContentInfo EncapsulatedContentInfo,
+                certificates [0] IMPLICIT CertificateSet OPTIONAL,
+                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+                signerInfos SignerInfos
+              }
+            
+
+ +
+            SignedData ::= SEQUENCE {
+                version CMSVersion,
+                digestAlgorithms DigestAlgorithmIdentifiers,
+                encapContentInfo EncapsulatedContentInfo,
+                certificates [0] IMPLICIT CertificateSet OPTIONAL,
+                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+                signerInfos SignerInfos
+              }
+            
+
+ + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+             SignerIdentifier ::= CHOICE {
+                 issuerAndSerialNumber IssuerAndSerialNumber,
+                 subjectKeyIdentifier [0] SubjectKeyIdentifier
+             }
+            
+             SubjectKeyIdentifier ::= OCTET STRING
+             
+
+ + Produce an object suitable for an Asn1OutputStream. +
+              SignerInfo ::= Sequence {
+                  version Version,
+                  SignerIdentifier sid,
+                  digestAlgorithm DigestAlgorithmIdentifier,
+                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
+                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
+                  encryptedDigest EncryptedDigest,
+                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
+              }
+            
+              EncryptedDigest ::= OCTET STRING
+            
+              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+            
+              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+             
+
+ + 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. + + + Produce an object suitable for an Asn1OutputStream. +
+            Time ::= CHOICE {
+                        utcTime        UTCTime,
+                        generalTime    GeneralizedTime }
+            
+
+ +
+            TimeStampAndCRL ::= SEQUENCE {
+                timeStamp   TimeStampToken,          -- according to RFC 3161
+                crl         CertificateList OPTIONAL -- according to RFC 5280
+             }
+            
+ @return +
+ +
+            TimeStampedData ::= SEQUENCE {
+              version              INTEGER { v1(1) },
+              dataUri              IA5String OPTIONAL,
+              metaData             MetaData OPTIONAL,
+              content              OCTET STRING OPTIONAL,
+              temporalEvidence     Evidence
+            }
+            
+ @return +
+ +
+            TimeStampTokenEvidence ::=
+               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
+            
+ @return +
+ +
+            AttributeTypeAndValue ::= SEQUENCE {
+                      type         OBJECT IDENTIFIER,
+                      value        ANY DEFINED BY type }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            CertId ::= SEQUENCE {
+                            issuer           GeneralName,
+                            serialNumber     INTEGER }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
+            
+ @return a basic ASN.1 object representation. +
+ + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
+            CertReqMsg ::= SEQUENCE {
+                               certReq   CertRequest,
+                               pop       ProofOfPossession  OPTIONAL,
+                               -- content depends upon key type
+                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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
+            
+ @return a basic ASN.1 object representation. +
+ +
+             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 }
+            
+ @return a basic ASN.1 object representation. +
+ + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
+             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 }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
+            
+ @return a basic ASN.1 object representation. +
+ +
+            EncKeyWithID ::= SEQUENCE {
+                 privateKey           PrivateKeyInfo,
+                 identifier CHOICE {
+                    string               UTF8String,
+                    generalName          GeneralName
+                } OPTIONAL
+            }
+            
+ @return +
+ +
+               EncryptedKey ::= CHOICE {
+                   encryptedValue        EncryptedValue, -- deprecated
+                   envelopedData     [0] EnvelopedData }
+                   -- The encrypted private key MUST be placed in the envelopedData
+                   -- encryptedContentInfo encryptedContent OCTET STRING.
+            
+
+ +
+            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
+            
+ @return a basic ASN.1 object representation. +
+ +
+            OptionalValidity ::= SEQUENCE {
+                                   notBefore  [0] Time OPTIONAL,
+                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
+            
+ @return a basic ASN.1 object representation. +
+ +
+             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.
+            
+
+ +
+            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)
+            
+ @return a basic ASN.1 object representation. +
+ + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
+            PKMACValue ::= SEQUENCE {
+                 algId  AlgorithmIdentifier,
+                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
+                 -- parameter value is PBMParameter
+                 value  BIT STRING }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            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 }
+            
+
+ + 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. + + +
+            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.
+            
+ @return a basic ASN.1 object representation. +
+ + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
+            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
+            
+ @return a basic ASN.1 object representation. +
+ + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
+            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 }
+            
+ @return a basic ASN.1 object representation. +
+ +
+            SinglePubInfo ::= SEQUENCE {
+                   pubMethod    INTEGER {
+                      dontCare    (0),
+                      x500        (1),
+                      web         (2),
+                      ldap        (3) },
+                  pubLocation  GeneralName OPTIONAL }
+            
+ @return a basic ASN.1 object representation. +
+ + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
+             Gost28147-89-Parameters ::=
+                           SEQUENCE {
+                                   iv                   Gost28147-89-IV,
+                                   encryptionParamSet   OBJECT IDENTIFIER
+                            }
+            
+               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
+             
+
+ + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
    +
  • 0 single-ASN1-type
  • +
  • 1 OCTET STRING
  • +
  • 2 BIT STRING
  • +
+
+ + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

+ Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

+                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
+            
+ To read in the time and Get a date which is compatible with our local + time zone.

+
+ + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

+ @param time the time string.

+
+ + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

+ Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

+                dateF = new SimpleDateFormat("yyMMddHHmmssz");
+            
+ To read in the time and Get a date which is compatible with our local + time zone.

+

+ Note: 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.

+
+ + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
+            CommitmentTypeIndication ::= SEQUENCE {
+                 commitmentTypeId   CommitmentTypeIdentifier,
+                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
+                         CommitmentTypeQualifier OPTIONAL }
+            
+
+ + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
+               CommitmentTypeQualifier ::= SEQUENCE {
+                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
+                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
+             
+
+ + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
+              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.
+             
+
+ + Signer-Location attribute (RFC3126). + +
+               SignerLocation ::= SEQUENCE {
+                   countryName        [0] DirectoryString OPTIONAL,
+                   localityName       [1] DirectoryString OPTIONAL,
+                   postalAddress      [2] PostalAddress OPTIONAL }
+            
+               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
+             
+
+ +
+               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)) }
+             
+
+ + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
+            ContentHints ::= SEQUENCE {
+              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
+              contentType ContentType }
+            
+
+ + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
+            ContentIdentifier ::=  OCTET STRING
+            
+ id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
+ + constructor + + +
+            EssCertID ::= SEQUENCE {
+                certHash Hash,
+                issuerSerial IssuerSerial OPTIONAL }
+            
+
+ +
+             EssCertIDv2 ::=  SEQUENCE {
+                 hashAlgorithm     AlgorithmIdentifier
+                          DEFAULT {algorithm id-sha256},
+                 certHash          Hash,
+                 issuerSerial      IssuerSerial OPTIONAL
+             }
+            
+             Hash ::= OCTET STRING
+            
+             IssuerSerial ::= SEQUENCE {
+                 issuer         GeneralNames,
+                 serialNumber   CertificateSerialNumber
+             }
+             
+
+ + constructor + + +
+             OtherCertID ::= SEQUENCE {
+                 otherCertHash    OtherHash,
+                 issuerSerial     IssuerSerial OPTIONAL }
+            
+             OtherHash ::= CHOICE {
+                 sha1Hash     OCTET STRING,
+                 otherHash    OtherHashAlgAndValue }
+            
+             OtherHashAlgAndValue ::= SEQUENCE {
+                 hashAlgorithm    AlgorithmIdentifier,
+                 hashValue        OCTET STRING }
+            
+             
+
+ + constructors + + + The definition of OtherSigningCertificate is +
+            OtherSigningCertificate ::=  SEQUENCE {
+                 certs        SEQUENCE OF OtherCertID,
+                 policies     SEQUENCE OF PolicyInformation OPTIONAL
+            }
+            
+ 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 } +
+ + constructors + + + The definition of SigningCertificate is +
+            SigningCertificate ::=  SEQUENCE {
+                 certs        SEQUENCE OF EssCertID,
+                 policies     SEQUENCE OF PolicyInformation OPTIONAL
+            }
+            
+ id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
+ + The definition of SigningCertificateV2 is +
+            SigningCertificateV2 ::=  SEQUENCE {
+                 certs        SEQUENCE OF EssCertIDv2,
+                 policies     SEQUENCE OF PolicyInformation OPTIONAL
+            }
+            
+ id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
+ + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

+ If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

+
+ + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
+             CscaMasterList ::= SEQUENCE {
+               version                CscaMasterListVersion,
+               certList               SET OF Certificate }
+               
+             CscaMasterListVersion :: INTEGER {v0(0)}
+             
+
+ + The DataGroupHash object. +
+             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) }
+            
+             
+
+ + The LDSSecurityObject object (V1.8). +
+             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)}
+             
+
+ +
+            LDSVersionInfo ::= SEQUENCE {
+               ldsVersion PRINTABLE STRING
+               unicodeVersion PRINTABLE STRING
+             }
+            
+ @return +
+ + 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. + + + Certificate extensionDate of certificate generation + +
+            		DateOfCertGenSyntax ::= GeneralizedTime
+             
+
+ + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
+            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
+             
+
+ + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
+            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
+             
+
+ + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
+            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+             
+ + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
+ + + (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. + +
+            		RetrieveIfAllowed ::= BOOLEAN
+             
+
+ + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
+            		CertInDirSince ::= GeneralizedTime
+             
+
+ + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
+            		NameAtBirth ::= DirectoryString(SIZE(1..64)
+             
+ + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
+ + 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. + +
+                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
+            
+ + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
+ + 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. + +
+            		LiabilityLimitationFlagSyntax ::= BOOLEAN
+             
+
+ + 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. +

+

+

+                CertHash ::= SEQUENCE {
+                  hashAlgorithm AlgorithmIdentifier,
+                  certificateHash OCTET STRING
+                }
+            
+
+ + Constructor from Asn1Sequence. +

+ The sequence is of type CertHash: +

+

+                 CertHash ::= SEQUENCE {
+                   hashAlgorithm AlgorithmIdentifier,
+                   certificateHash OCTET STRING
+                 }
+             
+ + @param seq The ASN.1 sequence. +
+ + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                 CertHash ::= SEQUENCE {
+                   hashAlgorithm AlgorithmIdentifier,
+                   certificateHash OCTET STRING
+                 }
+             
+ + @return an Asn1Object +
+ + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

+ 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: +

    +
  • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
  • +
  • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
  • +
  • c) the responder does not support the extension: RequestedCertificate is + not included in the response
  • +
+ 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. +

+

+                       RequestedCertificate ::= CHOICE {
+                         Certificate Certificate,
+                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
+                         attributeCertificate [1] EXPLICIT OCTET STRING
+                       }
+            
+
+ + Constructor from a given details. +

+ Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                        RequestedCertificate ::= CHOICE {
+                          Certificate Certificate,
+                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
+                          attributeCertificate [1] EXPLICIT OCTET STRING
+                        }
+             
+ + @return an Asn1Object +
+ + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
+               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
+            
+
+ + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
+             
+ + @return an Asn1Object +
+ + An Admissions structure. +

+

+                        Admissions ::= SEQUENCE
+                        {
+                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
+                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
+                          professionInfos SEQUENCE OF ProfessionInfo
+                        }
+             

+

+ + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
+ + Constructor from Asn1Sequence. +

+ The sequence is of type ProcurationSyntax: +

+

+                        Admissions ::= SEQUENCE
+                        {
+                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
+                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
+                          professionInfos SEQUENCE OF ProfessionInfo
+                        }
+             
+ + @param seq The ASN.1 sequence. +
+ + Constructor from a given details. +

+ Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                   Admissions ::= SEQUENCE
+                   {
+                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
+                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
+                     professionInfos SEQUENCE OF ProfessionInfo
+                   }
+             

+

+ + @return an Asn1Object +
+ + Attribute to indicate admissions to certain professions. +

+

+                 AdmissionSyntax ::= SEQUENCE
+                 {
+                   admissionAuthority GeneralName OPTIONAL,
+                   contentsOfAdmissions SEQUENCE OF Admissions
+                 }
+             

+ Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

+ NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

+ 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 + } +

+

+

+ ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

    +
  • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
  • +
  • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
  • +
  • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
  • +
  • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
  • +
+

+ By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

+

+

+ This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

+ The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

+ The sequence is of type ProcurationSyntax: +

+

+                 AdmissionSyntax ::= SEQUENCE
+                 {
+                   admissionAuthority GeneralName OPTIONAL,
+                   contentsOfAdmissions SEQUENCE OF Admissions
+                 }
+             

+ Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

+ NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

+ 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 + } +

+ + @param seq The ASN.1 sequence. +
+ + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                 AdmissionSyntax ::= SEQUENCE
+                 {
+                   admissionAuthority GeneralName OPTIONAL,
+                   contentsOfAdmissions SEQUENCE OF Admissions
+                 }
+             

+ Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

+ NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

+ 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 + } +

+ + @return an Asn1Object +
+ + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

+

+                      DeclarationOfMajoritySyntax ::= CHOICE
+                      {
+                        notYoungerThan [0] IMPLICIT INTEGER,
+                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
+                        {
+                          fullAge BOOLEAN DEFAULT TRUE,
+                          country PrintableString (SIZE(2))
+                        }
+                        dateOfBirth [2] IMPLICIT GeneralizedTime
+                      }
+            
+

+ fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                       DeclarationOfMajoritySyntax ::= CHOICE
+                       {
+                         notYoungerThan [0] IMPLICIT INTEGER,
+                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
+                         {
+                           fullAge BOOLEAN DEFAULT TRUE,
+                           country PrintableString (SIZE(2))
+                         }
+                         dateOfBirth [2] IMPLICIT GeneralizedTime
+                       }
+             
+ + @return an Asn1Object +
+ + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

+ 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). +

+

+               MonetaryLimitSyntax ::= SEQUENCE
+               {
+                 currency PrintableString (SIZE(3)),
+                 amount INTEGER,
+                 exponent INTEGER
+               }
+            
+

+ currency must be the ISO code. +

+ value = amount�10*exponent + + + Constructor from a given details. +

+

+ value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                MonetaryLimitSyntax ::= SEQUENCE
+                {
+                  currency PrintableString (SIZE(3)),
+                  amount INTEGER,
+                  exponent INTEGER
+                }
+             
+ + @return an Asn1Object +
+ + Names of authorities which are responsible for the administration of title + registers. + +
+                        NamingAuthority ::= SEQUENCE 
+                        {
+                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
+                          namingAuthorityUrl IA5String OPTIONAL,
+                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
+                        }
+            
+ @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
+ + 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. + + + Constructor from Asn1Sequence. +

+

+

+                         NamingAuthority ::= SEQUENCE
+                         {
+                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
+                           namingAuthorityUrl IA5String OPTIONAL,
+                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
+                         }
+             
+ + @param seq The ASN.1 sequence. +
+ + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

+ All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                         NamingAuthority ::= SEQUENCE
+                         {
+                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
+                           namingAuthorityUrl IA5String OPTIONAL,
+                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
+                         }
+             
+ + @return an Asn1Object +
+ + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

+ 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). +

+

+ 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). +

+
+                          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 
+                          }
+            
+ +
+ + Constructor from Asn1Sequence. +

+ The sequence is of type ProcurationSyntax: +

+

+                           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 + } +

+ + @param seq The ASN.1 sequence. +
+ + Constructor from a given details. +

+

+ Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

+

+ Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                           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 + } +

+ + @return an Asn1Object +
+ + Professions, specializations, disciplines, fields of activity, etc. + +
+                          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 
+                          }
+            
+ + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
+ + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

+

+

+                           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
+                           }
+             
+ + @param seq The ASN.1 sequence. +
+ + Constructor from given details. +

+ professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                           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
+                           }
+             
+ + @return an Asn1Object +
+ + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

+

+             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+            
+
+ + Constructor from DirectoryString. +

+ The DirectoryString is of type RestrictionSyntax: +

+

+                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+             
+ + @param restriction A IAsn1String. +
+ + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
+             

+

+ + @return an Asn1Object +
+ + Produce an object suitable for an Asn1OutputStream. +
+            cast5CBCParameters ::= Sequence {
+                                      iv         OCTET STRING DEFAULT 0,
+                                             -- Initialization vector
+                                      keyLength  Integer
+                                             -- Key length, in bits
+                                 }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            IDEA-CBCPar ::= Sequence {
+                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
+                             }
+            
+
+ + The NetscapeCertType object. +
+               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) }
+            
+
+ + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
+              PublicKeyAndChallenge ::= SEQUENCE {
+                spki SubjectPublicKeyInfo,
+                challenge IA5STRING
+              }
+            
+              
+
+ + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
+            BasicOcspResponse       ::= Sequence {
+                 tbsResponseData      ResponseData,
+                 signatureAlgorithm   AlgorithmIdentifier,
+                 signature            BIT STRING,
+                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            CertID          ::=     Sequence {
+                hashAlgorithm       AlgorithmIdentifier,
+                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
+                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
+                serialNumber        CertificateSerialNumber }
+            
+
+ + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
+             CertStatus ::= CHOICE {
+                             good        [0]     IMPLICIT Null,
+                             revoked     [1]     IMPLICIT RevokedInfo,
+                             unknown     [2]     IMPLICIT UnknownInfo }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            CrlID ::= Sequence {
+                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
+                crlNum               [1]     EXPLICIT Integer OPTIONAL,
+                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            OcspRequest     ::=     Sequence {
+                tbsRequest                  TBSRequest,
+                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            OcspResponse ::= Sequence {
+                responseStatus         OcspResponseStatus,
+                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
+            
+
+ + The OcspResponseStatus enumeration. +
+            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
+            }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            Request         ::=     Sequence {
+                reqCert                     CertID,
+                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ResponderID ::= CHOICE {
+                 byName          [1] Name,
+                 byKey           [2] KeyHash }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ResponseBytes ::=       Sequence {
+                responseType   OBJECT IDENTIFIER,
+                response       OCTET STRING }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ResponseData ::= Sequence {
+                version              [0] EXPLICIT Version DEFAULT v1,
+                responderID              ResponderID,
+                producedAt               GeneralizedTime,
+                responses                Sequence OF SingleResponse,
+                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            RevokedInfo ::= Sequence {
+                 revocationTime              GeneralizedTime,
+                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ServiceLocator ::= Sequence {
+                issuer    Name,
+                locator   AuthorityInfoAccessSyntax OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            Signature       ::=     Sequence {
+                signatureAlgorithm      AlgorithmIdentifier,
+                signature               BIT STRING,
+                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+             SingleResponse ::= Sequence {
+                     certID                       CertID,
+                     certStatus                   CertStatus,
+                     thisUpdate                   GeneralizedTime,
+                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
+                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            TBSRequest      ::=     Sequence {
+                version             [0]     EXPLICIT Version DEFAULT v1,
+                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
+                requestList                 Sequence OF Request,
+                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
+            
+
+ + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            Attr ::= Sequence {
+                attrType OBJECT IDENTIFIER,
+                attrValues Set OF AttributeValue
+            }
+            
+
+ + Pkcs10 Certfication request object. +
+            CertificationRequest ::= Sequence {
+              certificationRequestInfo  CertificationRequestInfo,
+              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
+              signature                 BIT STRING
+            }
+            
+
+ + Pkcs10 CertificationRequestInfo object. +
+              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.&id({IOSet}),
+                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
+              }
+             
+
+ + Produce an object suitable for an Asn1OutputStream. +
+            ContentInfo ::= Sequence {
+                     contentType ContentType,
+                     content
+                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
+            
+
+ + The EncryptedData object. +
+                  EncryptedData ::= Sequence {
+                       version Version,
+                       encryptedContentInfo EncryptedContentInfo
+                  }
+            
+            
+                  EncryptedContentInfo ::= Sequence {
+                      contentType ContentType,
+                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
+                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
+                }
+            
+                EncryptedContent ::= OCTET STRING
+             
+
+ + Produce an object suitable for an Asn1OutputStream. +
+             EncryptedPrivateKeyInfo ::= Sequence {
+                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
+                  encryptedData EncryptedData
+             }
+            
+             EncryptedData ::= OCTET STRING
+            
+             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
+                      ... -- For local profiles
+             }
+             
+
+ +
+            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.
+            
+ @return the basic DERObject construction. +
+ + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
+             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
+             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
+                pkcs9(9) smime(16) alg(3) 18 }
+            
+             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
+             
+
+ + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
+              [IMPLICIT TAGS]
+            
+              OneAsymmetricKey ::= SEQUENCE {
+                  version                   Version,
+                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
+                  privateKey                PrivateKey,
+                  attributes            [0] Attributes OPTIONAL,
+                  ...,
+                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
+                  ...
+              }
+            
+              PrivateKeyInfo ::= OneAsymmetricKey
+            
+              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
+            
+              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
+                                                 { PUBLIC-KEY,
+                                                   { PrivateKeyAlgorithms } }
+            
+              PrivateKey ::= OCTET STRING
+                                 -- Content varies based on type of key.  The
+                                 -- algorithm identifier dictates the format of
+                                 -- the key.
+            
+              PublicKey ::= BIT STRING
+                                 -- Content varies based on type of key.  The
+                                 -- algorithm identifier dictates the format of
+                                 -- the key.
+            
+              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
+              
+
+ + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
+              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 --
+              }
+             
+ @return the asn1 primitive representing the parameters. +
+ + This outputs the key in Pkcs1v2 format. +
+                  RsaPrivateKey ::= Sequence {
+                                      version Version,
+                                      modulus Integer, -- n
+                                      publicExponent Integer, -- e
+                                      privateExponent Integer, -- d
+                                      prime1 Integer, -- p
+                                      prime2 Integer, -- q
+                                      exponent1 Integer, -- d mod (p-1)
+                                      exponent2 Integer, -- d mod (q-1)
+                                      coefficient Integer -- (inverse of q) mod p
+                                  }
+            
+                  Version ::= Integer
+             
+

This routine is written to output Pkcs1 version 0, private keys.

+
+ + The default version + + +
+             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) }
+             
+ @return the asn1 primitive representing the parameters. +
+ + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
+             SignedData ::= Sequence {
+                 version Version,
+                 digestAlgorithms DigestAlgorithmIdentifiers,
+                 contentInfo ContentInfo,
+                 certificates
+                     [0] IMPLICIT ExtendedCertificatesAndCertificates
+                              OPTIONAL,
+                 crls
+                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
+                 signerInfos SignerInfos }
+            
+
+ + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
+              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
+             
+
+ + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
+            SMIMECapabilities ::= Sequence OF SMIMECapability
+            
+
+ + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
+            SMIMECapability ::= Sequence {
+                capabilityID OBJECT IDENTIFIER,
+                parameters ANY DEFINED BY capabilityID OPTIONAL
+            }
+            
+
+ + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
+            SmimeEncryptionKeyPreference ::= CHOICE {
+                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
+                receipentKeyId          [1] RecipientKeyIdentifier,
+                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
+            }
+            
+
+ + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
+            Accuracy ::= SEQUENCE {
+                        seconds        INTEGER              OPTIONAL,
+                        millis     [0] INTEGER  (1..999)    OPTIONAL,
+                        micros     [1] INTEGER  (1..999)    OPTIONAL
+                        }
+            
+
+ +
+               MessageImprint ::= SEQUENCE  {
+                  hashAlgorithm                AlgorithmIdentifier,
+                  hashedMessage                OCTET STRING  }
+            
+
+ +
+            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
+            }
+            
+
+ +
+            TimeStampResp ::= SEQUENCE  {
+              status                  PkiStatusInfo,
+              timeStampToken          TimeStampToken     OPTIONAL  }
+            
+
+ +
+            
+                 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  }
+            
+             
+
+ + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
+            AttributeTypeAndValue ::= SEQUENCE {
+                      type         OBJECT IDENTIFIER,
+                      value        ANY DEFINED BY type }
+            
+ @return a basic ASN.1 object representation. +
+ +
+             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))  }
+            
+
+ + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
+                     * RelativeDistinguishedName ::=
+                     *                     SET OF AttributeTypeAndValue
+            
+                     * AttributeTypeAndValue ::= SEQUENCE {
+                     *        type     AttributeType,
+                     *        value    AttributeValue }
+                     * 
+ * @return this object as its ASN1Primitive type +
+ + The AccessDescription object. +
+            AccessDescription  ::=  SEQUENCE {
+                  accessMethod          OBJECT IDENTIFIER,
+                  accessLocation        GeneralName  }
+            
+
+ + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
+                 AlgorithmIdentifier ::= Sequence {
+                                       algorithm OBJECT IDENTIFIER,
+                                       parameters ANY DEFINED BY algorithm OPTIONAL }
+            
+
+ + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
+             AttCertIssuer ::= CHOICE {
+                  v1Form   GeneralNames,  -- MUST NOT be used in this
+                                          -- profile
+                  v2Form   [0] V2Form     -- v2 only
+             }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+             AttCertValidityPeriod  ::= Sequence {
+                  notBeforeTime  GeneralizedTime,
+                  notAfterTime   GeneralizedTime
+             }
+            
+
+ + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
+            Attr ::= Sequence {
+                attrType OBJECT IDENTIFIER,
+                attrValues Set OF AttributeValue
+            }
+            
+
+ + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
+             AttributeCertificate ::= Sequence {
+                  acinfo               AttributeCertificateInfo,
+                  signatureAlgorithm   AlgorithmIdentifier,
+                  signatureValue       BIT STRING
+             }
+            
+
+ + Produce an object suitable for an Asn1OutputStream. +
+              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) }
+             
+
+ + The AuthorityInformationAccess object. +
+             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
+            
+             AuthorityInfoAccessSyntax  ::=
+                  Sequence SIZE (1..MAX) OF AccessDescription
+             AccessDescription  ::=  Sequence {
+                   accessMethod          OBJECT IDENTIFIER,
+                   accessLocation        GeneralName  }
+            
+             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
+             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
+             
+
+ + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
+             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
+             
+ +
+ + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
+            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
+            		 *       publicKey.getEncoded()).readObject());
+                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
+                     * 
+ * + * +
+ + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
+            BasicConstraints := Sequence {
+               cA                  Boolean DEFAULT FALSE,
+               pathLenConstraint   Integer (0..MAX) OPTIONAL
+            }
+            
+
+ + 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. + +
+             CertificateList  ::=  Sequence  {
+                  tbsCertList          TbsCertList,
+                  signatureAlgorithm   AlgorithmIdentifier,
+                  signatureValue       BIT STRING  }
+             
+
+ + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
+                 crossCertificatePairATTRIBUTE::={
+                   WITH SYNTAX   CertificatePair
+                   EQUALITY MATCHING RULE certificatePairExactMatch
+                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
+             
+ +
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.
+ +
+                   CertificatePair ::= SEQUENCE {
+                     forward		[0]	Certificate OPTIONAL,
+                     reverse		[1]	Certificate OPTIONAL,
+                     -- at least one of the pair shall be present -- }
+             
+
+ + Constructor from Asn1Sequence. +

+ The sequence is of type CertificatePair: +

+

+                   CertificatePair ::= SEQUENCE {
+                     forward		[0]	Certificate OPTIONAL,
+                     reverse		[1]	Certificate OPTIONAL,
+                     -- at least one of the pair shall be present -- }
+             
+ + @param seq The ASN.1 sequence. +
+ + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                   CertificatePair ::= SEQUENCE {
+                     forward		[0]	Certificate OPTIONAL,
+                     reverse		[1]	Certificate OPTIONAL,
+                     -- at least one of the pair shall be present -- }
+             
+ + @return a DERObject +
+ + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
+            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
+            
+
+ + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
+                 CertPolicyId ::= OBJECT IDENTIFIER
+             
+
+ + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
+            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
+            
+
+ + The CRLNumber object. +
+            CRLNumber::= Integer(0..MAX)
+            
+
+ + The CRLReason enumeration. +
+            CRLReason ::= Enumerated {
+             unspecified             (0),
+             keyCompromise           (1),
+             cACompromise            (2),
+             affiliationChanged      (3),
+             superseded              (4),
+             cessationOfOperation    (5),
+             certificateHold         (6),
+             removeFromCRL           (8),
+             privilegeWithdrawn      (9),
+             aACompromise           (10)
+            }
+            
+
+ + The DigestInfo object. +
+            DigestInfo::=Sequence{
+                     digestAlgorithm  AlgorithmIdentifier,
+                     digest OCTET STRING }
+            
+
+ + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

It stores a string in a chosen encoding. +

+             DisplayText ::= CHOICE {
+                  ia5String        IA5String      (SIZE (1..200)),
+                  visibleString    VisibleString  (SIZE (1..200)),
+                  bmpString        BMPString      (SIZE (1..200)),
+                  utf8String       UTF8String     (SIZE (1..200)) }
+             

+ @see PolicyQualifierInfo + @see PolicyInformation +
+ + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

Useful when reading back a DisplayText class + from it's Asn1Encodable form.

+ + @param contents an Asn1Encodable instance. +
+ + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
+            DistributionPoint ::= Sequence {
+                 distributionPoint [0] DistributionPointName OPTIONAL,
+                 reasons           [1] ReasonFlags OPTIONAL,
+                 cRLIssuer         [2] GeneralNames OPTIONAL
+            }
+            
+
+ + The DistributionPointName object. +
+            DistributionPointName ::= CHOICE {
+                fullName                 [0] GeneralNames,
+                nameRelativeToCRLIssuer  [1] RDN
+            }
+            
+
+ + The extendedKeyUsage object. +
+                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
+            
+
+ + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
+             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 }
+             
+
+ + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

+ This constructor can handle: +

    +
  • rfc822Name
  • +
  • iPAddress
  • +
  • directoryName
  • +
  • dNSName
  • +
  • uniformResourceIdentifier
  • +
  • registeredID
  • +
+ For x400Address, otherName and ediPartyName there is no common string + format defined. +

+ 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. +

+ + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
+ + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
+            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
+            
+
+ + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
+            
+                   GeneralSubtree ::= SEQUENCE
+                   {
+                     baseName                    GeneralName,
+                     minimum         [0]     BaseDistance DEFAULT 0,
+                     maximum         [1]     BaseDistance OPTIONAL
+                   }
+             
+ + @see org.bouncycastle.asn1.x509.NameConstraints + +
+ + 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. +

+ If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

+ + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
+ + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
+                   GeneralSubtree ::= SEQUENCE
+                   {
+                     baseName                    GeneralName,
+                     minimum         [0]     BaseDistance DEFAULT 0,
+                     maximum         [1]     BaseDistance OPTIONAL
+                   }
+             
+ + @return a DERObject +
+ + The Holder object. +

+ For an v2 attribute certificate this is: + +

+                       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
+                       }
+            
+

+

+ For an v1 attribute certificate this is: + +

+                    subject CHOICE {
+                     baseCertificateID [0] IssuerSerial,
+                     -- associated with a Public Key Certificate
+                     subjectName [1] GeneralNames },
+                     -- associated with a name
+            
+

+
+ + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
+             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
+             }
+            
+
+ + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
+            
+              IetfAttrSyntax ::= Sequence {
+                policyAuthority [0] GeneralNames OPTIONAL,
+                values Sequence OF CHOICE {
+                  octets OCTET STRING,
+                  oid OBJECT IDENTIFIER,
+                  string UTF8String
+                }
+              }
+            
+             
+
+ + Produce an object suitable for an Asn1OutputStream. +
+             IssuerSerial  ::=  Sequence {
+                  issuer         GeneralNames,
+                  serial         CertificateSerialNumber,
+                  issuerUid      UniqueIdentifier OPTIONAL
+             }
+            
+
+ +
+            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 }
+            
+
+ + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
+                KeyPurposeID ::= OBJECT IDENTIFIER
+            
+
+ + The KeyUsage object. +
+                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) }
+             
+
+ + 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) + + + Constructor from a given details. + +

permitted and excluded are Vectors of GeneralSubtree objects.

+ + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
+ + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
+              NoticeReference ::= Sequence {
+                  organization     DisplayText,
+                  noticeNumbers    Sequence OF Integer }
+            
+             
+ + @see PolicyQualifierInfo + @see PolicyInformation +
+ + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

+ + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
+ + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
+             
+               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
+               }
+              
+            
+ +
+ + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

+ If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

+ + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
+ + Produce an object suitable for an Asn1OutputStream. + +
+             
+               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
+               }
+              
+            
+
+ + PolicyMappings V3 extension, described in RFC3280. +
+                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
+                  issuerDomainPolicy      CertPolicyId,
+                  subjectDomainPolicy     CertPolicyId }
+             
+ + @see RFC 3280, section 4.2.1.6 +
+ + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
+                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 )
+             
+
+ + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
+               PolicyQualifierInfo ::= Sequence {
+                   policyQualifierId  PolicyQualifierId,
+                   qualifier          ANY DEFINED BY policyQualifierId }
+             
+
+ + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
+            PrivateKeyUsagePeriod ::= SEQUENCE
+            {
+            notBefore       [0]     GeneralizedTime OPTIONAL,
+            notAfter        [1]     GeneralizedTime OPTIONAL }
+            
+
+
+ + The BiometricData object. +
+            BiometricData  ::=  SEQUENCE {
+                  typeOfBiometricData  TypeOfBiometricData,
+                  hashAlgorithm        AlgorithmIdentifier,
+                  biometricDataHash    OCTET STRING,
+                  sourceDataUri        IA5String OPTIONAL  }
+            
+
+ + The Iso4217CurrencyCode object. +
+            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
+            
+
+ + The MonetaryValue object. +
+            MonetaryValue  ::=  SEQUENCE {
+                  currency              Iso4217CurrencyCode,
+                  amount               INTEGER,
+                  exponent             INTEGER }
+            -- value = amount * 10^exponent
+            
+
+ + The QCStatement object. +
+            QCStatement ::= SEQUENCE {
+              statementId        OBJECT IDENTIFIER,
+              statementInfo      ANY DEFINED BY statementId OPTIONAL}
+            
+
+ + The SemanticsInformation object. +
+                   SemanticsInformation ::= SEQUENCE {
+                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
+                     nameRegistrationAuthorities NameRegistrationAuthorities
+                                                                     OPTIONAL }
+                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
+                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
+            
+                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
+                     GeneralName
+             
+
+ + The TypeOfBiometricData object. +
+             TypeOfBiometricData ::= CHOICE {
+               predefinedBiometricType   PredefinedBiometricType,
+               biometricDataOid          OBJECT IDENTIFIER }
+            
+             PredefinedBiometricType ::= INTEGER {
+               picture(0),handwritten-signature(1)}
+               (picture|handwritten-signature)
+             
+
+ + The ReasonFlags object. +
+            ReasonFlags ::= BIT STRING {
+               unused(0),
+               keyCompromise(1),
+               cACompromise(2),
+               affiliationChanged(3),
+               superseded(4),
+               cessationOfOperation(5),
+               certficateHold(6)
+            }
+            
+
+ + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
+             RoleSyntax ::= SEQUENCE {
+                             roleAuthority  [0] GeneralNames OPTIONAL,
+                             roleName       [1] GeneralName
+                       }
+             
+
+ + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
+             RoleSyntax ::= SEQUENCE {
+                             roleAuthority  [0] GeneralNames OPTIONAL,
+                             roleName       [1] GeneralName
+                       }
+             
+
+ + This outputs the key in Pkcs1v2 format. +
+                 RSAPublicKey ::= Sequence {
+                                     modulus Integer, -- n
+                                     publicExponent Integer, -- e
+                                 }
+            
+
+ + Structure for a name or pseudonym. + +
+                  NameOrPseudonym ::= CHOICE {
+                	   surAndGivenName SEQUENCE {
+                	     surName DirectoryString,
+                	     givenName SEQUENCE OF DirectoryString 
+                    },
+                	   pseudonym DirectoryString 
+                  }
+            
+ + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
+ + Constructor from DERString. +

+ The sequence is of type NameOrPseudonym: +

+

+                  NameOrPseudonym ::= CHOICE {
+                	   surAndGivenName SEQUENCE {
+                	     surName DirectoryString,
+                	     givenName SEQUENCE OF DirectoryString
+                    },
+                	   pseudonym DirectoryString
+                  }
+            
+ @param pseudonym pseudonym value to use. +
+ + Constructor from Asn1Sequence. +

+ The sequence is of type NameOrPseudonym: +

+

+                   NameOrPseudonym ::= CHOICE {
+                 	   surAndGivenName SEQUENCE {
+                 	     surName DirectoryString,
+                 	     givenName SEQUENCE OF DirectoryString
+                     },
+                 	   pseudonym DirectoryString
+                   }
+             
+ + @param seq The ASN.1 sequence. +
+ + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                   NameOrPseudonym ::= CHOICE {
+                 	   surAndGivenName SEQUENCE {
+                 	     surName DirectoryString,
+                 	     givenName SEQUENCE OF DirectoryString
+                     },
+                 	   pseudonym DirectoryString
+                   }
+             
+ + @return an Asn1Object +
+ + Contains personal data for the otherName field in the subjectAltNames + extension. +

+

+                 PersonalData ::= SEQUENCE {
+                   nameOrPseudonym NameOrPseudonym,
+                   nameDistinguisher [0] INTEGER OPTIONAL,
+                   dateOfBirth [1] GeneralizedTime OPTIONAL,
+                   placeOfBirth [2] DirectoryString OPTIONAL,
+                   gender [3] PrintableString OPTIONAL,
+                   postalAddress [4] DirectoryString OPTIONAL
+                   }
+             
+ + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
+ + Constructor from Asn1Sequence. +

+ The sequence is of type NameOrPseudonym: +

+

+                 PersonalData ::= SEQUENCE {
+                   nameOrPseudonym NameOrPseudonym,
+                   nameDistinguisher [0] INTEGER OPTIONAL,
+                   dateOfBirth [1] GeneralizedTime OPTIONAL,
+                   placeOfBirth [2] DirectoryString OPTIONAL,
+                   gender [3] PrintableString OPTIONAL,
+                   postalAddress [4] DirectoryString OPTIONAL
+                   }
+             
+ + @param seq The ASN.1 sequence. +
+ + 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. + + + Produce an object suitable for an Asn1OutputStream. +

+ Returns: +

+

+                 PersonalData ::= SEQUENCE {
+                   nameOrPseudonym NameOrPseudonym,
+                   nameDistinguisher [0] INTEGER OPTIONAL,
+                   dateOfBirth [1] GeneralizedTime OPTIONAL,
+                   placeOfBirth [2] DirectoryString OPTIONAL,
+                   gender [3] PrintableString OPTIONAL,
+                   postalAddress [4] DirectoryString OPTIONAL
+                   }
+             
+ + @return an Asn1Object +
+ + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
+                 SubjectDirectoryAttributes ::= Attributes
+                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+                 Attribute ::= SEQUENCE
+                 {
+                   type AttributeType
+                   values SET OF AttributeValue
+                 }
+            
+                 AttributeType ::= OBJECT IDENTIFIER
+                 AttributeValue ::= ANY DEFINED BY AttributeType
+             
+ + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
+ + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
+                  SubjectDirectoryAttributes ::= Attributes
+                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+                  Attribute ::= SEQUENCE
+                  {
+                    type AttributeType
+                    values SET OF AttributeValue
+                  }
+            
+                  AttributeType ::= OBJECT IDENTIFIER
+                  AttributeValue ::= ANY DEFINED BY AttributeType
+             
+ + @param seq + The ASN.1 sequence. +
+ + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
+                  SubjectDirectoryAttributes ::= Attributes
+                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+                  Attribute ::= SEQUENCE
+                  {
+                    type AttributeType
+                    values SET OF AttributeValue
+                  }
+            
+                  AttributeType ::= OBJECT IDENTIFIER
+                  AttributeValue ::= ANY DEFINED BY AttributeType
+             
+ + @return a DERObject +
+ + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
+            SubjectKeyIdentifier::= OCTET STRING
+            
+
+ + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
+            (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).
+            
+ @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
+ + Return a RFC 3280 type 2 key identifier. As in: +
+            (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.
+            
+ @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
+ + The object that contains the public key stored in a certficate. +

+ The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

+
+ + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
+            SubjectPublicKeyInfo ::= Sequence {
+                                     algorithm AlgorithmIdentifier,
+                                     publicKey BIT STRING }
+            
+
+ + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
+                Target  ::= CHOICE {
+                  targetName          [0] GeneralName,
+                  targetGroup         [1] GeneralName,
+                  targetCert          [2] TargetCert
+                }
+            
+ +

+ The targetCert field is currently not supported and must not be used + according to RFC 3281.

+
+ + Creates an instance of a Target from the given object. +

+ obj can be a Target or a {@link Asn1TaggedObject}

+ + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
+ + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

+ Exactly one of the parameters must be not null.

+ + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
+ + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
+                Target  ::= CHOICE {
+                  targetName          [0] GeneralName,
+                  targetGroup         [1] GeneralName,
+                  targetCert          [2] TargetCert
+                }
+            
+ + @return an Asn1Object +
+ + Target information extension for attributes certificates according to RFC + 3281. + +
+                      SEQUENCE OF Targets
+            
+ +
+ + Creates an instance of a TargetInformation from the given object. +

+ obj can be a TargetInformation or a {@link Asn1Sequence}

+ + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
+ + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

+ The ArrayList is cloned before it is returned.

+ + @return Returns the targets. +
+ + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
+                     SEQUENCE OF Targets
+            
+ +

+ 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.

+ + @return an Asn1Object +
+ + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
+                       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
+                       }
+            
+ + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
+ + Creates an instance of a Targets from the given object. +

+ obj can be a Targets or a {@link Asn1Sequence}

+ + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
+ + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

+ The ArrayList is copied.

+ + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
+ + Returns the targets in an ArrayList. +

+ The ArrayList is cloned before it is returned.

+ + @return Returns the targets. +
+ + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
+                       Targets ::= SEQUENCE OF Target
+            
+ + @return an Asn1Object +
+ + The TbsCertificate object. +
+            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
+                 }
+            
+

+ Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

+
+ + PKIX RFC-2459 - TbsCertList object. +
+            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
+                                           }
+            
+
+ + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
+            Time ::= CHOICE {
+                        utcTime        UTCTime,
+                        generalTime    GeneralizedTime }
+            
+
+ + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
+             UserNotice ::= Sequence {
+                  noticeRef        NoticeReference OPTIONAL,
+                  explicitText     DisplayText OPTIONAL}
+            
+             
+ + @see PolicyQualifierId + @see PolicyInformation +
+ + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

+
+ + Generator for Version 1 TbsCertificateStructures. +
+             TbsCertificate ::= Sequence {
+                  version          [ 0 ]  Version DEFAULT v1(0),
+                  serialNumber            CertificateSerialNumber,
+                  signature               AlgorithmIdentifier,
+                  issuer                  Name,
+                  validity                Validity,
+                  subject                 Name,
+                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
+                  }
+             
+ +
+ + Generator for Version 2 AttributeCertificateInfo +
+             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
+             }
+             
+ +
+ + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
+             V2Form ::= Sequence {
+                  issuerName            GeneralNames  OPTIONAL,
+                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
+                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
+                    -- issuerName MUST be present in this profile
+                    -- baseCertificateID and objectDigestInfo MUST NOT
+                    -- be present in this profile
+             }
+            
+
+ + Generator for Version 2 TbsCertList structures. +
+              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
+                                             }
+             
+ + Note: This class may be subject to change +
+ + Generator for Version 3 TbsCertificateStructures. +
+             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
+                  }
+             
+ +
+ + an X509Certificate structure. +
+             Certificate ::= Sequence {
+                 tbsCertificate          TbsCertificate,
+                 signatureAlgorithm      AlgorithmIdentifier,
+                 signature               BIT STRING
+             }
+            
+
+ + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

+ it's is assumed the table contains Oid/string pairs.

+
+ + Constructor from a table of extensions with ordering. +

+ It's is assumed the table contains Oid/string pairs.

+
+ + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

+ it's is assumed the table contains Oid/string pairs.

+
+ + Constructor from a table of extensions with ordering. +

+ It's is assumed the table contains Oid/string pairs.

+
+ + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
+                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
+            
+                 Extension         ::=   SEQUENCE {
+                    extnId            EXTENSION.&id ({ExtensionSet}),
+                    critical          BOOLEAN DEFAULT FALSE,
+                    extnValue         OCTET STRING }
+             
+
+ + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
+                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
+            
+                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
+            
+                 AttributeTypeAndValue ::= SEQUENCE {
+                                               type  OBJECT IDENTIFIER,
+                                               value ANY }
+             
+
+ + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

+
+ + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

+ it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

+
+ + Constructor from a table of attributes with ordering. +

+ it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

+

+ The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

+
+ + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

+ The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

+
+ + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
+ If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
+ + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
+ @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
+ + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

+ * An example of an encoder look like below: + *

+                 * public class X509DirEntryConverter
+                 *     : X509NameEntryConverter
+                 * {
+                 *     public Asn1Object GetConvertedValue(
+                 *         DerObjectIdentifier  oid,
+                 *         string               value)
+                 *     {
+                 *         if (str.Length() != 0 && 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);
+                 *         }
+                 *     }
+                 * }
+            	 * 
+ *

+
+ + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
+             KeySpecificInfo ::= Sequence {
+                 algorithm OBJECT IDENTIFIER,
+                 counter OCTET STRING SIZE (4..4)
+             }
+            
+
+ + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
+             OtherInfo ::= Sequence {
+                 keyInfo KeySpecificInfo,
+                 partyAInfo [0] OCTET STRING OPTIONAL,
+                 suppPubInfo [2] OCTET STRING
+             }
+            
+
+ + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
+            Parameters ::= CHOICE {
+               ecParameters ECParameters,
+               namedCurve   CURVES.&id({CurveNames}),
+               implicitlyCA Null
+            }
+            
+
+ + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
+             Curve ::= Sequence {
+                 a               FieldElement,
+                 b               FieldElement,
+                 seed            BIT STRING      OPTIONAL
+             }
+            
+
+ + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
+             ECParameters ::= Sequence {
+                 version         Integer { ecpVer1(1) } (ecpVer1),
+                 fieldID         FieldID {{FieldTypes}},
+                 curve           X9Curve,
+                 base            X9ECPoint,
+                 order           Integer,
+                 cofactor        Integer OPTIONAL
+             }
+            
+
+ + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
+             ECPoint ::= OCTET STRING
+            
+

+ Octet string produced using ECPoint.GetEncoded().

+
+ + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
+             FieldElement ::= OCTET STRING
+            
+

+

    +
  1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
  2. +
  3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
  4. +
+

+
+ + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
+             FieldID ::= Sequence {
+                 fieldType       FIELD-ID.&id({IOSet}),
+                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
+             }
+            
+
+ + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

+ Return an output stream which will save the data being written to + the compressed object. +

+

+ 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 outStr. +

+
+ Stream to be used for output. + A Stream for output of the compressed data. + + + +
+ + +

+ Return an output stream which will compress 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. +

+

+ 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 outStr. +

+

+ Note: 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. +

+

+ Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

+
+ Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
+ + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

+ If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

+

+ 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 outStr. +

+
+
+ + +

+ Return an output stream which will encrypt the data as it is written to it. +

+

+ 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 outStr. +

+
+
+ + +

+ 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. +

+

+ 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 outStr. +

+

+ Note: 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. +

+
+
+ + +

+ Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

+

+ Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

+
+
+ + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

+ 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. +

+
+
+ + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

+ Open a literal data packet, returning a stream to store the data inside the packet. +

+

+ 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 outStr. +

+
+ The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
+ + +

+ Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

+

+ 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 outStr. +

+

+ Note: 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.

+
+ The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
+ + +

+ Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

+

+ 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 outStr. +

+
+ The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
+ + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

+ 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.

+
+
+ + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

+ Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

+
+
+ + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

+ Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

+
+
+ + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

+ Note: this overrides the generation of a creation time when the signature + is generated.

+
+
+ + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

+ Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

+
+ + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
+                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
+            
+                  fact.addKeyTransRecipient(cert);
+            
+                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
+             
+
+ + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

+ 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. +

+

+ Example of use - assuming the first recipient matches the private key we have. +

+                  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!!!!");
+                      }
+                  }
+              
+ Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
+                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
+              
+ where bufSize is a suitably large buffer size. +

+
+ + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

+ A simple example of usage. +

+                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
+            
+                  edGen.addKeyTransRecipient(cert);
+            
+                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
+            
+                  OutputStream out = edGen.open(
+                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
+                  out.write(data);
+            
+                  out.close();
+             
+

+
+ + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

+ * A simple example of usage.

+ *

+ *

+                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
+                *      CMSCompressedData data = fact.Generate(content, algorithm);
+                * 
+ *

+
+ + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
+                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
+            
+                 process(cp.GetContent().GetContentStream());
+             
+ Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
+                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
+              
+ where bufSize is a suitably large buffer size. +
+ + General class for generating a compressed CMS message stream. +

+ A simple example of usage. +

+
+                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
+            
+                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
+            
+                  cOut.Write(data);
+            
+                  cOut.Close();
+             
+
+ + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
+                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
+            
+                  fact.AddKeyTransRecipient(cert);
+            
+                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
+             
+
+
+ + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

+ 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. +

+

+ Example of use - assuming the first recipient matches the private key we have. +

+                  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());
+                  }
+              
+ Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
+                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
+              
+ where bufSize is a suitably large buffer size. +

+
+ + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

+ A simple example of usage. +

+                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
+            
+                  edGen.AddKeyTransRecipient(cert);
+            
+                  MemoryStream  bOut = new MemoryStream();
+            
+                  Stream out = edGen.Open(
+                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
+                  out.Write(data);
+            
+                  out.Close();
+             
+

+
+ + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
+                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
+            
+                  fact.addKeyTransRecipient(cert);
+            
+                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
+             
+
+ + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
+              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++;
+                  }
+              }
+             
+
+ + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

+ * A simple example of usage. + * + *

+                 *      IX509Store certs...
+                 *      IX509Store crls...
+                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
+                 *
+                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
+                 *      gen.AddCertificates(certs);
+                 *      gen.AddCrls(crls);
+                 *
+                 *      CmsSignedData data = gen.Generate(content);
+                 * 
+ *

+
+ + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

+ Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

+

+ A simple example of usage for an encapsulated signature. +

+

+ Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

+
+                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
+            
+                  sp.GetSignedContent().Drain();
+            
+                  IX509Store              certs = sp.GetCertificates();
+                  SignerInformationStore  signers = sp.GetSignerInfos();
+            
+                  foreach (SignerInformation signer in signers.GetSigners())
+                  {
+                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
+                      X509Certificate cert = (X509Certificate) certList[0];
+            
+                      Console.WriteLine("verify returns: " + signer.Verify(cert));
+                  }
+             
+ Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
+                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
+              
+ where bufSize is a suitably large buffer size. +
+ + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

+ The output stream is returned unclosed. +

+ @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
+ + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

+ The output stream is returned unclosed. +

+ @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
+ + General class for generating a pkcs7-signature message stream. +

+ A simple example of usage. +

+
+                  IX509Store                   certs...
+                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
+            
+                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
+            
+                  gen.AddCertificates(certs);
+            
+                  Stream sigOut = gen.Open(bOut);
+            
+                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
+            
+                  sigOut.Close();
+             
+
+ + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

+ 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.

+

+ 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.

+
+ + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

+ note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

+
+ + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

+ Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

+
+ + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

+ This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

+ The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

+
+ + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

+ Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

+
+ + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

+ BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

+ BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

+ BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

+ After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

+ After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

+ Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
+ + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

+ NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

+
+ + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

Implementation of RipeMD256.

+

Note: this algorithm offers the same level of security as RipeMD128.

+
+
+ + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

Implementation of RipeMD 320.

+

Note: this algorithm offers the same level of security as RipeMD160.

+
+
+ + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
+                    block  word  digest
+            SHA-1   512    32    160
+            SHA-224 512    32    224
+            SHA-256 512    32    256
+            SHA-384 1024   64    384
+            SHA-512 1024   64    512
+            
+
+ + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
+                     block  word  digest
+             SHA-1   512    32    160
+             SHA-256 512    32    256
+             SHA-384 1024   64    384
+             SHA-512 1024   64    512
+             
+
+ + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
+                     block  word  digest
+             SHA-1   512    32    160
+             SHA-256 512    32    256
+             SHA-384 1024   64    384
+             SHA-512 1024   64    512
+             
+
+ + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
+                     block  word  digest
+             SHA-1   512    32    160
+             SHA-256 512    32    256
+             SHA-384 1024   64    384
+             SHA-512 1024   64    512
+             
+
+ + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

+ Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

+ 256 bit block size - Skein-256 + +
+ + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

+ Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

+ This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
+ Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

+ Implemented: +

    +
  • 256, 512 and 1024 bit internal states.
  • +
  • Full 96 bit input length.
  • +
  • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
  • +
  • Arbitrary output size in 1 byte intervals.
  • +
+

+ Not implemented: +

    +
  • Sub-byte length input (bit padding).
  • +
  • Tree hashing.
  • +
+
+ +
+ + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

+ The static property is checked during construction of the encoding object, it is set to + true by default. +

+
+ + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

+ For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

+

+ This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

+
+ + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

+ For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

+

+ This file contains the fast version with 8Kbytes of static tables for round precomputation +

+ + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
+ + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

+ For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

+

+ This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

+
+ + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

+ For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

+ For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

+ Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
+ + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

+ * Note: + *

    + *
  • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
  • + *
  • 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.
  • + *
+ *

+
+ + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

+ http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

+ 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 +

+
+ + 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). + + + 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. +

+ http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

+ 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 +

+
+ + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

+ This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

+

+ It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

+

+ Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

+
+ + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

+ i.e. x * MulInv(x) == 1 (modulo BASE) +

+
+ + Return the additive inverse of x. +

+ i.e. x + AddInv(x) == 0 +

+
+ + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

+ This implementation has a word size of 32 bits.

+
+ + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

+ This implementation is set to work with a 64 bit word size.

+
+ + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

+ For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

+ Note: this implementation is based on information prior to readonly NIST publication. +

+
+ + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

+ For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

+ * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

+ *

+ * For full details see The Serpent home page + *

+
+ + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

+ Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

+ This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
+ 2 x block size state is retained by each cipher instance. + + + +

+ 256 bit block size - Threefish-256 + +
+ + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

+ Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

+

+ For full details see The Serpent home page +

+
+ + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

+ *

+                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
+                    * 
+ * where a = primitive root of field generator 0x14D + *

+
+ + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
+ This implementation is based on ISO 18033/P1363a. +
+ + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

+ This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

+ Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

+ This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

+
+ + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

+ This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

+ @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
+ + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

+ Note: can take a while...

+
+ + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

+ This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

+
+ + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

+ * Note: can take a while... + *

+
+ + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
+ This implementation is based on IEEE P1363/ISO 18033. +
+ + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
+ This implementation is based on IEEE P1363/ISO 18033. +
+ + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

+ The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

+
+ + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

+ The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

+
+ + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

+ The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

+
+ + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

+ The document this implementation is based on can be found at + + RSA's Pkcs5 Page

+
+ + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
+ The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
+ A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
+ +
+ + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
+ Specifically: +
    +
  • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
  • +
  • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
  • +
+
+ a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
+ + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

+ doFinal leaves the MAC in the same state it was after the last init. +

+ @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. +
+ + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

+ 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). +

+ @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. +
+ + 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. +

+ 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). +

+ @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. +
+ + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

+ 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). +

+ @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. +
+ + 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. +

+ 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). +

+ @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. +
+ + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

+ CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

+ CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

+ CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

+ CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

+ It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

+
+ + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

+ 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

+ Implementation of DSTU7564 mac mode + +
+ + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

+ 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). +

+ @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. +
+ + 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. +

+ 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). +

+ @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. +
+ + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

+ Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

+ 256 bit block size - Skein-256 + +
+ + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

+ Note: this mode is a packet mode - it needs all the data up front. +

+
+ + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
+ Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

+ This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

+
+ + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

+ * For further info see RFC 2440. + *

+
+ + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

+ This padding pads the block out compliment of the last bit + of the plain text. +

+
+
+ + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

+ 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. +

+
+
+ + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

+ See "Applied + Cryptography" by Bruce Schneier for more information. +

+ @return true if the given DES key material is weak or semi-weak, + false otherwise. +
+ + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
    +
  • MAC generation, by providing a key.
  • +
  • Randomised hashing, by providing a nonce.
  • +
  • A hash function for digital signatures, associating a + public key with the message digest.
  • +
  • A key derivation function, by providing a + key identifier.
  • +
  • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
  • +
+
+ + + +
+ + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

+ Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

+ Sets the parameter. + +
+ + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

+ Internal access to the digest is synchronized so a single one of these can be shared. +

+
+ + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

+ Minimum entropy requirement is the security strength requested. +

+ @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
+ + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

+ Minimum entropy requirement is the security strength requested. +

+ @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
+ + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

+ Minimum entropy requirement is the security strength requested. +

+ @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
+ + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

+ Access to internals is synchronized so a single one of these can be shared. +

+
+
+ + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

+ Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

+
+ + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

+ Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

+ @param entropySource + @param predictionResistant +
+ + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

+ Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

+ @param entropySourceProvider a provider of EntropySource objects. +
+ + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

+ Based on an idea from Marcus Lippert. +

+
+ + Generate seed bytes. Set fast to false for best quality. +

+ If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

+ @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
+ + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

+ Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

+
+ + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

+ Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

+ @param entropySource + @param predictionResistant +
+ + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

+ Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

+ @param entropySourceProvider a provider of EntropySource objects. +
+ + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

+ Note: the usual length for the salt is the length of the hash + function used in bytes.

+
+
+ + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

+ Note: the usual value for the salt length is the number of + bytes in the hash function.

+
+
+ + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

+ The message digest hash, H, is encapsulated to form a byte string as follows +

+
+            EB = 06 || PS || 0xBA || H || TRAILER
+            
+ where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
+ + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

+ This file could be more optimized. +

+
+
+ + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

+

+             opaque ASN.1Cert<2^24-1>;
+            
+             struct {
+                 ASN.1Cert certificate_list<0..2^24-1>;
+             } Certificate;
+             
+ + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
+ + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

+

+             struct {
+                 ClientCertificateType certificate_types<1..2^8-1>;
+                 DistinguishedName certificate_authorities<3..2^16-1>
+             } CertificateRequest;
+             
+ + @see ClientCertificateType + @see X509Name +
+ + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

+ Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

RFC 4492 5.4. (Errata ID: 2389) +
+ + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
+
+ When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
+
+ Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
+ + Initiates a TLS handshake in the role of client.
+
+ In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
+ + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

+ The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

The secure bidirectional stream for this connection + Only allowed in blocking mode. +
+ + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
+
+ This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
+
+ If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
+ + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
+
+ Only allowed in non-blocking mode. + @return The number of bytes of available application data +
+ + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
+
+ Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
+ + Offer output from an arbitrary source. Only allowed in non-blocking mode.
+
+ After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
+
+ This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
+ + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
+
+ Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
+ + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
+
+ Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
+ + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
+
+ When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
+
+ Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
+ + Receives a TLS handshake in the role of server.
+
+ In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
+ + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

From Knuth Vol 2, pg 395.

+
+ + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
+ Based algorithm 14.36 of Handbook of Applied Cryptography. +
+
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoAndroid/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoAndroid/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoAndroid/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author
    Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + 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.

    +
    + + return whatever was following the tag. +

    + 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.

    +
    + + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

    1.3.6.1.4.1.22554

    +
    + + pbe(1) algorithms +

    1.3.6.1.4.1.22554.1

    +
    + + SHA-1(1) +

    1.3.6.1.4.1.22554.1.1

    +
    + + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
    +                LinkedCertificate := SEQUENCE {
    +                    digest        DigestInfo,                   -- digest of PQC certificate
    +                    certLocation  GeneralName,                  -- location of PQC certificate
    +                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
    +                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
    +            }
    +            
    +
    + + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
    +            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
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + 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}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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])
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            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
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + 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) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             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
    +            
    +             
    +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            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 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            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 }
    +            
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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.
    +            
    +
    + +
    +            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)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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 }
    +            
    +
    + + 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. + + +
    +            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.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: 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.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              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.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               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)) }
    +             
    +
    + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + 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 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             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) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             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)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + 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. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (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. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + 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. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + 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. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + 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. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + 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: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + 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. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

    + 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). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + 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. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + 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). +

    +

    + 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). +

    +
    +                          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 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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 + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          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 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           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
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               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) }
    +            
    +
    + + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            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
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              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.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            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.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
    +             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
    +             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    +                pkcs9(9) smime(16) alg(3) 18 }
    +            
    +             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
    +             
    +
    + + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
    +              [IMPLICIT TAGS]
    +            
    +              OneAsymmetricKey ::= SEQUENCE {
    +                  version                   Version,
    +                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    +                  privateKey                PrivateKey,
    +                  attributes            [0] Attributes OPTIONAL,
    +                  ...,
    +                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
    +                  ...
    +              }
    +            
    +              PrivateKeyInfo ::= OneAsymmetricKey
    +            
    +              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
    +            
    +              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
    +                                                 { PUBLIC-KEY,
    +                                                   { PrivateKeyAlgorithms } }
    +            
    +              PrivateKey ::= OCTET STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              PublicKey ::= BIT STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
    +              
    +
    + + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
    +              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 --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             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) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              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
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            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
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + +
    +            
    +                 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  }
    +            
    +             
    +
    + + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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))  }
    +            
    +
    + + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
    +                     * RelativeDistinguishedName ::=
    +                     *                     SET OF AttributeTypeAndValue
    +            
    +                     * AttributeTypeAndValue ::= SEQUENCE {
    +                     *        type     AttributeType,
    +                     *        value    AttributeValue }
    +                     * 
    + * @return this object as its ASN1Primitive type +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              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) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             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
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + 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. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    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.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             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 }
    +             
    +
    + + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + 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. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + 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. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       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
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             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
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            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 }
    +            
    +
    + + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                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) }
    +             
    +
    + + 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) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               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
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               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
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                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 )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            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
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (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).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (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.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + 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.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       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
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + The TbsCertificate object. +
    +            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
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            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
    +                                           }
    +            
    +
    + + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             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
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              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
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             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
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && 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);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + 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 outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + 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. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + 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 outStr. +

    +

    + Note: 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.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + 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.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
    +              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++;
    +                  }
    +              }
    +             
    +
    + + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

    + 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.

    +

    + 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.

    +
    + + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

    + BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

    + BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

    + BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

    + After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

    + After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

    + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
    + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    + + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • 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.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + 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 +

    +
    + + 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). + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + 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 +

    +
    + + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

    +
    + + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

    + This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

    + Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

    + This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

    +
    + + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

    + This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

    + @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
    + + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @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. +
    + + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

    + Implementation of DSTU7564 mac mode + +
    + + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + 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. +

    +
    +
    + + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoMac/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoMac/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoMac/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author
    Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + 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.

    +
    + + return whatever was following the tag. +

    + 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.

    +
    + + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

    1.3.6.1.4.1.22554

    +
    + + pbe(1) algorithms +

    1.3.6.1.4.1.22554.1

    +
    + + SHA-1(1) +

    1.3.6.1.4.1.22554.1.1

    +
    + + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
    +                LinkedCertificate := SEQUENCE {
    +                    digest        DigestInfo,                   -- digest of PQC certificate
    +                    certLocation  GeneralName,                  -- location of PQC certificate
    +                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
    +                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
    +            }
    +            
    +
    + + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
    +            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
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + 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}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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])
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            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
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + 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) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             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
    +            
    +             
    +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            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 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            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 }
    +            
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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.
    +            
    +
    + +
    +            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)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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 }
    +            
    +
    + + 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. + + +
    +            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.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: 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.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              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.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               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)) }
    +             
    +
    + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + 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 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             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) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             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)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + 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. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (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. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + 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. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + 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. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + 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. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + 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: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + 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. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

    + 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). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + 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. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + 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). +

    +

    + 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). +

    +
    +                          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 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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 + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          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 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           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
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               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) }
    +            
    +
    + + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            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
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              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.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            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.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
    +             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
    +             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    +                pkcs9(9) smime(16) alg(3) 18 }
    +            
    +             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
    +             
    +
    + + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
    +              [IMPLICIT TAGS]
    +            
    +              OneAsymmetricKey ::= SEQUENCE {
    +                  version                   Version,
    +                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    +                  privateKey                PrivateKey,
    +                  attributes            [0] Attributes OPTIONAL,
    +                  ...,
    +                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
    +                  ...
    +              }
    +            
    +              PrivateKeyInfo ::= OneAsymmetricKey
    +            
    +              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
    +            
    +              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
    +                                                 { PUBLIC-KEY,
    +                                                   { PrivateKeyAlgorithms } }
    +            
    +              PrivateKey ::= OCTET STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              PublicKey ::= BIT STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
    +              
    +
    + + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
    +              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 --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             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) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              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
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            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
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + +
    +            
    +                 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  }
    +            
    +             
    +
    + + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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))  }
    +            
    +
    + + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
    +                     * RelativeDistinguishedName ::=
    +                     *                     SET OF AttributeTypeAndValue
    +            
    +                     * AttributeTypeAndValue ::= SEQUENCE {
    +                     *        type     AttributeType,
    +                     *        value    AttributeValue }
    +                     * 
    + * @return this object as its ASN1Primitive type +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              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) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             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
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + 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. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    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.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             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 }
    +             
    +
    + + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + 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. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + 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. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       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
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             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
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            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 }
    +            
    +
    + + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                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) }
    +             
    +
    + + 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) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               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
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               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
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                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 )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            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
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (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).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (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.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + 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.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       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
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + The TbsCertificate object. +
    +            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
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            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
    +                                           }
    +            
    +
    + + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             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
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              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
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             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
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && 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);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + 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 outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + 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. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + 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 outStr. +

    +

    + Note: 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.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + 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.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
    +              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++;
    +                  }
    +              }
    +             
    +
    + + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

    + 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.

    +

    + 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.

    +
    + + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

    + BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

    + BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

    + BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

    + After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

    + After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

    + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
    + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    + + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • 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.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + 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 +

    +
    + + 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). + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + 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 +

    +
    + + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

    +
    + + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

    + This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

    + Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

    + This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

    +
    + + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

    + This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

    + @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
    + + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @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. +
    + + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

    + Implementation of DSTU7564 mac mode + +
    + + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + 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. +

    +
    +
    + + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoTouch/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoTouch/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/MonoTouch/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author
    Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + 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.

    +
    + + return whatever was following the tag. +

    + 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.

    +
    + + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

    1.3.6.1.4.1.22554

    +
    + + pbe(1) algorithms +

    1.3.6.1.4.1.22554.1

    +
    + + SHA-1(1) +

    1.3.6.1.4.1.22554.1.1

    +
    + + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
    +                LinkedCertificate := SEQUENCE {
    +                    digest        DigestInfo,                   -- digest of PQC certificate
    +                    certLocation  GeneralName,                  -- location of PQC certificate
    +                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
    +                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
    +            }
    +            
    +
    + + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
    +            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
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + 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}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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])
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            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
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + 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) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             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
    +            
    +             
    +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            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 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            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 }
    +            
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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.
    +            
    +
    + +
    +            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)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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 }
    +            
    +
    + + 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. + + +
    +            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.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: 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.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              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.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               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)) }
    +             
    +
    + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + 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 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             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) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             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)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + 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. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (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. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + 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. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + 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. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + 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. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + 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: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + 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. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

    + 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). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + 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. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + 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). +

    +

    + 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). +

    +
    +                          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 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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 + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          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 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           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
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               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) }
    +            
    +
    + + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            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
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              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.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            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.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
    +             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
    +             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    +                pkcs9(9) smime(16) alg(3) 18 }
    +            
    +             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
    +             
    +
    + + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
    +              [IMPLICIT TAGS]
    +            
    +              OneAsymmetricKey ::= SEQUENCE {
    +                  version                   Version,
    +                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    +                  privateKey                PrivateKey,
    +                  attributes            [0] Attributes OPTIONAL,
    +                  ...,
    +                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
    +                  ...
    +              }
    +            
    +              PrivateKeyInfo ::= OneAsymmetricKey
    +            
    +              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
    +            
    +              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
    +                                                 { PUBLIC-KEY,
    +                                                   { PrivateKeyAlgorithms } }
    +            
    +              PrivateKey ::= OCTET STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              PublicKey ::= BIT STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
    +              
    +
    + + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
    +              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 --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             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) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              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
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            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
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + +
    +            
    +                 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  }
    +            
    +             
    +
    + + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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))  }
    +            
    +
    + + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
    +                     * RelativeDistinguishedName ::=
    +                     *                     SET OF AttributeTypeAndValue
    +            
    +                     * AttributeTypeAndValue ::= SEQUENCE {
    +                     *        type     AttributeType,
    +                     *        value    AttributeValue }
    +                     * 
    + * @return this object as its ASN1Primitive type +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              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) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             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
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + 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. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    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.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             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 }
    +             
    +
    + + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + 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. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + 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. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       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
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             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
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            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 }
    +            
    +
    + + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                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) }
    +             
    +
    + + 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) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               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
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               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
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                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 )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            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
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (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).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (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.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + 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.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       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
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + The TbsCertificate object. +
    +            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
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            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
    +                                           }
    +            
    +
    + + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             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
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              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
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             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
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && 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);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + 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 outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + 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. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + 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 outStr. +

    +

    + Note: 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.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + 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.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
    +              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++;
    +                  }
    +              }
    +             
    +
    + + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

    + 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.

    +

    + 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.

    +
    + + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

    + BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

    + BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

    + BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

    + After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

    + After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

    + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
    + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    + + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • 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.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + 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 +

    +
    + + 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). + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + 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 +

    +
    + + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

    +
    + + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

    + This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

    + Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

    + This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

    +
    + + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

    + This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

    + @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
    + + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @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. +
    + + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

    + Implementation of DSTU7564 mac mode + +
    + + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + 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. +

    +
    +
    + + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/net20/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/net20/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/net20/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author
    Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + 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.

    +
    + + return whatever was following the tag. +

    + 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.

    +
    + + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

    1.3.6.1.4.1.22554

    +
    + + pbe(1) algorithms +

    1.3.6.1.4.1.22554.1

    +
    + + SHA-1(1) +

    1.3.6.1.4.1.22554.1.1

    +
    + + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
    +                LinkedCertificate := SEQUENCE {
    +                    digest        DigestInfo,                   -- digest of PQC certificate
    +                    certLocation  GeneralName,                  -- location of PQC certificate
    +                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
    +                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
    +            }
    +            
    +
    + + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
    +            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
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + 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}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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])
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            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
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + 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) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             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
    +            
    +             
    +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            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 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            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 }
    +            
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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.
    +            
    +
    + +
    +            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)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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 }
    +            
    +
    + + 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. + + +
    +            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.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: 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.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              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.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               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)) }
    +             
    +
    + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + 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 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             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) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             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)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + 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. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (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. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + 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. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + 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. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + 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. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + 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: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + 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. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

    + 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). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + 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. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + 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). +

    +

    + 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). +

    +
    +                          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 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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 + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          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 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           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
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               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) }
    +            
    +
    + + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            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
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              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.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            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.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
    +             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
    +             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    +                pkcs9(9) smime(16) alg(3) 18 }
    +            
    +             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
    +             
    +
    + + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
    +              [IMPLICIT TAGS]
    +            
    +              OneAsymmetricKey ::= SEQUENCE {
    +                  version                   Version,
    +                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    +                  privateKey                PrivateKey,
    +                  attributes            [0] Attributes OPTIONAL,
    +                  ...,
    +                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
    +                  ...
    +              }
    +            
    +              PrivateKeyInfo ::= OneAsymmetricKey
    +            
    +              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
    +            
    +              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
    +                                                 { PUBLIC-KEY,
    +                                                   { PrivateKeyAlgorithms } }
    +            
    +              PrivateKey ::= OCTET STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              PublicKey ::= BIT STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
    +              
    +
    + + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
    +              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 --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             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) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              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
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            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
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + +
    +            
    +                 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  }
    +            
    +             
    +
    + + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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))  }
    +            
    +
    + + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
    +                     * RelativeDistinguishedName ::=
    +                     *                     SET OF AttributeTypeAndValue
    +            
    +                     * AttributeTypeAndValue ::= SEQUENCE {
    +                     *        type     AttributeType,
    +                     *        value    AttributeValue }
    +                     * 
    + * @return this object as its ASN1Primitive type +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              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) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             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
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + 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. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    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.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             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 }
    +             
    +
    + + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + 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. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + 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. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       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
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             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
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            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 }
    +            
    +
    + + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                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) }
    +             
    +
    + + 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) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               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
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               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
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                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 )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            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
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (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).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (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.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + 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.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       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
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + The TbsCertificate object. +
    +            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
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            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
    +                                           }
    +            
    +
    + + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             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
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              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
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             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
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && 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);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + 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 outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + 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. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + 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 outStr. +

    +

    + Note: 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.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + 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.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
    +              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++;
    +                  }
    +              }
    +             
    +
    + + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

    + 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.

    +

    + 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.

    +
    + + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

    + BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

    + BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

    + BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

    + After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

    + After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

    + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
    + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    + + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • 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.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + 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 +

    +
    + + 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). + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + 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 +

    +
    + + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

    +
    + + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

    + This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

    + Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

    + This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

    +
    + + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

    + This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

    + @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
    + + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @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. +
    + + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

    + Implementation of DSTU7564 mac mode + +
    + + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + 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. +

    +
    +
    + + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/netstandard2.0/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/netstandard2.0/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/netstandard2.0/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author
    Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + 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.

    +
    + + return whatever was following the tag. +

    + 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.

    +
    + + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

    1.3.6.1.4.1.22554

    +
    + + pbe(1) algorithms +

    1.3.6.1.4.1.22554.1

    +
    + + SHA-1(1) +

    1.3.6.1.4.1.22554.1.1

    +
    + + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
    +                LinkedCertificate := SEQUENCE {
    +                    digest        DigestInfo,                   -- digest of PQC certificate
    +                    certLocation  GeneralName,                  -- location of PQC certificate
    +                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
    +                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
    +            }
    +            
    +
    + + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
    +            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
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + 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}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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])
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            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
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + 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) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             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
    +            
    +             
    +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            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 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            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 }
    +            
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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.
    +            
    +
    + +
    +            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)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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 }
    +            
    +
    + + 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. + + +
    +            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.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: 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.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              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.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               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)) }
    +             
    +
    + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + 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 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             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) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             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)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + 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. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (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. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + 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. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + 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. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + 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. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + 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: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + 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. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

    + 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). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + 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. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + 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). +

    +

    + 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). +

    +
    +                          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 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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 + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          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 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           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
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               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) }
    +            
    +
    + + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            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
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              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.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            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.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
    +             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
    +             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    +                pkcs9(9) smime(16) alg(3) 18 }
    +            
    +             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
    +             
    +
    + + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
    +              [IMPLICIT TAGS]
    +            
    +              OneAsymmetricKey ::= SEQUENCE {
    +                  version                   Version,
    +                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    +                  privateKey                PrivateKey,
    +                  attributes            [0] Attributes OPTIONAL,
    +                  ...,
    +                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
    +                  ...
    +              }
    +            
    +              PrivateKeyInfo ::= OneAsymmetricKey
    +            
    +              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
    +            
    +              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
    +                                                 { PUBLIC-KEY,
    +                                                   { PrivateKeyAlgorithms } }
    +            
    +              PrivateKey ::= OCTET STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              PublicKey ::= BIT STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
    +              
    +
    + + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
    +              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 --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             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) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              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
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            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
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + +
    +            
    +                 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  }
    +            
    +             
    +
    + + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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))  }
    +            
    +
    + + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
    +                     * RelativeDistinguishedName ::=
    +                     *                     SET OF AttributeTypeAndValue
    +            
    +                     * AttributeTypeAndValue ::= SEQUENCE {
    +                     *        type     AttributeType,
    +                     *        value    AttributeValue }
    +                     * 
    + * @return this object as its ASN1Primitive type +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              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) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             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
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + 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. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    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.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             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 }
    +             
    +
    + + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + 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. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + 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. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       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
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             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
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            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 }
    +            
    +
    + + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                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) }
    +             
    +
    + + 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) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               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
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               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
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                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 )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            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
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (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).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (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.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + 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.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       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
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + The TbsCertificate object. +
    +            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
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            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
    +                                           }
    +            
    +
    + + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             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
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              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
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             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
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && 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);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + 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 outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + 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. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + 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 outStr. +

    +

    + Note: 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.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + 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.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
    +              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++;
    +                  }
    +              }
    +             
    +
    + + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

    + 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.

    +

    + 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.

    +
    + + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

    + BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

    + BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

    + BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

    + After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

    + After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

    + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
    + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    + + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • 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.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + 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 +

    +
    + + 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). + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + 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 +

    +
    + + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

    +
    + + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

    + This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

    + Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

    + This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

    +
    + + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

    + This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

    + @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
    + + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @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. +
    + + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

    + Implementation of DSTU7564 mac mode + +
    + + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + 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. +

    +
    +
    + + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/xamarinios/BouncyCastle.Crypto.xml b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/xamarinios/BouncyCastle.Crypto.xml new file mode 100644 index 0000000..8dff432 --- /dev/null +++ b/EM_Libraries/EM_Crypt/packages/bouncycastle.netcore/1.8.6/lib/xamarinios/BouncyCastle.Crypto.xml @@ -0,0 +1,26182 @@ + + + + BouncyCastle.Crypto + + + + Base class for both the compress and decompress classes. + Holds common arrays, and static data. + + @author
    Keiron Liddle + + + An input stream that decompresses from the BZip2 format (with the file + header chars) to be read as any other stream. + + @author Keiron Liddle + + NB: note this class has been modified to read the leading BZ from the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + An output stream that compresses into the BZip2 format (with the file + header chars) into another stream. + + @author Keiron Liddle + + TODO: Update to BZip2 1.0.1 + NB: note this class has been modified to add a leading BZ to the + start of the BZIP2 stream to make it compatible with other PGP programs. + + + + modified by Oliver Merkel, 010128 + + + + A simple class the hold and calculate the CRC for sanity checking + of the data. + + @author Keiron Liddle + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Return the DER encoding of the object, null if the DER encoding can not be made. + + @return a DER byte array, null otherwise. + + + Mutable class for building ASN.1 constructed objects such as SETs or SEQUENCEs. + + + a general purpose ASN.1 decoder - note: this class differs from the + others in that it returns null after it has read the last object in + the stream. If an ASN.1 Null is encountered a Der/BER Null object is + returned. + + + Create an ASN1InputStream where no DER object will be longer than limit. + + @param input stream containing ASN.1 encoded data. + @param limit maximum size of a DER encoded object. + + + Create an ASN1InputStream based on the input byte array. The length of DER objects in + the stream is automatically limited to the length of the input array. + + @param input array containing ASN.1 encoded data. + + + build an object given its tag and the number of bytes to construct it from. + + + A Null object. + + + Create a base ASN.1 object from a byte array. + The byte array to parse. + The base ASN.1 object represented by the byte array. + + If there is a problem parsing the data, or parsing an object did not exhaust the available data. + + + + Read a base ASN.1 object from a stream. + The stream to parse. + The base ASN.1 object represented by the byte array. + If there is a problem parsing the data. + + + 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. + + + return an Octet string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + @param string the octets making up the octet string. + + + return an Asn1Sequence from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 sequence from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + sequence - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sequences you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged, + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the sequence position indicated by index. + + @param index the sequence number (starting at zero) of the object + @return the object at the sequence position indicated by index. + + + return an ASN1Set from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Return an ASN1 set from a tagged object. There is a special + case here, if an object appears to have been explicitly tagged on + reading but we were expecting it to be implicitly tagged in the + normal course of events it indicates that we lost the surrounding + set - so we need to add it back (this will happen if the tagged + object is a sequence that contains other sequences). If you are + dealing with implicitly tagged sets you really should + be using this method. + + @param obj the tagged object. + @param explicitly true if the object is meant to be explicitly tagged + false otherwise. + @exception ArgumentException if the tagged object cannot + be converted. + + + return the object at the set position indicated by index. + + @param index the set number (starting at zero) of the object + @return the object at the set position indicated by index. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if the object is explicitly tagged. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + return whether or not the object may be explicitly tagged. +

    + 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.

    +
    + + return whatever was following the tag. +

    + 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.

    +
    + + 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. + + + iso.org.dod.internet.private.enterprise.legion-of-the-bouncy-castle +

    1.3.6.1.4.1.22554

    +
    + + pbe(1) algorithms +

    1.3.6.1.4.1.22554.1

    +
    + + SHA-1(1) +

    1.3.6.1.4.1.22554.1.1

    +
    + + SHA-2.SHA-256; 1.3.6.1.4.1.22554.1.2.1 + + + SHA-2.SHA-384; 1.3.6.1.4.1.22554.1.2.2 + + + SHA-2.SHA-512; 1.3.6.1.4.1.22554.1.2.3 + + + SHA-2.SHA-224; 1.3.6.1.4.1.22554.1.2.4 + + + PKCS-5(1)|PKCS-12(2) + SHA-1.PKCS5; 1.3.6.1.4.1.22554.1.1.1 + + + SHA-1.PKCS12; 1.3.6.1.4.1.22554.1.1.2 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.1 + + + SHA-256.PKCS12; 1.3.6.1.4.1.22554.1.2.1.2 + + + AES(1) . (CBC-128(2)|CBC-192(22)|CBC-256(42)) + 1.3.6.1.4.1.22554.1.1.2.1.2 + + + 1.3.6.1.4.1.22554.1.1.2.1.22 + + + 1.3.6.1.4.1.22554.1.1.2.1.42 + + + 1.3.6.1.4.1.22554.1.1.2.2.2 + + + 1.3.6.1.4.1.22554.1.1.2.2.22 + + + 1.3.6.1.4.1.22554.1.1.2.2.42 + + + signature(2) algorithms + + + Sphincs-256 + + + XMSS + + + XMSS^MT + + + key_exchange(3) algorithms + + + NewHope + + + + Extension to tie an alternate certificate to the containing certificate. +
    +                LinkedCertificate := SEQUENCE {
    +                    digest        DigestInfo,                   -- digest of PQC certificate
    +                    certLocation  GeneralName,                  -- location of PQC certificate
    +                    certIssuer    [0] Name OPTIONAL,            -- issuer of PQC cert (if different from current certificate)
    +                    cACerts       [1] GeneralNames OPTIONAL,    -- CA certificates for PQC cert (one of more locations)
    +            }
    +            
    +
    + + A BER Null object. + + + return the DER octets that make up this string. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + create an empty sequence + + + create a set containing one object + + + create a set containing a vector of objects. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + See https://www.bsi.bund.de/cae/servlet/contentblob/471398/publicationFile/30615/BSI-TR-03111_pdf.pdf + + + 0.4.0.127.0.7.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 OID: 0.4.0.127.0.7.1.1.5.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA-1 + OID: 0.4.0.127.0.7.1.1.5.1.1.1 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA224 + OID: 0.4.0.127.0.7.1.1.5.1.1.2 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA256 + OID: 0.4.0.127.0.7.1.1.5.1.1.3 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA384 + OID: 0.4.0.127.0.7.1.1.5.1.1.4 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function SHA512 + OID: 0.4.0.127.0.7.1.1.5.1.1.5 + + + ElGamal Elliptic Curve Key Agreement and Key Derivation according to X963 + with hash function RIPEMD160 + OID: 0.4.0.127.0.7.1.1.5.1.1.6 + + + Key Derivation Function for Session Keys + + +
    +            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
    +             }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertConfirmContent ::= SEQUENCE OF CertStatus
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertifiedKeyPair ::= SEQUENCE {
    +                                             certOrEncCert       CertOrEncCert,
    +                                             privateKey      [0] EncryptedValue      OPTIONAL,
    +                                             -- see [CRMF] for comment on encoding
    +                                             publicationInfo [1] PKIPublicationInfo  OPTIONAL
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertOrEncCert ::= CHOICE {
    +                                 certificate     [0] CMPCertificate,
    +                                 encryptedCert   [1] EncryptedValue
    +                      }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertRepMessage ::= SEQUENCE {
    +                                     caPubs       [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                        OPTIONAL,
    +                                     response         SEQUENCE OF CertResponse
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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]
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +                             --   }
    +                  }
    +             
    + @return a basic ASN.1 object representation. +
    + + Note: the addition of attribute certificates is a BC extension. + + +
    +             CMPCertificate ::= CHOICE {
    +                        x509v3PKCert        Certificate
    +                        x509v2AttrCert      [1] AttributeCertificate
    +              }
    +             
    + Note: the addition of attribute certificates is a BC extension. + + @return a basic ASN.1 object representation. +
    + +
    +            CrlAnnContent ::= SEQUENCE OF CertificateList
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ErrorMsgContent ::= SEQUENCE {
    +                                   pKIStatusInfo          PKIStatusInfo,
    +                                   errorCode              INTEGER           OPTIONAL,
    +                                   -- implementation-specific error codes
    +                                   errorDetails           PKIFreeText       OPTIONAL
    +                                   -- implementation-specific error details
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            GenRepContent ::= SEQUENCE OF InfoTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + + 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}
    +             
    +
    + +
    +            InfoTypeAndValue ::= SEQUENCE {
    +                                    infoType               OBJECT IDENTIFIER,
    +                                    infoValue              ANY DEFINED BY infoType  OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                         }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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.
    +                  }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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])
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PkiBody. + @param type one of the TYPE_* constants + @param content message content + + +
    +            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
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiConfirmContent ::= NULL
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            certRevoked         (10),
    +            certConfirmed       (11),
    +            wrongIntegrity      (12),
    +            badRecipientNonce   (13), 
    +            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
    +            badSenderNonce      (18),
    +            badCertTemplate     (19),
    +            signerNotTrusted    (20),
    +            transactionIdInUse  (21),
    +            unsupportedVersion  (22),
    +            notAuthorized       (23),
    +            systemUnavail       (24),    
    +            systemFailure       (25),
    +              -- the request cannot be handled due to system failure
    +            duplicateCertReq    (26) 
    +            
    +
    + + Basic constructor. + + + Return the number of string elements present. + + @return number of elements present. + + + Return the UTF8STRING at index. + + @param index index of the string of interest + @return the string at index. + + +
    +            PkiFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
    +            
    +
    + + Value for a "null" recipient or sender. + + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + + 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) + + +
    +            PkiMessage ::= SEQUENCE {
    +                             header           PKIHeader,
    +                             body             PKIBody,
    +                             protection   [0] PKIProtection OPTIONAL,
    +                             extraCerts   [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
    +                                                                                OPTIONAL
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PkiMessages ::= SEQUENCE SIZE (1..MAX) OF PkiMessage
    +            
    + @return a basic ASN.1 object representation. +
    + + @param status + + + @param status + @param statusString + + +
    +             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
    +            
    +             
    +
    + +
    +            PollRepContent ::= SEQUENCE OF SEQUENCE {
    +                    certReqId              INTEGER,
    +                    checkAfter             INTEGER,  -- time in seconds
    +                    reason                 PKIFreeText OPTIONAL
    +                }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PollReqContent ::= SEQUENCE OF SEQUENCE {
    +                                   certReqId              INTEGER
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyChallContent ::= SEQUENCE OF Challenge
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            PopoDecKeyRespContent ::= SEQUENCE OF INTEGER
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            ProtectedPart ::= SEQUENCE {
    +                               header    PKIHeader,
    +                               body      PKIBody
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevAnnContent ::= SEQUENCE {
    +                  status              PKIStatus,
    +                  certId              CertId,
    +                  willBeRevokedAt     GeneralizedTime,
    +                  badSinceDate        GeneralizedTime,
    +                  crlDetails          Extensions  OPTIONAL
    +                   -- extra CRL details (e.g., crl number, reason, location, etc.)
    +            }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +                        }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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)
    +              }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            RevReqContent ::= SEQUENCE OF RevDetails
    +            
    + @return a basic ASN.1 object representation. +
    + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attribute ::= SEQUENCE {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues SET OF AttributeValue
    +            }
    +            
    +
    + +
    +            Attributes ::=
    +              SET SIZE(1..MAX) OF Attribute -- according to RFC 5652
    +            
    + @return +
    + + Return the first attribute matching the given OBJECT IDENTIFIER + + + Return all the attributes matching the OBJECT IDENTIFIER oid. The vector will be + empty if there are no attributes of the required type present. + + @param oid type of attribute required. + @return a vector of all the attributes found of type oid. + + + Return a new table with the passed in attribute added. + + @param attrType + @param attrValue + @return + + + 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. + + + return an AuthenticatedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             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
    +             
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            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 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +            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 }
    +            
    +
    + + The other Revocation Info arc + id-ri OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) + dod(6) internet(1) security(5) mechanisms(5) pkix(7) ri(16) } + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= Sequence {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + 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. + + + return a CompressedData object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + RFC 3274 - CMS Compressed Data. +
    +            CompressedData ::= SEQUENCE {
    +             version CMSVersion,
    +             compressionAlgorithm CompressionAlgorithmIdentifier,
    +             encapContentInfo EncapsulatedContentInfo
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= SEQUENCE {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + 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. + + + return an AuthEnvelopedData object from the given object. + + @param obj the object we want converted. + @throws ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            MQVuserKeyingMaterial ::= SEQUENCE {
    +              ephemeralPublicKey OriginatorPublicKey,
    +              addedukm [0] EXPLICIT UserKeyingMaterial OPTIONAL  }
    +            
    +
    + + return an EncryptedContentInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EncryptedContentInfo ::= Sequence {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +            EncryptedContentInfo ::= SEQUENCE {
    +                contentType ContentType,
    +                contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
    +                encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +            }
    +            
    +
    + +
    +                  EncryptedData ::= SEQUENCE {
    +                                version CMSVersion,
    +                                encryptedContentInfo EncryptedContentInfo,
    +                                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + return an EnvelopedData 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. + + + return an EnvelopedData object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= Sequence {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            EnvelopedData ::= SEQUENCE {
    +                version CMSVersion,
    +                originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL,
    +                recipientInfos RecipientInfos,
    +                encryptedContentInfo EncryptedContentInfo,
    +                unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekIdentifier ::= Sequence {
    +                keyIdentifier OCTET STRING,
    +                date GeneralizedTime OPTIONAL,
    +                other OtherKeyAttribute OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return a KekRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KekRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 4
    +                kekID KekIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + 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. + + + return an KeyAgreeRecipientIdentifier object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyAgreeRecipientIdentifier ::= CHOICE {
    +                issuerAndSerialNumber IssuerAndSerialNumber,
    +                rKeyId [0] IMPLICIT RecipientKeyIdentifier
    +            }
    +            
    +
    + + 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. + + + return a KeyAgreeRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + * Produce an object suitable for an Asn1OutputStream. + *
    +                     * KeyAgreeRecipientInfo ::= Sequence {
    +                     *     version CMSVersion,  -- always set to 3
    +                     *     originator [0] EXPLICIT OriginatorIdentifierOrKey,
    +                     *     ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL,
    +                     *     keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                     *     recipientEncryptedKeys RecipientEncryptedKeys
    +                     * }
    +            		 *
    +            		 * UserKeyingMaterial ::= OCTET STRING
    +                     * 
    +
    + + return a KeyTransRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            KeyTransRecipientInfo ::= Sequence {
    +                version CMSVersion,  -- always set to 0 or 2
    +                rid RecipientIdentifier,
    +                keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + +
    +            MetaData ::= SEQUENCE {
    +              hashProtected        BOOLEAN,
    +              fileName             UTF8String OPTIONAL,
    +              mediaType            IA5String OPTIONAL,
    +              otherMetaData        Attributes OPTIONAL
    +            }
    +            
    + @return +
    + + 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. + + + return an OriginatorIdentifierOrKey object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OriginatorIdentifierOrKey ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier,
    +                 originatorKey [1] OriginatorPublicKey
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + 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. + + + return an OriginatorInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorInfo ::= Sequence {
    +                certs [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL
    +            }
    +            
    +
    + + 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. + + + return an OriginatorPublicKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OriginatorPublicKey ::= Sequence {
    +                algorithm AlgorithmIdentifier,
    +                publicKey BIT STRING
    +            }
    +            
    +
    + + return an OtherKeyAttribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherKeyAttribute ::= Sequence {
    +                keyAttrId OBJECT IDENTIFIER,
    +                keyAttr ANY DEFINED BY keyAttrId OPTIONAL
    +            }
    +            
    +
    + + return a OtherRecipientInfo 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. + + + return a OtherRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            OtherRecipientInfo ::= Sequence {
    +               oriType OBJECT IDENTIFIER,
    +               oriValue ANY DEFINED BY oriType }
    +            
    +
    + + return a OtherRevocationInfoFormat object from a tagged object. + + @param obj the tagged object holding the object we want. + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the object held by the + tagged object cannot be converted. + + + return a OtherRevocationInfoFormat object from the given object. + + @param obj the object we want converted. + @exception IllegalArgumentException if the object cannot be converted. + + + Produce an object suitable for an ASN1OutputStream. +
    +            OtherRevocationInfoFormat ::= SEQUENCE {
    +                 otherRevInfoFormat OBJECT IDENTIFIER,
    +                 otherRevInfo ANY DEFINED BY otherRevInfoFormat }
    +            
    +
    + + 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. + + + return a PasswordRecipientInfo object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            PasswordRecipientInfo ::= Sequence {
    +              version CMSVersion,   -- Always set to 0
    +              keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier
    +                                        OPTIONAL,
    +             keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier,
    +             encryptedKey EncryptedKey }
    +            
    +
    + + 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. + + + return a RecipientEncryptedKey object from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientEncryptedKey ::= SEQUENCE {
    +                rid KeyAgreeRecipientIdentifier,
    +                encryptedKey EncryptedKey
    +            }
    +            
    +
    + + return a RecipientIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RecipientInfo ::= CHOICE {
    +                ktri KeyTransRecipientInfo,
    +                kari [1] KeyAgreeRecipientInfo,
    +                kekri [2] KekRecipientInfo,
    +                pwri [3] PasswordRecipientInfo,
    +                ori [4] OtherRecipientInfo }
    +            
    +
    + + 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. + + + return a RecipientKeyIdentifier object from the given object. + + @param _obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             RecipientKeyIdentifier ::= Sequence {
    +                 subjectKeyIdentifier SubjectKeyIdentifier,
    +                 date GeneralizedTime OPTIONAL,
    +                 other OtherKeyAttribute OPTIONAL
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + +
    +               ScvpReqRes ::= SEQUENCE {
    +               request  [0] EXPLICIT ContentInfo OPTIONAL,
    +               response     ContentInfo }
    +            
    + @return the ASN.1 primitive representation. +
    + + a signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SignedData ::= Sequence {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + +
    +            SignedData ::= SEQUENCE {
    +                version CMSVersion,
    +                digestAlgorithms DigestAlgorithmIdentifiers,
    +                encapContentInfo EncapsulatedContentInfo,
    +                certificates [0] IMPLICIT CertificateSet OPTIONAL,
    +                crls [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                signerInfos SignerInfos
    +              }
    +            
    +
    + + return a SignerIdentifier object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignerIdentifier ::= CHOICE {
    +                 issuerAndSerialNumber IssuerAndSerialNumber,
    +                 subjectKeyIdentifier [0] SubjectKeyIdentifier
    +             }
    +            
    +             SubjectKeyIdentifier ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              SignerInfo ::= Sequence {
    +                  version Version,
    +                  SignerIdentifier sid,
    +                  digestAlgorithm DigestAlgorithmIdentifier,
    +                  authenticatedAttributes [0] IMPLICIT Attributes OPTIONAL,
    +                  digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier,
    +                  encryptedDigest EncryptedDigest,
    +                  unauthenticatedAttributes [1] IMPLICIT Attributes OPTIONAL
    +              }
    +            
    +              EncryptedDigest ::= OCTET STRING
    +            
    +              DigestAlgorithmIdentifier ::= AlgorithmIdentifier
    +            
    +              DigestEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
    +             
    +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + +
    +            TimeStampAndCRL ::= SEQUENCE {
    +                timeStamp   TimeStampToken,          -- according to RFC 3161
    +                crl         CertificateList OPTIONAL -- according to RFC 5280
    +             }
    +            
    + @return +
    + +
    +            TimeStampedData ::= SEQUENCE {
    +              version              INTEGER { v1(1) },
    +              dataUri              IA5String OPTIONAL,
    +              metaData             MetaData OPTIONAL,
    +              content              OCTET STRING OPTIONAL,
    +              temporalEvidence     Evidence
    +            }
    +            
    + @return +
    + +
    +            TimeStampTokenEvidence ::=
    +               SEQUENCE SIZE(1..MAX) OF TimeStampAndCrl
    +            
    + @return +
    + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertId ::= SEQUENCE {
    +                            issuer           GeneralName,
    +                            serialNumber     INTEGER }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new CertReqMsg. + @param certReq CertRequest + @param popo may be null + @param regInfo may be null + + +
    +            CertReqMsg ::= SEQUENCE {
    +                               certReq   CertRequest,
    +                               pop       ProofOfPossession  OPTIONAL,
    +                               -- content depends upon key type
    +                               regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + + Sets the X.509 version. Note: for X509v3, use 2 here. + + + Sets the issuer unique ID (deprecated in X.509v3) + + + Sets the subject unique ID (deprecated in X.509v3) + + +
    +             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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            EncKeyWithID ::= SEQUENCE {
    +                 privateKey           PrivateKeyInfo,
    +                 identifier CHOICE {
    +                    string               UTF8String,
    +                    generalName          GeneralName
    +                } OPTIONAL
    +            }
    +            
    + @return +
    + +
    +               EncryptedKey ::= CHOICE {
    +                   encryptedValue        EncryptedValue, -- deprecated
    +                   envelopedData     [0] EnvelopedData }
    +                   -- The encrypted private key MUST be placed in the envelopedData
    +                   -- encryptedContentInfo encryptedContent OCTET STRING.
    +            
    +
    + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            OptionalValidity ::= SEQUENCE {
    +                                   notBefore  [0] Time OPTIONAL,
    +                                   notAfter   [1] Time OPTIONAL } --at least one MUST be present
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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.
    +            
    +
    + +
    +            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)
    +            
    + @return a basic ASN.1 object representation. +
    + + Password-based MAC value for use with POPOSigningKeyInput. + + + Creates a new PKMACValue. + @param params parameters for password-based MAC + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + + Creates a new PKMACValue. + @param aid CMPObjectIdentifiers.passwordBasedMAC, with PBMParameter + @param value MAC of the DER-encoded SubjectPublicKeyInfo + + +
    +            PKMACValue ::= SEQUENCE {
    +                 algId  AlgorithmIdentifier,
    +                 -- algorithm value shall be PasswordBasedMac 1.2.840.113533.7.66.13
    +                 -- parameter value is PBMParameter
    +                 value  BIT STRING }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            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 }
    +            
    +
    + + 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. + + +
    +            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.
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a new PopoSigningKeyInput with sender name as authInfo. + + + Creates a new PopoSigningKeyInput using password-based MAC. + + + Returns the sender field, or null if authInfo is publicKeyMac + + + Returns the publicKeyMac field, or null if authInfo is sender + + +
    +            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
    +            
    + @return a basic ASN.1 object representation. +
    + + Creates a ProofOfPossession with type raVerified. + + + Creates a ProofOfPossession for a signing key. + + + Creates a ProofOfPossession for key encipherment or agreement. + @param type one of TYPE_KEY_ENCIPHERMENT or TYPE_KEY_AGREEMENT + + +
    +            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 }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +            SinglePubInfo ::= SEQUENCE {
    +                   pubMethod    INTEGER {
    +                      dontCare    (0),
    +                      x500        (1),
    +                      web         (2),
    +                      ldap        (3) },
    +                  pubLocation  GeneralName OPTIONAL }
    +            
    + @return a basic ASN.1 object representation. +
    + + + Table of the available named parameters for GOST 3410-2001 / 2012. + + + + return the ECDomainParameters object for the given OID, null if it + isn't present. + + @param oid an object identifier representing a named parameters, if present. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + return the named curve name represented by the given object identifier. + + +
    +             Gost28147-89-Parameters ::=
    +                           SEQUENCE {
    +                                   iv                   Gost28147-89-IV,
    +                                   encryptionParamSet   OBJECT IDENTIFIER
    +                            }
    +            
    +               Gost28147-89-IV ::= OCTET STRING (SIZE (8))
    +             
    +
    + + table of the available named parameters for GOST 3410-94. + + + 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. + + + returns an enumeration containing the name strings for parameters + contained in this structure. + + + Base class for an application specific object + + + Return the enclosed object assuming explicit tagging. + + @return the resulting object + @throws IOException if reconstruction fails. + + + 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. + + + return a Bit string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + @param data the octets making up the bit string. + @param padBits the number of extra bits at the end of the string. + + + Return the octets contained in this BIT STRING, checking that this BIT STRING really + does represent an octet aligned string. Only use this method when the standard you are + following dictates that the BIT STRING will be octet aligned. + + @return a copy of the octet aligned data. + + + @return the value of the bit string as an int (truncating if necessary) + + + Der BMPString object. + + + return a BMP string from the given object. + + @param obj the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a bool from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + return a DerBoolean from the passed in bool. + + + return a Boolean 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an Enumerated 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. + + + Class representing the DER-type External + + + Creates a new instance of DerExternal + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param externalData The external data in its encoded form. + + + Creates a new instance of DerExternal. + See X.690 for more informations about the meaning of these parameters + @param directReference The direct reference or null if not set. + @param indirectReference The indirect reference or null if not set. + @param dataValueDescriptor The data value descriptor or null if not set. + @param encoding The encoding to be used for the external data + @param externalData The external data + + + The encoding of the content. Valid values are +
      +
    • 0 single-ASN1-type
    • +
    • 1 OCTET STRING
    • +
    • 2 BIT STRING
    • +
    +
    + + Generalized time object. + + + return a generalized time from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return a Generalized Time 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 tagged object cannot + be converted. + + + The correct format for this is YYYYMMDDHHMMSS[.f]Z, or without the Z + for local time, or Z+-HHMM on the end, for difference between local + time and UTC time. The fractional second amount f must consist of at + least one number with trailing zeroes removed. + + @param time the time string. + @exception ArgumentException if string is an illegal format. + + + base constructor from a local time object + + + Return the time. + @return The time string as it appeared in the encoded object. + + + return the time - always in the form of + YYYYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyyyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +
    + + return a Graphic String from the passed in object + + @param obj a DerGraphicString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DerGraphicString instance, or null. + + + return a Graphic String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DerGraphicString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der IA5String object - this is an ascii string. + + + return a IA5 string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation. + + + 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. + + + 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. + + + return an integer from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + in some cases positive values Get crammed into a space, + that's not quite big enough... + + + Apply the correct validation for an INTEGER primitive following the BER rules. + + @param bytes The raw encoding of the integer. + @return true if the (in)put fails this validation. + + + A Null object. + + + Der NumericString object - this is an ascii string of characters {0,1,2,3,4,5,6,7,8,9, }. + + + return a Numeric string from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - without validation.. + + + 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. + + + Return true if the string can be represented as a NumericString ('0'..'9', ' ') + + @param str string to validate. + @return true if numeric, fale otherwise. + + + return an Oid from the passed in object + + @exception ArgumentException if the object cannot be converted. + + + return an object Identifier 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. + + + Return true if this oid is an extension of the passed in branch, stem. + @param stem the arc or branch that is a possible parent. + @return true if the branch is on the passed in stem, false otherwise. + + + The octets making up the octet string. + + + Der PrintableString object. + + + return a printable string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor - this does not validate the string + + + 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. + + + 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. + + + create an empty sequence + + + create a sequence containing one object + + + create a sequence containing a vector of objects. + + + A Der encoded set object + + + create an empty set + + + @param obj - a single object that makes up the set. + + + @param v - a vector of objects making up the set. + + + Der T61String (also the teletex string) - 8-bit characters + + + return a T61 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - with bytes. + + + basic constructor - with string. + + + 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). + + + @param tagNo the tag number for this object. + @param obj the tagged object. + + + @param explicitly true if an explicitly tagged object. + @param tagNo the tag number for this object. + @param obj the tagged object. + + + create an implicitly tagged object that contains a zero + length sequence. + + + Der UniversalString object. + + + return a Universal string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + UTC time object. + + + return an UTC Time from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + 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). +

    + @param time the time string.

    +
    + + base constructor from a DateTime object + + + 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. + + + 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. + + + return the time - always in the form of + YYMMDDhhmmssGMT(+hh:mm|-hh:mm). +

    + Normally in a certificate we would expect "Z" rather than "GMT", + however adding the "GMT" means we can just use: +

    +                dateF = new SimpleDateFormat("yyMMddHHmmssz");
    +            
    + To read in the time and Get a date which is compatible with our local + time zone.

    +

    + Note: 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.

    +
    + + + Return a time string as an adjusted date with a 4 digit year. + This goes in the range of 1950 - 2049. + + + + Der UTF8String object. + + + return an UTF8 string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + return a Videotex String from the passed in object + + @param obj a DERVideotexString or an object that can be converted into one. + @exception IllegalArgumentException if the object cannot be converted. + @return a DERVideotexString instance, or null. + + + return a Videotex String from a tagged object. + + @param obj the tagged object holding the object we want + @param explicit true if the object is meant to be explicitly + tagged false otherwise. + @exception IllegalArgumentException if the tagged object cannot + be converted. + @return a DERVideotexString instance, or null. + + + basic constructor - with bytes. + @param string the byte encoding of the characters making up the string. + + + Der VisibleString object. + + + return a Visible string from the passed in object. + + @exception ArgumentException if the object cannot be converted. + + + 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. + + + basic constructor - byte encoded string. + + + basic constructor + + + Edwards Elliptic Curve Object Identifiers (RFC 8410) + + + + RFC 3126: 4.3.1 Certificate Values Attribute Definition + + CertificateValues ::= SEQUENCE OF Certificate + + + + +
    +            CommitmentTypeIndication ::= SEQUENCE {
    +                 commitmentTypeId   CommitmentTypeIdentifier,
    +                 commitmentTypeQualifier   SEQUENCE SIZE (1..MAX) OF
    +                         CommitmentTypeQualifier OPTIONAL }
    +            
    +
    + + Commitment type qualifiers, used in the Commitment-Type-Indication attribute (RFC3126). + +
    +               CommitmentTypeQualifier ::= SEQUENCE {
    +                   commitmentTypeIdentifier  CommitmentTypeIdentifier,
    +                   qualifier          ANY DEFINED BY commitmentTypeIdentifier OPTIONAL }
    +             
    +
    + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + + + Creates a new CommitmentTypeQualifier instance. + + @param commitmentTypeIdentifier a CommitmentTypeIdentifier value + @param qualifier the qualifier, defined by the above field. + + + Creates a new CommitmentTypeQualifier instance. + + @param as CommitmentTypeQualifier structure + encoded as an Asn1Sequence. + + + Returns a DER-encodable representation of this instance. + + @return a Asn1Object value + + + + RFC 3126: 4.2.1 Complete Certificate Refs Attribute Definition + + CompleteCertificateRefs ::= SEQUENCE OF OtherCertID + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CompleteRevocationRefs ::= SEQUENCE OF CrlOcspRef + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlIdentifier ::= SEQUENCE + { + crlissuer Name, + crlIssuedTime UTCTime, + crlNumber INTEGER OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CRLListID ::= SEQUENCE + { + crls SEQUENCE OF CrlValidatedID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlOcspRef ::= SEQUENCE { + crlids [0] CRLListID OPTIONAL, + ocspids [1] OcspListID OPTIONAL, + otherRev [2] OtherRevRefs OPTIONAL + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + CrlValidatedID ::= SEQUENCE { + crlHash OtherHash, + crlIdentifier CrlIdentifier OPTIONAL} + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspIdentifier ::= SEQUENCE { + ocspResponderID ResponderID, + -- As in OCSP response data + producedAt GeneralizedTime + -- As in OCSP response data + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspListID ::= SEQUENCE { + ocspResponses SEQUENCE OF OcspResponsesID + } + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OcspResponsesID ::= SEQUENCE { + ocspIdentifier OcspIdentifier, + ocspRepHash OtherHash OPTIONAL + } + + + + + + + OtherCertID ::= SEQUENCE { + otherCertHash OtherHash, + issuerSerial IssuerSerial OPTIONAL + } + + + + + + + OtherHash ::= CHOICE { + sha1Hash OtherHashValue, -- This contains a SHA-1 hash + otherHash OtherHashAlgAndValue + } + + OtherHashValue ::= OCTET STRING + + + + + + Summary description for OtherHashAlgAndValue. + + + + OtherHashAlgAndValue ::= SEQUENCE { + hashAlgorithm AlgorithmIdentifier, + hashValue OtherHashValue + } + + OtherHashValue ::= OCTET STRING + + + + + + RFC 3126: 4.2.2 Complete Revocation Refs Attribute Definition + + OtherRevRefs ::= SEQUENCE + { + otherRevRefType OtherRevRefType, + otherRevRefs ANY DEFINED BY otherRevRefType + } + + OtherRevRefType ::= OBJECT IDENTIFIER + + + + + + RFC 3126: 4.3.2 Revocation Values Attribute Definition + + OtherRevVals ::= SEQUENCE + { + otherRevValType OtherRevValType, + otherRevVals ANY DEFINED BY otherRevValType + } + + OtherRevValType ::= OBJECT IDENTIFIER + + + + + + + OtherSigningCertificate ::= SEQUENCE { + certs SEQUENCE OF OtherCertID, + policies SEQUENCE OF PolicyInformation OPTIONAL + } + + + + + + RFC 5126: 6.3.4. revocation-values Attribute Definition + + RevocationValues ::= SEQUENCE { + crlVals [0] SEQUENCE OF CertificateList OPTIONAL, + ocspVals [1] SEQUENCE OF BasicOCSPResponse OPTIONAL, + otherRevVals [2] OtherRevVals OPTIONAL + } + + + + + + + SignaturePolicyId ::= SEQUENCE { + sigPolicyIdentifier SigPolicyId, + sigPolicyHash SigPolicyHash, + sigPolicyQualifiers SEQUENCE SIZE (1..MAX) OF SigPolicyQualifierInfo OPTIONAL + } + + SigPolicyId ::= OBJECT IDENTIFIER + + SigPolicyHash ::= OtherHashAlgAndValue + + + + + + + SignaturePolicyIdentifier ::= CHOICE { + SignaturePolicyId SignaturePolicyId, + SignaturePolicyImplied SignaturePolicyImplied + } + + SignaturePolicyImplied ::= NULL + + + + + +
    +              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.
    +             
    +
    + + Signer-Location attribute (RFC3126). + +
    +               SignerLocation ::= SEQUENCE {
    +                   countryName        [0] DirectoryString OPTIONAL,
    +                   localityName       [1] DirectoryString OPTIONAL,
    +                   postalAddress      [2] PostalAddress OPTIONAL }
    +            
    +               PostalAddress ::= SEQUENCE SIZE(1..6) OF DirectoryString
    +             
    +
    + +
    +               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)) }
    +             
    +
    + + + + SigPolicyQualifierInfo ::= SEQUENCE { + sigPolicyQualifierId SigPolicyQualifierId, + sigQualifier ANY DEFINED BY sigPolicyQualifierId + } + + SigPolicyQualifierId ::= OBJECT IDENTIFIER + + + + + constructor + + +
    +            ContentHints ::= SEQUENCE {
    +              contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL,
    +              contentType ContentType }
    +            
    +
    + + Create from OCTET STRING whose octets represent the identifier. + + + Create from byte array representing the identifier. + + + The definition of ContentIdentifier is +
    +            ContentIdentifier ::=  OCTET STRING
    +            
    + id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 7 } +
    + + constructor + + +
    +            EssCertID ::= SEQUENCE {
    +                certHash Hash,
    +                issuerSerial IssuerSerial OPTIONAL }
    +            
    +
    + +
    +             EssCertIDv2 ::=  SEQUENCE {
    +                 hashAlgorithm     AlgorithmIdentifier
    +                          DEFAULT {algorithm id-sha256},
    +                 certHash          Hash,
    +                 issuerSerial      IssuerSerial OPTIONAL
    +             }
    +            
    +             Hash ::= OCTET STRING
    +            
    +             IssuerSerial ::= SEQUENCE {
    +                 issuer         GeneralNames,
    +                 serialNumber   CertificateSerialNumber
    +             }
    +             
    +
    + + constructor + + +
    +             OtherCertID ::= SEQUENCE {
    +                 otherCertHash    OtherHash,
    +                 issuerSerial     IssuerSerial OPTIONAL }
    +            
    +             OtherHash ::= CHOICE {
    +                 sha1Hash     OCTET STRING,
    +                 otherHash    OtherHashAlgAndValue }
    +            
    +             OtherHashAlgAndValue ::= SEQUENCE {
    +                 hashAlgorithm    AlgorithmIdentifier,
    +                 hashValue        OCTET STRING }
    +            
    +             
    +
    + + constructors + + + The definition of OtherSigningCertificate is +
    +            OtherSigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF OtherCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + 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 } +
    + + constructors + + + The definition of SigningCertificate is +
    +            SigningCertificate ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertID,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 12 } +
    + + The definition of SigningCertificateV2 is +
    +            SigningCertificateV2 ::=  SEQUENCE {
    +                 certs        SEQUENCE OF EssCertIDv2,
    +                 policies     SEQUENCE OF PolicyInformation OPTIONAL
    +            }
    +            
    + id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) + member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) + smime(16) id-aa(2) 47 } +
    + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 1.3.6.1.4.1.11591.15 - ellipticCurve + + + 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. +

    + If you use this interface your class should also implement the getInstance + pattern which takes a tag object and the tagging mode used. +

    +
    + + basic interface for Der string objects. + + + The CscaMasterList object. This object can be wrapped in a + CMSSignedData to be published in LDAP. + +
    +             CscaMasterList ::= SEQUENCE {
    +               version                CscaMasterListVersion,
    +               certList               SET OF Certificate }
    +               
    +             CscaMasterListVersion :: INTEGER {v0(0)}
    +             
    +
    + + The DataGroupHash object. +
    +             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) }
    +            
    +             
    +
    + + The LDSSecurityObject object (V1.8). +
    +             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)}
    +             
    +
    + +
    +            LDSVersionInfo ::= SEQUENCE {
    +               ldsVersion PRINTABLE STRING
    +               unicodeVersion PRINTABLE STRING
    +             }
    +            
    + @return +
    + + 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. + + + Certificate extensionDate of certificate generation + +
    +            		DateOfCertGenSyntax ::= GeneralizedTime
    +             
    +
    + + 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. + + + Attribute to indicate admissions to certain professions. May be used as + attribute in attribute certificate or as extension in a certificate + + + 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). + + + A declaration of majority. May be used as attribute in attribute + certificate or as extension in a certificate + + + + Serial number of the smart card containing the corresponding private key + +
    +            		ICCSNSyntax ::= OCTET STRING (SIZE(8..20))
    +             
    +
    + + + Reference for a file of a smartcard that stores the public key of this + certificate and that is used as �security anchor�. + +
    +            		PKReferenceSyntax ::= OCTET STRING (SIZE(20))
    +             
    +
    + + Some other restriction regarding the usage of this certificate. May be + used as attribute in attribute certificate or as extension in a + certificate. + +
    +            		RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Restriction +
    + + + (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. + +
    +            		RetrieveIfAllowed ::= BOOLEAN
    +             
    +
    + + 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 + + + Base ObjectIdentifier for naming authorities + + + 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. + +
    +            		CertInDirSince ::= GeneralizedTime
    +             
    +
    + + Hash of a certificate in OCSP. + + @see Org.BouncyCastle.Asn1.IsisMtt.Ocsp.CertHash + + +
    +            		NameAtBirth ::= DirectoryString(SIZE(1..64)
    +             
    + + Used in + {@link Org.BouncyCastle.Asn1.X509.SubjectDirectoryAttributes SubjectDirectoryAttributes} +
    + + 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. + +
    +                          AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdditionalInformationSyntax +
    + + 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. + +
    +            		LiabilityLimitationFlagSyntax ::= BOOLEAN
    +             
    +
    + + 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. +

    +

    +

    +                CertHash ::= SEQUENCE {
    +                  hashAlgorithm AlgorithmIdentifier,
    +                  certificateHash OCTET STRING
    +                }
    +            
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertHash: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param hashAlgorithm The hash algorithm identifier. + @param certificateHash The hash of the whole DER encoding of the certificate. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 CertHash ::= SEQUENCE {
    +                   hashAlgorithm AlgorithmIdentifier,
    +                   certificateHash OCTET STRING
    +                 }
    +             
    + + @return an Asn1Object +
    + + ISIS-MTT-Optional: The certificate requested by the client by inserting the + RetrieveIfAllowed extension in the request, will be returned in this + extension. +

    + 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: +

      +
    • a) the responder supports the extension and is allowed to publish the + certificate: RequestedCertificate returned including the requested + certificate
    • +
    • b) the responder supports the extension but is NOT allowed to publish + the certificate: RequestedCertificate returned including an empty OCTET + STRING
    • +
    • c) the responder does not support the extension: RequestedCertificate is + not included in the response
    • +
    + 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. +

    +

    +                       RequestedCertificate ::= CHOICE {
    +                         Certificate Certificate,
    +                         publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                         attributeCertificate [1] EXPLICIT OCTET STRING
    +                       }
    +            
    +
    + + Constructor from a given details. +

    + Only one parameter can be given. All other must be null. + + @param certificate Given as Certificate + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                        RequestedCertificate ::= CHOICE {
    +                          Certificate Certificate,
    +                          publicKeyCertificate [0] EXPLICIT OCTET STRING,
    +                          attributeCertificate [1] EXPLICIT OCTET STRING
    +                        }
    +             
    + + @return an Asn1Object +
    + + Some other information of non-restrictive nature regarding the usage of this + certificate. + +
    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +            
    +
    + + Constructor from a given details. + + @param information The describtion of the information. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +               AdditionalInformationSyntax ::= DirectoryString (SIZE(1..2048))
    +             
    + + @return an Asn1Object +
    + + An Admissions structure. +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             

    +

    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                        Admissions ::= SEQUENCE
    +                        {
    +                          admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                          namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                          professionInfos SEQUENCE OF ProfessionInfo
    +                        }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    + Parameter professionInfos is mandatory. + + @param admissionAuthority The admission authority. + @param namingAuthority The naming authority. + @param professionInfos The profession infos. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   Admissions ::= SEQUENCE
    +                   {
    +                     admissionAuthority [0] EXPLICIT GeneralName OPTIONAL
    +                     namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL
    +                     professionInfos SEQUENCE OF ProfessionInfo
    +                   }
    +             

    +

    + + @return an Asn1Object +
    + + Attribute to indicate admissions to certain professions. +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    +

    +

    + ISIS-MTT PROFILE: The relatively complex structure of AdmissionSyntax + supports the following concepts and requirements: +

      +
    • External institutions (e.g. professional associations, chambers, unions, + administrative bodies, companies, etc.), which are responsible for granting + and verifying professional admissions, are indicated by means of the data + field admissionAuthority. An admission authority is indicated by a + GeneralName object. Here an X.501 directory name (distinguished name) can be + indicated in the field directoryName, a URL address can be indicated in the + field uniformResourceIdentifier, and an object identifier can be indicated in + the field registeredId.
    • +
    • The names of authorities which are responsible for the administration of + title registers are indicated in the data field namingAuthority. The name of + the authority can be identified by an object identifier in the field + namingAuthorityId, by means of a text string in the field + namingAuthorityText, by means of a URL address in the field + namingAuthorityUrl, or by a combination of them. For example, the text string + can contain the name of the authority, the country and the name of the title + register. The URL-option refers to a web page which contains lists with + officially registered professions (text and possibly OID) as well as + further information on these professions. Object identifiers for the + component namingAuthorityId are grouped under the OID-branch + id-isis-at-namingAuthorities and must be applied for.
    • +
    • See http://www.teletrust.de/anwend.asp?Id=30200&Sprache=E_&HomePG=0 + for an application form and http://www.teletrust.de/links.asp?id=30220,11 + for an overview of registered naming authorities.
    • +
    • By means of the data type ProfessionInfo certain professions, + specializations, disciplines, fields of activity, etc. are identified. A + profession is represented by one or more text strings, resp. profession OIDs + in the fields professionItems and professionOIDs and by a registration number + in the field registrationNumber. An indication in text form must always be + present, whereas the other indications are optional. The component + addProfessionInfo may contain additional applicationspecific information in + DER-encoded form.
    • +
    +

    + By means of different namingAuthority-OIDs or profession OIDs hierarchies of + professions, specializations, disciplines, fields of activity, etc. can be + expressed. The issuing admission authority should always be indicated (field + admissionAuthority), whenever a registration number is presented. Still, + information on admissions can be given without indicating an admission or a + naming authority by the exclusive use of the component professionItems. In + this case the certification authority is responsible for the verification of + the admission information. +

    +

    +

    + This attribute is single-valued. Still, several admissions can be captured in + the sequence structure of the component contentsOfAdmissions of + AdmissionSyntax or in the component professionInfos of Admissions. The + component admissionAuthority of AdmissionSyntax serves as default value for + the component admissionAuthority of Admissions. Within the latter component + the default value can be overwritten, in case that another authority is + responsible. The component namingAuthority of Admissions serves as a default + value for the component namingAuthority of ProfessionInfo. Within the latter + component the default value can be overwritten, in case that another naming + authority needs to be recorded. +

    + The length of the string objects is limited to 128 characters. It is + recommended to indicate a namingAuthorityURL in all issued attribute + certificates. If a namingAuthorityURL is indicated, the field professionItems + of ProfessionInfo should contain only registered titles. If the field + professionOIDs exists, it has to contain the OIDs of the professions listed + in professionItems in the same order. In general, the field professionInfos + should contain only one entry, unless the admissions that are to be listed + are logically connected (e.g. they have been issued under the same admission + number). + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.Admissions + @see Org.BouncyCastle.Asn1.IsisMtt.X509.ProfessionInfo + @see Org.BouncyCastle.Asn1.IsisMtt.X509.NamingAuthority + + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. + + @param admissionAuthority The admission authority. + @param contentsOfAdmissions The admissions. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 AdmissionSyntax ::= SEQUENCE
    +                 {
    +                   admissionAuthority GeneralName OPTIONAL,
    +                   contentsOfAdmissions SEQUENCE OF Admissions
    +                 }
    +             

    + Admissions ::= SEQUENCE + { + admissionAuthority [0] EXPLICIT GeneralName OPTIONAL + namingAuthority [1] EXPLICIT NamingAuthority OPTIONAL + professionInfos SEQUENCE OF ProfessionInfo + } +

    + NamingAuthority ::= SEQUENCE + { + namingAuthorityId OBJECT IDENTIFIER OPTIONAL, + namingAuthorityUrl IA5String OPTIONAL, + namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL + } +

    + 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 + } +

    + + @return an Asn1Object +
    + + @return Returns the admissionAuthority if present, null otherwise. + + + @return Returns the contentsOfAdmissions. + + + A declaration of majority. +

    +

    +                      DeclarationOfMajoritySyntax ::= CHOICE
    +                      {
    +                        notYoungerThan [0] IMPLICIT INTEGER,
    +                        fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                        {
    +                          fullAge BOOLEAN DEFAULT TRUE,
    +                          country PrintableString (SIZE(2))
    +                        }
    +                        dateOfBirth [2] IMPLICIT GeneralizedTime
    +                      }
    +            
    +

    + fullAgeAtCountry indicates the majority of the owner with respect to the laws + of a specific country. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                       DeclarationOfMajoritySyntax ::= CHOICE
    +                       {
    +                         notYoungerThan [0] IMPLICIT INTEGER,
    +                         fullAgeAtCountry [1] IMPLICIT SEQUENCE
    +                         {
    +                           fullAge BOOLEAN DEFAULT TRUE,
    +                           country PrintableString (SIZE(2))
    +                         }
    +                         dateOfBirth [2] IMPLICIT GeneralizedTime
    +                       }
    +             
    + + @return an Asn1Object +
    + + @return notYoungerThan if that's what we are, -1 otherwise + + + 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). +

    + 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). +

    +

    +               MonetaryLimitSyntax ::= SEQUENCE
    +               {
    +                 currency PrintableString (SIZE(3)),
    +                 amount INTEGER,
    +                 exponent INTEGER
    +               }
    +            
    +

    + currency must be the ISO code. +

    + value = amount�10*exponent + + + Constructor from a given details. +

    +

    + value = amount�10^exponent + + @param currency The currency. Must be the ISO code. + @param amount The amount + @param exponent The exponent + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                MonetaryLimitSyntax ::= SEQUENCE
    +                {
    +                  currency PrintableString (SIZE(3)),
    +                  amount INTEGER,
    +                  exponent INTEGER
    +                }
    +             
    + + @return an Asn1Object +
    + + Names of authorities which are responsible for the administration of title + registers. + +
    +                        NamingAuthority ::= SEQUENCE 
    +                        {
    +                          namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                          namingAuthorityUrl IA5String OPTIONAL,
    +                          namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                        }
    +            
    + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax + +
    + + 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. + + + Constructor from Asn1Sequence. +

    +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @param seq The ASN.1 sequence. +
    + + @return Returns the namingAuthorityID. + + + @return Returns the namingAuthorityText. + + + @return Returns the namingAuthorityUrl. + + + Constructor from given details. +

    + All parameters can be combined. + + @param namingAuthorityID ObjectIdentifier for naming authority. + @param namingAuthorityUrl URL for naming authority. + @param namingAuthorityText Textual representation of naming authority. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                         NamingAuthority ::= SEQUENCE
    +                         {
    +                           namingAuthorityID OBJECT IDENTIFIER OPTIONAL,
    +                           namingAuthorityUrl IA5String OPTIONAL,
    +                           namingAuthorityText DirectoryString(SIZE(1..128)) OPTIONAL
    +                         }
    +             
    + + @return an Asn1Object +
    + + Attribute to indicate that the certificate holder may sign in the name of a + third person. +

    + 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). +

    +

    + 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). +

    +
    +                          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 
    +                          }
    +            
    + +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type ProcurationSyntax: +

    +

    +                           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 + } +

    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @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. + + + Constructor from a given details. +

    +

    + Either generalName or certRef MUST be + null. + + @param country The country code whose laws apply. + @param typeOfSubstitution The type of procuration. + @param thirdPerson The GeneralName of the person who is represented. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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 + } +

    + + @return an Asn1Object +
    + + Professions, specializations, disciplines, fields of activity, etc. + +
    +                          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 
    +                          }
    +            
    + + @see Org.BouncyCastle.Asn1.IsisMtt.X509.AdmissionSyntax +
    + + Rechtsanw�ltin + + + Rechtsanwalt + + + Rechtsbeistand + + + Steuerberaterin + + + Steuerberater + + + Steuerbevollm�chtigte + + + Steuerbevollm�chtigter + + + Notarin + + + Notar + + + Notarvertreterin + + + Notarvertreter + + + Notariatsverwalterin + + + Notariatsverwalter + + + Wirtschaftspr�ferin + + + Wirtschaftspr�fer + + + Vereidigte Buchpr�ferin + + + Vereidigter Buchpr�fer + + + Patentanw�ltin + + + Patentanwalt + + + Constructor from Asn1Sequence. +

    +

    +

    +                           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
    +                           }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from given details. +

    + professionItems 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                           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
    +                           }
    +             
    + + @return an Asn1Object +
    + + @return Returns the addProfessionInfo. + + + @return Returns the namingAuthority. + + + @return Returns the professionItems. + + + @return Returns the professionOids. + + + @return Returns the registrationNumber. + + + Some other restriction regarding the usage of this certificate. +

    +

    +             RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +            
    +
    + + Constructor from DirectoryString. +

    + The DirectoryString is of type RestrictionSyntax: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             
    + + @param restriction A IAsn1String. +
    + + Constructor from a given details. + + @param restriction The description of the restriction. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                  RestrictionSyntax ::= DirectoryString (SIZE(1..1024))
    +             

    +

    + + @return an Asn1Object +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            cast5CBCParameters ::= Sequence {
    +                                      iv         OCTET STRING DEFAULT 0,
    +                                             -- Initialization vector
    +                                      keyLength  Integer
    +                                             -- Key length, in bits
    +                                 }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            IDEA-CBCPar ::= Sequence {
    +                                 iv    OCTET STRING OPTIONAL -- exactly 8 octets
    +                             }
    +            
    +
    + + The NetscapeCertType object. +
    +               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) }
    +            
    +
    + + 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) + + + This is designed to parse + the PublicKeyAndChallenge created by the KEYGEN tag included by + Mozilla based browsers. +
    +              PublicKeyAndChallenge ::= SEQUENCE {
    +                spki SubjectPublicKeyInfo,
    +                challenge IA5STRING
    +              }
    +            
    +              
    +
    + + Utility class for fetching curves using their NIST names as published in FIPS-PUB 186-3 + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 2.16.840.1.101.3.4.3.5 + + + 2.16.840.1.101.3.4.3.6 + + + 2.16.840.1.101.3.4.3.7 + + + 2.16.840.1.101.3.4.3.8 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + 2.16.840.1.101.3.4.3.9 + + + 2.16.840.1.101.3.4.3.10 + + + 2.16.840.1.101.3.4.3.11 + + + 2.16.840.1.101.3.4.3.12 + + + From RFC 3657 + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicOcspResponse       ::= Sequence {
    +                 tbsResponseData      ResponseData,
    +                 signatureAlgorithm   AlgorithmIdentifier,
    +                 signature            BIT STRING,
    +                 certs                [0] EXPLICIT Sequence OF Certificate OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CertID          ::=     Sequence {
    +                hashAlgorithm       AlgorithmIdentifier,
    +                issuerNameHash      OCTET STRING, -- Hash of Issuer's DN
    +                issuerKeyHash       OCTET STRING, -- Hash of Issuers public key
    +                serialNumber        CertificateSerialNumber }
    +            
    +
    + + create a CertStatus object with a tag of zero. + + + Produce an object suitable for an Asn1OutputStream. +
    +             CertStatus ::= CHOICE {
    +                             good        [0]     IMPLICIT Null,
    +                             revoked     [1]     IMPLICIT RevokedInfo,
    +                             unknown     [2]     IMPLICIT UnknownInfo }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlID ::= Sequence {
    +                crlUrl               [0]     EXPLICIT IA5String OPTIONAL,
    +                crlNum               [1]     EXPLICIT Integer OPTIONAL,
    +                crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspRequest     ::=     Sequence {
    +                tbsRequest                  TBSRequest,
    +                optionalSignature   [0]     EXPLICIT Signature OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            OcspResponse ::= Sequence {
    +                responseStatus         OcspResponseStatus,
    +                responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }
    +            
    +
    + + The OcspResponseStatus enumeration. +
    +            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
    +            }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Request         ::=     Sequence {
    +                reqCert                     CertID,
    +                singleRequestExtensions     [0] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponderID ::= CHOICE {
    +                 byName          [1] Name,
    +                 byKey           [2] KeyHash }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseBytes ::=       Sequence {
    +                responseType   OBJECT IDENTIFIER,
    +                response       OCTET STRING }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ResponseData ::= Sequence {
    +                version              [0] EXPLICIT Version DEFAULT v1,
    +                responderID              ResponderID,
    +                producedAt               GeneralizedTime,
    +                responses                Sequence OF SingleResponse,
    +                responseExtensions   [1] EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            RevokedInfo ::= Sequence {
    +                 revocationTime              GeneralizedTime,
    +                 revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ServiceLocator ::= Sequence {
    +                issuer    Name,
    +                locator   AuthorityInfoAccessSyntax OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            Signature       ::=     Sequence {
    +                signatureAlgorithm      AlgorithmIdentifier,
    +                signature               BIT STRING,
    +                certs               [0] EXPLICIT Sequence OF Certificate OPTIONAL}
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             SingleResponse ::= Sequence {
    +                     certID                       CertID,
    +                     certStatus                   CertStatus,
    +                     thisUpdate                   GeneralizedTime,
    +                     nextUpdate         [0]       EXPLICIT GeneralizedTime OPTIONAL,
    +                     singleExtensions   [1]       EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            TBSRequest      ::=     Sequence {
    +                version             [0]     EXPLICIT Version DEFAULT v1,
    +                requestorName       [1]     EXPLICIT GeneralName OPTIONAL,
    +                requestList                 Sequence OF Request,
    +                requestExtensions   [2]     EXPLICIT Extensions OPTIONAL }
    +            
    +
    + + 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. + + + return an Attribute object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + Pkcs10 Certfication request object. +
    +            CertificationRequest ::= Sequence {
    +              certificationRequestInfo  CertificationRequestInfo,
    +              signatureAlgorithm        AlgorithmIdentifier{{ SignatureAlgorithms }},
    +              signature                 BIT STRING
    +            }
    +            
    +
    + + Pkcs10 CertificationRequestInfo object. +
    +              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.&id({IOSet}),
    +                values  Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type})
    +              }
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +            ContentInfo ::= Sequence {
    +                     contentType ContentType,
    +                     content
    +                     [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
    +            
    +
    + + The EncryptedData object. +
    +                  EncryptedData ::= Sequence {
    +                       version Version,
    +                       encryptedContentInfo EncryptedContentInfo
    +                  }
    +            
    +            
    +                  EncryptedContentInfo ::= Sequence {
    +                      contentType ContentType,
    +                      contentEncryptionAlgorithm  ContentEncryptionAlgorithmIdentifier,
    +                      encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL
    +                }
    +            
    +                EncryptedContent ::= OCTET STRING
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             EncryptedPrivateKeyInfo ::= Sequence {
    +                  encryptionAlgorithm AlgorithmIdentifier {{KeyEncryptionAlgorithms}},
    +                  encryptedData EncryptedData
    +             }
    +            
    +             EncryptedData ::= OCTET STRING
    +            
    +             KeyEncryptionAlgorithms ALGORITHM-IDENTIFIER ::= {
    +                      ... -- For local profiles
    +             }
    +             
    +
    + +
    +            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.
    +            
    + @return the basic DERObject construction. +
    + + the infamous Pfx from Pkcs12 + + + PKCS#1: 1.2.840.113549.1.1.15 + + + PKCS#1: 1.2.840.113549.1.1.16 + + +
    +             id-alg-AEADChaCha20Poly1305 OBJECT IDENTIFIER ::=
    +             { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    +                pkcs9(9) smime(16) alg(3) 18 }
    +            
    +             AEADChaCha20Poly1305Nonce ::= OCTET STRING (SIZE(12))
    +             
    +
    + + PKCS#9: 1.2.840.113549.1.9.16.2.37 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.38 - RFC 4108 + + + PKCS#9: 1.2.840.113549.1.9.16.2.54 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.43 RFC7030 + + + PKCS#9: 1.2.840.113549.1.9.16.2.40 RFC7030 + + + RFC 5958 + +
    +              [IMPLICIT TAGS]
    +            
    +              OneAsymmetricKey ::= SEQUENCE {
    +                  version                   Version,
    +                  privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    +                  privateKey                PrivateKey,
    +                  attributes            [0] Attributes OPTIONAL,
    +                  ...,
    +                  [[2: publicKey        [1] PublicKey OPTIONAL ]],
    +                  ...
    +              }
    +            
    +              PrivateKeyInfo ::= OneAsymmetricKey
    +            
    +              Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)
    +            
    +              PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
    +                                                 { PUBLIC-KEY,
    +                                                   { PrivateKeyAlgorithms } }
    +            
    +              PrivateKey ::= OCTET STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              PublicKey ::= BIT STRING
    +                                 -- Content varies based on type of key.  The
    +                                 -- algorithm identifier dictates the format of
    +                                 -- the key.
    +            
    +              Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }
    +              
    +
    + + Return true if a public key is present, false otherwise. + + + For when the public key is an ASN.1 encoding. + + + Return the public key as a raw bit string. + + + The default version + + +
    +              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 --
    +              }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + This outputs the key in Pkcs1v2 format. +
    +                  RsaPrivateKey ::= Sequence {
    +                                      version Version,
    +                                      modulus Integer, -- n
    +                                      publicExponent Integer, -- e
    +                                      privateExponent Integer, -- d
    +                                      prime1 Integer, -- p
    +                                      prime2 Integer, -- q
    +                                      exponent1 Integer, -- d mod (p-1)
    +                                      exponent2 Integer, -- d mod (q-1)
    +                                      coefficient Integer -- (inverse of q) mod p
    +                                  }
    +            
    +                  Version ::= Integer
    +             
    +

    This routine is written to output Pkcs1 version 0, private keys.

    +
    + + The default version + + +
    +             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) }
    +             
    + @return the asn1 primitive representing the parameters. +
    + + a Pkcs#7 signed data object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             SignedData ::= Sequence {
    +                 version Version,
    +                 digestAlgorithms DigestAlgorithmIdentifiers,
    +                 contentInfo ContentInfo,
    +                 certificates
    +                     [0] IMPLICIT ExtendedCertificatesAndCertificates
    +                              OPTIONAL,
    +                 crls
    +                     [1] IMPLICIT CertificateRevocationLists OPTIONAL,
    +                 signerInfos SignerInfos }
    +            
    +
    + + a Pkcs#7 signer info object. + + + Produce an object suitable for an Asn1OutputStream. +
    +              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
    +             
    +
    + + the elliptic curve private key object from SEC 1 + + + ECPrivateKey ::= SEQUENCE { + version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + privateKey OCTET STRING, + parameters [0] Parameters OPTIONAL, + publicKey [1] BIT STRING OPTIONAL } + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + EllipticCurve OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) certicom(132) curve(0) + } + + + Handler class for dealing with S/MIME Capabilities + + + general preferences + + + encryption algorithms preferences + + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + returns an ArrayList with 0 or more objects of all the capabilities + matching the passed in capability Oid. If the Oid passed is null the + entire set is returned. + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapabilities ::= Sequence OF SMIMECapability
    +            
    +
    + + general preferences + + + encryption algorithms preferences + + + Produce an object suitable for an Asn1OutputStream. +
    +            SMIMECapability ::= Sequence {
    +                capabilityID OBJECT IDENTIFIER,
    +                parameters ANY DEFINED BY capabilityID OPTIONAL
    +            }
    +            
    +
    + + Handler for creating a vector S/MIME Capabilities + + + The SmimeEncryptionKeyPreference object. +
    +            SmimeEncryptionKeyPreference ::= CHOICE {
    +                issuerAndSerialNumber   [0] IssuerAndSerialNumber,
    +                receipentKeyId          [1] RecipientKeyIdentifier,
    +                subjectAltKeyIdentifier [2] SubjectKeyIdentifier
    +            }
    +            
    +
    + + @param sKeyId the subjectKeyIdentifier value (normally the X.509 one) + + + elliptic curves defined in "ECC Brainpool Standard Curves and Curve Generation" + http://www.ecc-brainpool.org/download/draft_pkix_additional_ecc_dp.txt + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + +
    +            Accuracy ::= SEQUENCE {
    +                        seconds        INTEGER              OPTIONAL,
    +                        millis     [0] INTEGER  (1..999)    OPTIONAL,
    +                        micros     [1] INTEGER  (1..999)    OPTIONAL
    +                        }
    +            
    +
    + +
    +               MessageImprint ::= SEQUENCE  {
    +                  hashAlgorithm                AlgorithmIdentifier,
    +                  hashedMessage                OCTET STRING  }
    +            
    +
    + +
    +            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
    +            }
    +            
    +
    + +
    +            TimeStampResp ::= SEQUENCE  {
    +              status                  PkiStatusInfo,
    +              timeStampToken          TimeStampToken     OPTIONAL  }
    +            
    +
    + +
    +            
    +                 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  }
    +            
    +             
    +
    + + + Base OID: 1.2.804.2.1.1.1 + + + DSTU4145 Little Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1 + + + DSTU4145 Big Endian presentation. OID: 1.2.804.2.1.1.1.1.3.1.1.1 + + + DSTU7564 256-bit digest presentation. + + + DSTU7564 384-bit digest presentation. + + + DSTU7564 512-bit digest presentation. + + + DSTU7564 256-bit mac presentation. + + + DSTU7564 384-bit mac presentation. + + + DSTU7564 512-bit mac presentation. + + + DSTU7624 in ECB mode with 128 bit block/key presentation + + + DSTU7624 in ECB mode with 256 bit block/key presentation + + + DSTU7624 in ECB mode with 512 bit block/key presentation + + + DSTU7624 in CTR mode with 128 bit block/key presentation + + + DSTU7624 in CTR mode with 256 bit block/key presentation + + + DSTU7624 in CTR mode with 512 bit block/key presentation + + + DSTU7624 in CFB mode with 128 bit block/key presentation + + + DSTU7624 in CFB mode with 256 bit block/key presentation + + + DSTU7624 in CFB mode with 512 bit block/key presentation + + + DSTU7624 in MAC mode with 128 bit block/key presentation + + + DSTU7624 in MAC mode with 256 bit block/key presentation + + + DSTU7624 in MAC mode with 512 bit block/key presentation + + + DSTU7624 in CBC mode with 128 bit block/key presentation + + + DSTU7624 in CBC mode with 256 bit block/key presentation + + + DSTU7624 in CBC mode with 512 bit block/key presentation + + + DSTU7624 in OFB mode with 128 bit block/key presentation + + + DSTU7624 in OFB mode with 256 bit block/key presentation + + + DSTU7624 in OFB mode with 512 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 128 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 256 bit block/key presentation + + + DSTU7624 in GMAC (GCM witout encryption) mode with 512 bit block/key presentation + + + DSTU7624 in CCM mode with 128 bit block/key presentation + + + DSTU7624 in CCM mode with 256 bit block/key presentation + + + DSTU7624 in CCM mode with 512 bit block/key presentation + + + DSTU7624 in XTS mode with 128 bit block/key presentation + + + DSTU7624 in XTS mode with 256 bit block/key presentation + + + DSTU7624 in XTS mode with 512 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 128 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 256 bit block/key presentation + + + DSTU7624 in key wrap (KW) mode with 512 bit block/key presentation + + + dump a Der object as a formatted string with indentation + + @param obj the Asn1Object to be dumped out. + + + dump out a DER object as a formatted string, in non-verbose mode + + @param obj the Asn1Encodable to be dumped out. + @return the resulting string. + + + Dump out the object as a string + + @param obj the Asn1Encodable to be dumped out. + @param verbose if true, dump out the contents of octet and bit strings. + @return the resulting string. + + + Holding class for the AttributeTypeAndValue structures that make up an RDN. + + +
    +            AttributeTypeAndValue ::= SEQUENCE {
    +                      type         OBJECT IDENTIFIER,
    +                      value        ANY DEFINED BY type }
    +            
    + @return a basic ASN.1 object representation. +
    + +
    +             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))  }
    +            
    +
    + + Holding class for a single Relative Distinguished Name (RDN). + + + Create a single valued RDN. + + @param oid RDN type. + @param value RDN value. + + + Create a multi-valued RDN. + + @param aAndVs attribute type/value pairs making up the RDN + + + Return the number of AttributeTypeAndValue objects in this RDN, + + @return size of RDN, greater than 1 if multi-valued. + + + *
    +                     * RelativeDistinguishedName ::=
    +                     *                     SET OF AttributeTypeAndValue
    +            
    +                     * AttributeTypeAndValue ::= SEQUENCE {
    +                     *        type     AttributeType,
    +                     *        value    AttributeValue }
    +                     * 
    + * @return this object as its ASN1Primitive type +
    + + The AccessDescription object. +
    +            AccessDescription  ::=  SEQUENCE {
    +                  accessMethod          OBJECT IDENTIFIER,
    +                  accessLocation        GeneralName  }
    +            
    +
    + + create an AccessDescription with the oid and location provided. + + + + @return the access method. + + + + @return the access location + + + + Return the OID in the Algorithm entry of this identifier. + + + + + Return the parameters structure in the Parameters entry of this identifier. + + + + Produce an object suitable for an Asn1OutputStream. +
    +                 AlgorithmIdentifier ::= Sequence {
    +                                       algorithm OBJECT IDENTIFIER,
    +                                       parameters ANY DEFINED BY algorithm OPTIONAL }
    +            
    +
    + + + Don't use this one if you are trying to be RFC 3281 compliant. + Use it for v1 attribute certificates only. + + Our GeneralNames structure + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertIssuer ::= CHOICE {
    +                  v1Form   GeneralNames,  -- MUST NOT be used in this
    +                                          -- profile
    +                  v2Form   [0] V2Form     -- v2 only
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             AttCertValidityPeriod  ::= Sequence {
    +                  notBeforeTime  GeneralizedTime,
    +                  notAfterTime   GeneralizedTime
    +             }
    +            
    +
    + + return an Attr object from the given object. + + @param o the object we want converted. + @exception ArgumentException if the object cannot be converted. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Attr ::= Sequence {
    +                attrType OBJECT IDENTIFIER,
    +                attrValues Set OF AttributeValue
    +            }
    +            
    +
    + + @param obj + @return + + + Produce an object suitable for an Asn1OutputStream. +
    +             AttributeCertificate ::= Sequence {
    +                  acinfo               AttributeCertificateInfo,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING
    +             }
    +            
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +              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) }
    +             
    +
    + + The AuthorityInformationAccess object. +
    +             id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
    +            
    +             AuthorityInfoAccessSyntax  ::=
    +                  Sequence SIZE (1..MAX) OF AccessDescription
    +             AccessDescription  ::=  Sequence {
    +                   accessMethod          OBJECT IDENTIFIER,
    +                   accessLocation        GeneralName  }
    +            
    +             id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
    +             id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
    +             id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 }
    +             
    +
    + + create an AuthorityInformationAccess with the oid and location provided. + + + The AuthorityKeyIdentifier object. +
    +             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
    +             
    + +
    + + * + * Calulates the keyidentifier using a SHA1 hash over the BIT STRING + * from SubjectPublicKeyInfo as defined in RFC2459. + * + * Example of making a AuthorityKeyIdentifier: + *
    +            	     *   SubjectPublicKeyInfo apki = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(
    +            		 *       publicKey.getEncoded()).readObject());
    +                     *   AuthorityKeyIdentifier aki = new AuthorityKeyIdentifier(apki);
    +                     * 
    + * + * +
    + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided as well. + + + create an AuthorityKeyIdentifier with the GeneralNames tag and + the serial number provided. + + + create an AuthorityKeyIdentifier with a precomputed key identifier + + + create an AuthorityKeyIdentifier with a precomupted key identifier + and the GeneralNames tag and the serial number provided as well. + + + Produce an object suitable for an Asn1OutputStream. + + + create a cA=true object for the given path length constraint. + + @param pathLenConstraint + + + Produce an object suitable for an Asn1OutputStream. +
    +            BasicConstraints := Sequence {
    +               cA                  Boolean DEFAULT FALSE,
    +               pathLenConstraint   Integer (0..MAX) OPTIONAL
    +            }
    +            
    +
    + + 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. + +
    +             CertificateList  ::=  Sequence  {
    +                  tbsCertList          TbsCertList,
    +                  signatureAlgorithm   AlgorithmIdentifier,
    +                  signatureValue       BIT STRING  }
    +             
    +
    + + This class helps to support crossCerfificatePairs in a LDAP directory + according RFC 2587 + +
    +                 crossCertificatePairATTRIBUTE::={
    +                   WITH SYNTAX   CertificatePair
    +                   EQUALITY MATCHING RULE certificatePairExactMatch
    +                   ID joint-iso-ccitt(2) ds(5) attributeType(4) crossCertificatePair(40)}
    +             
    + +
    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.
    + +
    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type CertificatePair: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param forward Certificates issued to this CA. + @param reverse Certificates issued by this CA to other CAs. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   CertificatePair ::= SEQUENCE {
    +                     forward		[0]	Certificate OPTIONAL,
    +                     reverse		[1]	Certificate OPTIONAL,
    +                     -- at least one of the pair shall be present -- }
    +             
    + + @return a DERObject +
    + + @return Returns the forward. + + + @return Returns the reverse. + + + Construct a CertificatePolicies object containing one PolicyInformation. + + @param name the name to be contained. + + + Produce an object suitable for an ASN1OutputStream. +
    +            CertificatePolicies ::= SEQUENCE SIZE {1..MAX} OF PolicyInformation
    +            
    +
    + + CertPolicyId, used in the CertificatePolicies and PolicyMappings + X509V3 Extensions. + +
    +                 CertPolicyId ::= OBJECT IDENTIFIER
    +             
    +
    + + Return the distribution points making up the sequence. + + @return DistributionPoint[] + + + Produce an object suitable for an Asn1OutputStream. +
    +            CrlDistPoint ::= Sequence SIZE {1..MAX} OF DistributionPoint
    +            
    +
    + + The CRLNumber object. +
    +            CRLNumber::= Integer(0..MAX)
    +            
    +
    + + The CRLReason enumeration. +
    +            CRLReason ::= Enumerated {
    +             unspecified             (0),
    +             keyCompromise           (1),
    +             cACompromise            (2),
    +             affiliationChanged      (3),
    +             superseded              (4),
    +             cessationOfOperation    (5),
    +             certificateHold         (6),
    +             removeFromCRL           (8),
    +             privilegeWithdrawn      (9),
    +             aACompromise           (10)
    +            }
    +            
    +
    + + The DigestInfo object. +
    +            DigestInfo::=Sequence{
    +                     digestAlgorithm  AlgorithmIdentifier,
    +                     digest OCTET STRING }
    +            
    +
    + + DisplayText class, used in + CertificatePolicies X509 V3 extensions (in policy qualifiers). + +

    It stores a string in a chosen encoding. +

    +             DisplayText ::= CHOICE {
    +                  ia5String        IA5String      (SIZE (1..200)),
    +                  visibleString    VisibleString  (SIZE (1..200)),
    +                  bmpString        BMPString      (SIZE (1..200)),
    +                  utf8String       UTF8String     (SIZE (1..200)) }
    +             

    + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Constant corresponding to ia5String encoding. + + + + Constant corresponding to bmpString encoding. + + + + Constant corresponding to utf8String encoding. + + + + Constant corresponding to visibleString encoding. + + + + Describe constant DisplayTextMaximumSize here. + + + + Creates a new DisplayText instance. + + @param type the desired encoding type for the text. + @param text the text to store. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. + + @param text the text to encapsulate. Strings longer than 200 + characters are truncated. + + + Creates a new DisplayText instance. +

    Useful when reading back a DisplayText class + from it's Asn1Encodable form.

    + + @param contents an Asn1Encodable instance. +
    + + Returns the stored string object. + + @return the stored text as a string. + + + The DistributionPoint object. +
    +            DistributionPoint ::= Sequence {
    +                 distributionPoint [0] DistributionPointName OPTIONAL,
    +                 reasons           [1] ReasonFlags OPTIONAL,
    +                 cRLIssuer         [2] GeneralNames OPTIONAL
    +            }
    +            
    +
    + + The DistributionPointName object. +
    +            DistributionPointName ::= CHOICE {
    +                fullName                 [0] GeneralNames,
    +                nameRelativeToCRLIssuer  [1] RDN
    +            }
    +            
    +
    + + The extendedKeyUsage object. +
    +                 extendedKeyUsage ::= Sequence SIZE (1..MAX) OF KeyPurposeId
    +            
    +
    + + Returns all extended key usages. + The returned ArrayList contains DerObjectIdentifier instances. + @return An ArrayList with all key purposes. + + + The GeneralName object. +
    +             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 }
    +             
    +
    + + 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]. + + + Create a GeneralName for the given tag from the passed in string. +

    + This constructor can handle: +

      +
    • rfc822Name
    • +
    • iPAddress
    • +
    • directoryName
    • +
    • dNSName
    • +
    • uniformResourceIdentifier
    • +
    • registeredID
    • +
    + For x400Address, otherName and ediPartyName there is no common string + format defined. +

    + 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. +

    + + @param tag tag number + @param name string representation of name + @throws ArgumentException if the string encoding is not correct or + not supported. +
    + + Construct a GeneralNames object containing one GeneralName. + The name to be contained. + + + Produce an object suitable for an Asn1OutputStream. +
    +            GeneralNames ::= Sequence SIZE {1..MAX} OF GeneralName
    +            
    +
    + + Class for containing a restriction object subtrees in NameConstraints. See + RFC 3280. + +
    +            
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.NameConstraints + +
    + + 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. +

    + If minimum is null, zero is assumed, if + maximum is null, maximum is absent.

    + + @param baseName + A restriction. + @param minimum + Minimum + + @param maximum + Maximum +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                   GeneralSubtree ::= SEQUENCE
    +                   {
    +                     baseName                    GeneralName,
    +                     minimum         [0]     BaseDistance DEFAULT 0,
    +                     maximum         [1]     BaseDistance OPTIONAL
    +                   }
    +             
    + + @return a DERObject +
    + + The Holder object. +

    + For an v2 attribute certificate this is: + +

    +                       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
    +                       }
    +            
    +

    +

    + For an v1 attribute certificate this is: + +

    +                    subject CHOICE {
    +                     baseCertificateID [0] IssuerSerial,
    +                     -- associated with a Public Key Certificate
    +                     subjectName [1] GeneralNames },
    +                     -- associated with a name
    +            
    +

    +
    + + Constructor for a holder for an v1 attribute certificate. + + @param tagObj The ASN.1 tagged holder object. + + + Constructor for a holder for an v2 attribute certificate. * + + @param seq The ASN.1 sequence. + + + Constructs a holder from a IssuerSerial. + @param baseCertificateID The IssuerSerial. + @param version The version of the attribute certificate. + + + Returns 1 for v2 attribute certificates or 0 for v1 attribute + certificates. + @return The version of the attribute certificate. + + + 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. + + + 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. + + + Constructs a holder from an object digest info. + + @param objectDigestInfo The object digest info object. + + + Returns the entityName for an v2 attribute certificate or the subjectName + for an v1 attribute certificate. + + @return The entityname or subjectname. + + + The Holder object. +
    +             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
    +             }
    +            
    +
    + + Implementation of IetfAttrSyntax as specified by RFC3281. + + + + + + +
    +            
    +              IetfAttrSyntax ::= Sequence {
    +                policyAuthority [0] GeneralNames OPTIONAL,
    +                values Sequence OF CHOICE {
    +                  octets OCTET STRING,
    +                  oid OBJECT IDENTIFIER,
    +                  string UTF8String
    +                }
    +              }
    +            
    +             
    +
    + + Produce an object suitable for an Asn1OutputStream. +
    +             IssuerSerial  ::=  Sequence {
    +                  issuer         GeneralNames,
    +                  serial         CertificateSerialNumber,
    +                  issuerUid      UniqueIdentifier OPTIONAL
    +             }
    +            
    +
    + +
    +            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 }
    +            
    +
    + + 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 true then the CRL contains revocation + information about certificates ssued by other CAs. + @param onlyContainsAttributeCerts Covers revocation information for attribute certificates. + + + Constructor from Asn1Sequence + + + @return Returns the distributionPoint. + + + @return Returns the onlySomeReasons. + + + The KeyPurposeID object. +
    +                KeyPurposeID ::= OBJECT IDENTIFIER
    +            
    +
    + + The KeyUsage object. +
    +                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) }
    +             
    +
    + + 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) + + + Constructor from a given details. + +

    permitted and excluded are Vectors of GeneralSubtree objects.

    + + @param permitted Permitted subtrees + @param excluded Excluded subtrees +
    + + NoticeReference class, used in + CertificatePolicies X509 V3 extensions + (in policy qualifiers). + +
    +              NoticeReference ::= Sequence {
    +                  organization     DisplayText,
    +                  noticeNumbers    Sequence OF Integer }
    +            
    +             
    + + @see PolicyQualifierInfo + @see PolicyInformation +
    + + Creates a new NoticeReference instance. + + @param organization a String value + @param numbers a Vector value + + + Creates a new NoticeReference instance. + + @param organization a String value + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. + + @param organization displayText + @param noticeNumbers an ASN1EncodableVector value + + + Creates a new NoticeReference instance. +

    Useful for reconstructing a NoticeReference + instance from its encodable/encoded form.

    + + @param as an Asn1Sequence value obtained from either + calling @{link ToAsn1Object()} for a NoticeReference + instance or from parsing it from a Der-encoded stream. +
    + + Describe ToAsn1Object method here. + + @return a Asn1Object value + + + ObjectDigestInfo ASN.1 structure used in v2 attribute certificates. + +
    +             
    +               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
    +               }
    +              
    +            
    + +
    + + The public key is hashed. + + + The public key certificate is hashed. + + + An other object is hashed. + + + Constructor from given details. +

    + If digestedObjectType is not {@link #publicKeyCert} or + {@link #publicKey} otherObjectTypeID must be given, + otherwise it is ignored.

    + + @param digestedObjectType The digest object type. + @param otherObjectTypeID The object type ID for + otherObjectDigest. + @param digestAlgorithm The algorithm identifier for the hash. + @param objectDigest The hash value. +
    + + Produce an object suitable for an Asn1OutputStream. + +
    +             
    +               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
    +               }
    +              
    +            
    +
    + + PolicyMappings V3 extension, described in RFC3280. +
    +                PolicyMappings ::= Sequence SIZE (1..MAX) OF Sequence {
    +                  issuerDomainPolicy      CertPolicyId,
    +                  subjectDomainPolicy     CertPolicyId }
    +             
    + + @see RFC 3280, section 4.2.1.6 +
    + + Creates a new PolicyMappings instance. + + @param seq an Asn1Sequence constructed as specified + in RFC 3280 + + + Creates a new PolicyMappings instance. + + @param mappings a HashMap value that maps + string oids + to other string oids. + + + PolicyQualifierId, used in the CertificatePolicies + X509V3 extension. + +
    +                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 )
    +             
    +
    + + Policy qualifiers, used in the X509V3 CertificatePolicies + extension. + +
    +               PolicyQualifierInfo ::= Sequence {
    +                   policyQualifierId  PolicyQualifierId,
    +                   qualifier          ANY DEFINED BY policyQualifierId }
    +             
    +
    + + Creates a new PolicyQualifierInfo instance. + + @param policyQualifierId a PolicyQualifierId value + @param qualifier the qualifier, defined by the above field. + + + Creates a new PolicyQualifierInfo containing a + cPSuri qualifier. + + @param cps the CPS (certification practice statement) uri as a + string. + + + Creates a new PolicyQualifierInfo instance. + + @param as PolicyQualifierInfo X509 structure + encoded as an Asn1Sequence. + + + Returns a Der-encodable representation of this instance. + + @return a Asn1Object value + + + +
    +            PrivateKeyUsagePeriod ::= SEQUENCE
    +            {
    +            notBefore       [0]     GeneralizedTime OPTIONAL,
    +            notAfter        [1]     GeneralizedTime OPTIONAL }
    +            
    +
    +
    + + The BiometricData object. +
    +            BiometricData  ::=  SEQUENCE {
    +                  typeOfBiometricData  TypeOfBiometricData,
    +                  hashAlgorithm        AlgorithmIdentifier,
    +                  biometricDataHash    OCTET STRING,
    +                  sourceDataUri        IA5String OPTIONAL  }
    +            
    +
    + + The Iso4217CurrencyCode object. +
    +            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
    +            
    +
    + + The MonetaryValue object. +
    +            MonetaryValue  ::=  SEQUENCE {
    +                  currency              Iso4217CurrencyCode,
    +                  amount               INTEGER,
    +                  exponent             INTEGER }
    +            -- value = amount * 10^exponent
    +            
    +
    + + The QCStatement object. +
    +            QCStatement ::= SEQUENCE {
    +              statementId        OBJECT IDENTIFIER,
    +              statementInfo      ANY DEFINED BY statementId OPTIONAL}
    +            
    +
    + + The SemanticsInformation object. +
    +                   SemanticsInformation ::= SEQUENCE {
    +                     semanticsIdentifier        OBJECT IDENTIFIER   OPTIONAL,
    +                     nameRegistrationAuthorities NameRegistrationAuthorities
    +                                                                     OPTIONAL }
    +                     (WITH COMPONENTS {..., semanticsIdentifier PRESENT}|
    +                      WITH COMPONENTS {..., nameRegistrationAuthorities PRESENT})
    +            
    +                 NameRegistrationAuthorities ::=  SEQUENCE SIZE (1..MAX) OF
    +                     GeneralName
    +             
    +
    + + The TypeOfBiometricData object. +
    +             TypeOfBiometricData ::= CHOICE {
    +               predefinedBiometricType   PredefinedBiometricType,
    +               biometricDataOid          OBJECT IDENTIFIER }
    +            
    +             PredefinedBiometricType ::= INTEGER {
    +               picture(0),handwritten-signature(1)}
    +               (picture|handwritten-signature)
    +             
    +
    + + The ReasonFlags object. +
    +            ReasonFlags ::= BIT STRING {
    +               unused(0),
    +               keyCompromise(1),
    +               cACompromise(2),
    +               affiliationChanged(3),
    +               superseded(4),
    +               cessationOfOperation(5),
    +               certficateHold(6)
    +            }
    +            
    +
    + + @param reasons - the bitwise OR of the Key Reason flags giving the + allowed uses for the key. + + + Implementation of the RoleSyntax object as specified by the RFC3281. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + RoleSyntax factory method. + @param obj the object used to construct an instance of + RoleSyntax. It must be an instance of RoleSyntax + or Asn1Sequence. + @return the instance of RoleSyntax built from the + supplied object. + @throws java.lang.ArgumentException if the object passed + to the factory is not an instance of RoleSyntax or + Asn1Sequence. + + + Constructor. + @param roleAuthority the role authority of this RoleSyntax. + @param roleName the role name of this RoleSyntax. + + + Constructor. Invoking this constructor is the same as invoking + new RoleSyntax(null, roleName). + @param roleName the role name of this RoleSyntax. + + + Utility constructor. Takes a string argument representing + the role name, builds a GeneralName to hold the role name + and calls the constructor that takes a GeneralName. + @param roleName + + + Constructor that builds an instance of RoleSyntax by + extracting the encoded elements from the Asn1Sequence + object supplied. + @param seq an instance of Asn1Sequence that holds + the encoded elements used to build this RoleSyntax. + + + Gets the role authority of this RoleSyntax. + @return an instance of GeneralNames holding the + role authority of this RoleSyntax. + + + Gets the role name of this RoleSyntax. + @return an instance of GeneralName holding the + role name of this RoleSyntax. + + + Gets the role name as a java.lang.string object. + @return the role name of this RoleSyntax represented as a + string object. + + + Gets the role authority as a string[] object. + @return the role authority of this RoleSyntax represented as a + string[] array. + + + Implementation of the method ToAsn1Object as + required by the superclass ASN1Encodable. + +
    +             RoleSyntax ::= SEQUENCE {
    +                             roleAuthority  [0] GeneralNames OPTIONAL,
    +                             roleName       [1] GeneralName
    +                       }
    +             
    +
    + + This outputs the key in Pkcs1v2 format. +
    +                 RSAPublicKey ::= Sequence {
    +                                     modulus Integer, -- n
    +                                     publicExponent Integer, -- e
    +                                 }
    +            
    +
    + + Structure for a name or pseudonym. + +
    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString 
    +                    },
    +                	   pseudonym DirectoryString 
    +                  }
    +            
    + + @see org.bouncycastle.asn1.x509.sigi.PersonalData + +
    + + Constructor from DERString. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                  NameOrPseudonym ::= CHOICE {
    +                	   surAndGivenName SEQUENCE {
    +                	     surName DirectoryString,
    +                	     givenName SEQUENCE OF DirectoryString
    +                    },
    +                	   pseudonym DirectoryString
    +                  }
    +            
    + @param pseudonym pseudonym value to use. +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + Constructor from a given details. + + @param pseudonym The pseudonym. + + + Constructor from a given details. + + @param surname The surname. + @param givenName A sequence of directory strings making up the givenName + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                   NameOrPseudonym ::= CHOICE {
    +                 	   surAndGivenName SEQUENCE {
    +                 	     surName DirectoryString,
    +                 	     givenName SEQUENCE OF DirectoryString
    +                     },
    +                 	   pseudonym DirectoryString
    +                   }
    +             
    + + @return an Asn1Object +
    + + Contains personal data for the otherName field in the subjectAltNames + extension. +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @see org.bouncycastle.asn1.x509.sigi.NameOrPseudonym + @see org.bouncycastle.asn1.x509.sigi.SigIObjectIdentifiers +
    + + Constructor from Asn1Sequence. +

    + The sequence is of type NameOrPseudonym: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @param seq The ASN.1 sequence. +
    + + 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. + + + Produce an object suitable for an Asn1OutputStream. +

    + Returns: +

    +

    +                 PersonalData ::= SEQUENCE {
    +                   nameOrPseudonym NameOrPseudonym,
    +                   nameDistinguisher [0] INTEGER OPTIONAL,
    +                   dateOfBirth [1] GeneralizedTime OPTIONAL,
    +                   placeOfBirth [2] DirectoryString OPTIONAL,
    +                   gender [3] PrintableString OPTIONAL,
    +                   postalAddress [4] DirectoryString OPTIONAL
    +                   }
    +             
    + + @return an Asn1Object +
    + + Object Identifiers of SigI specifciation (German Signature Law + Interoperability specification). + + + Key purpose IDs for German SigI (Signature Interoperability + Specification) + + + Certificate policy IDs for German SigI (Signature Interoperability + Specification) + + + Other Name IDs for German SigI (Signature Interoperability Specification) + + + To be used for for the generation of directory service certificates. + + + ID for PersonalData + + + Certificate is conform to german signature law. + + + This extension may contain further X.500 attributes of the subject. See also + RFC 3039. + +
    +                 SubjectDirectoryAttributes ::= Attributes
    +                 Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                 Attribute ::= SEQUENCE
    +                 {
    +                   type AttributeType
    +                   values SET OF AttributeValue
    +                 }
    +            
    +                 AttributeType ::= OBJECT IDENTIFIER
    +                 AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @see org.bouncycastle.asn1.x509.X509Name for AttributeType ObjectIdentifiers. +
    + + Constructor from Asn1Sequence. + + The sequence is of type SubjectDirectoryAttributes: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @param seq + The ASN.1 sequence. +
    + + Constructor from an ArrayList of attributes. + + The ArrayList consists of attributes of type {@link Attribute Attribute} + + @param attributes The attributes. + + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                  SubjectDirectoryAttributes ::= Attributes
    +                  Attributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
    +                  Attribute ::= SEQUENCE
    +                  {
    +                    type AttributeType
    +                    values SET OF AttributeValue
    +                  }
    +            
    +                  AttributeType ::= OBJECT IDENTIFIER
    +                  AttributeValue ::= ANY DEFINED BY AttributeType
    +             
    + + @return a DERObject +
    + + @return Returns the attributes. + + + The SubjectKeyIdentifier object. +
    +            SubjectKeyIdentifier::= OCTET STRING
    +            
    +
    + + Calculates the keyIdentifier using a SHA1 hash over the BIT STRING + from SubjectPublicKeyInfo as defined in RFC3280. + + @param spki the subject public key info. + + + Return a RFC 3280 type 1 key identifier. As in: +
    +            (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).
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + Return a RFC 3280 type 2 key identifier. As in: +
    +            (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.
    +            
    + @param keyInfo the key info object containing the subjectPublicKey field. + @return the key identifier. +
    + + The object that contains the public key stored in a certficate. +

    + The GetEncoded() method in the public keys in the JCE produces a DER + encoded one of these.

    +
    + + 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. + + + 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. + + + for when the public key is raw bits... + + + Produce an object suitable for an Asn1OutputStream. +
    +            SubjectPublicKeyInfo ::= Sequence {
    +                                     algorithm AlgorithmIdentifier,
    +                                     publicKey BIT STRING }
    +            
    +
    + + Target structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + +

    + The targetCert field is currently not supported and must not be used + according to RFC 3281.

    +
    + + Creates an instance of a Target from the given object. +

    + obj can be a Target or a {@link Asn1TaggedObject}

    + + @param obj The object. + @return A Target instance. + @throws ArgumentException if the given object cannot be + interpreted as Target. +
    + + Constructor from Asn1TaggedObject. + + @param tagObj The tagged object. + @throws ArgumentException if the encoding is wrong. + + + Constructor from given details. +

    + Exactly one of the parameters must be not null.

    + + @param type the choice type to apply to the name. + @param name the general name. + @throws ArgumentException if type is invalid. +
    + + @return Returns the targetGroup. + + + @return Returns the targetName. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                Target  ::= CHOICE {
    +                  targetName          [0] GeneralName,
    +                  targetGroup         [1] GeneralName,
    +                  targetCert          [2] TargetCert
    +                }
    +            
    + + @return an Asn1Object +
    + + Target information extension for attributes certificates according to RFC + 3281. + +
    +                      SEQUENCE OF Targets
    +            
    + +
    + + Creates an instance of a TargetInformation from the given object. +

    + obj can be a TargetInformation or a {@link Asn1Sequence}

    + + @param obj The object. + @return A TargetInformation instance. + @throws ArgumentException if the given object cannot be interpreted as TargetInformation. +
    + + Constructor from a Asn1Sequence. + + @param seq The Asn1Sequence. + @throws ArgumentException if the sequence does not contain + correctly encoded Targets elements. + + + Returns the targets in this target information extension. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + 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. + + + 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}. + + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                     SEQUENCE OF Targets
    +            
    + +

    + 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.

    + + @return an Asn1Object +
    + + Targets structure used in target information extension for attribute + certificates from RFC 3281. + +
    +                       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
    +                       }
    +            
    + + @see org.bouncycastle.asn1.x509.Target + @see org.bouncycastle.asn1.x509.TargetInformation +
    + + Creates an instance of a Targets from the given object. +

    + obj can be a Targets or a {@link Asn1Sequence}

    + + @param obj The object. + @return A Targets instance. + @throws ArgumentException if the given object cannot be interpreted as Target. +
    + + Constructor from Asn1Sequence. + + @param targets The ASN.1 SEQUENCE. + @throws ArgumentException if the contents of the sequence are + invalid. + + + Constructor from given targets. +

    + The ArrayList is copied.

    + + @param targets An ArrayList of {@link Target}s. + @see Target + @throws ArgumentException if the ArrayList contains not only Targets. +
    + + Returns the targets in an ArrayList. +

    + The ArrayList is cloned before it is returned.

    + + @return Returns the targets. +
    + + Produce an object suitable for an Asn1OutputStream. + + Returns: + +
    +                       Targets ::= SEQUENCE OF Target
    +            
    + + @return an Asn1Object +
    + + The TbsCertificate object. +
    +            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
    +                 }
    +            
    +

    + Note: issuerUniqueID and subjectUniqueID are both deprecated by the IETF. This class + will parse them, but you really shouldn't be creating new ones.

    +
    + + PKIX RFC-2459 - TbsCertList object. +
    +            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
    +                                           }
    +            
    +
    + + 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. + + + + Return our time as DateTime. + + A date time. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Time ::= CHOICE {
    +                        utcTime        UTCTime,
    +                        generalTime    GeneralizedTime }
    +            
    +
    + + UserNotice class, used in + CertificatePolicies X509 extensions (in policy + qualifiers). +
    +             UserNotice ::= Sequence {
    +                  noticeRef        NoticeReference OPTIONAL,
    +                  explicitText     DisplayText OPTIONAL}
    +            
    +             
    + + @see PolicyQualifierId + @see PolicyInformation +
    + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param explicitText a DisplayText value + + + Creates a new UserNotice instance. + + @param noticeRef a NoticeReference value + @param str the explicitText field as a string. + + + Creates a new UserNotice instance. +

    Useful from reconstructing a UserNotice instance + from its encodable/encoded form. + + @param as an ASN1Sequence value obtained from either + calling @{link toASN1Object()} for a UserNotice + instance or from parsing it from a DER-encoded stream.

    +
    + + Generator for Version 1 TbsCertificateStructures. +
    +             TbsCertificate ::= Sequence {
    +                  version          [ 0 ]  Version DEFAULT v1(0),
    +                  serialNumber            CertificateSerialNumber,
    +                  signature               AlgorithmIdentifier,
    +                  issuer                  Name,
    +                  validity                Validity,
    +                  subject                 Name,
    +                  subjectPublicKeyInfo    SubjectPublicKeyInfo,
    +                  }
    +             
    + +
    + + Generator for Version 2 AttributeCertificateInfo +
    +             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
    +             }
    +             
    + +
    + + @param attribute + + + Produce an object suitable for an Asn1OutputStream. +
    +             V2Form ::= Sequence {
    +                  issuerName            GeneralNames  OPTIONAL,
    +                  baseCertificateID     [0] IssuerSerial  OPTIONAL,
    +                  objectDigestInfo      [1] ObjectDigestInfo  OPTIONAL
    +                    -- issuerName MUST be present in this profile
    +                    -- baseCertificateID and objectDigestInfo MUST NOT
    +                    -- be present in this profile
    +             }
    +            
    +
    + + Generator for Version 2 TbsCertList structures. +
    +              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
    +                                             }
    +             
    + + Note: This class may be subject to change +
    + + Generator for Version 3 TbsCertificateStructures. +
    +             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
    +                  }
    +             
    + +
    + + an X509Certificate structure. +
    +             Certificate ::= Sequence {
    +                 tbsCertificate          TbsCertificate,
    +                 signatureAlgorithm      AlgorithmIdentifier,
    +                 signature               BIT STRING
    +             }
    +            
    +
    + + The default converter for X509 DN entries when going from their + string value to ASN.1 strings. + + + 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. + + + an object for the elements in the X.509 V3 extension block. + + + Convert the value of the passed in extension to an object. + The extension to parse. + The object the value string contains. + If conversion is not possible. + + + Subject Directory Attributes + + + Subject Key Identifier + + + Key Usage + + + Private Key Usage Period + + + Subject Alternative Name + + + Issuer Alternative Name + + + Basic Constraints + + + CRL Number + + + Reason code + + + Hold Instruction Code + + + Invalidity Date + + + Delta CRL indicator + + + Issuing Distribution Point + + + Certificate Issuer + + + Name Constraints + + + CRL Distribution Points + + + Certificate Policies + + + Policy Mappings + + + Authority Key Identifier + + + Policy Constraints + + + Extended Key Usage + + + Freshest CRL + + + Inhibit Any Policy + + + Authority Info Access + + + Subject Info Access + + + Logo Type + + + BiometricInfo + + + QCStatements + + + Audit identity extension in attribute certificates. + + + NoRevAvail extension in attribute certificates. + + + TargetInformation extension in attribute certificates. + + + Expired Certificates on CRL extension + + + Constructor from Asn1Sequence. + + the extensions are a list of constructed sequences, either with (Oid, OctetString) or (Oid, Boolean, OctetString) + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + constructor from a table of extensions. +

    + it's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from a table of extensions with ordering. +

    + It's is assumed the table contains Oid/string pairs.

    +
    + + Constructor from two vectors + + @param objectIDs an ArrayList of the object identifiers. + @param values an ArrayList of the extension values. + + + return an Enumeration of the extension field's object ids. + + + return the extension represented by the object identifier + passed in. + + @return the extension if it's present, null otherwise. + + + return the parsed value of the extension represented by the object identifier + passed in. + + @return the parsed value of the extension if it's present, null otherwise. + + +
    +                 Extensions        ::=   SEQUENCE SIZE (1..MAX) OF Extension
    +            
    +                 Extension         ::=   SEQUENCE {
    +                    extnId            EXTENSION.&id ({ExtensionSet}),
    +                    critical          BOOLEAN DEFAULT FALSE,
    +                    extnValue         OCTET STRING }
    +             
    +
    + + Generator for X.509 extensions + + + Reset the generator + + + + Add an extension with the given oid and the passed in value to be included + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The ASN.1 object to be included in the extension. + + + + Add an extension with the given oid and the passed in byte array to be wrapped + in the OCTET STRING associated with the extension. + + OID for the extension. + True if critical, false otherwise. + The byte array to be wrapped. + + + Return true if there are no extension present in this generator. + True if empty, false otherwise + + + Generate an X509Extensions object based on the current state of the generator. + An X509Extensions object + + +
    +                 RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
    +            
    +                 RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue
    +            
    +                 AttributeTypeAndValue ::= SEQUENCE {
    +                                               type  OBJECT IDENTIFIER,
    +                                               value ANY }
    +             
    +
    + + country code - StringType(SIZE(2)) + + + organization - StringType(SIZE(1..64)) + + + organizational unit name - StringType(SIZE(1..64)) + + + Title + + + common name - StringType(SIZE(1..64)) + + + street - StringType(SIZE(1..64)) + + + device serial number name - StringType(SIZE(1..64)) + + + locality name - StringType(SIZE(1..64)) + + + state, or province name - StringType(SIZE(1..64)) + + + Naming attributes of type X520name + + + businessCategory - DirectoryString(SIZE(1..128) + + + postalCode - DirectoryString(SIZE(1..40) + + + dnQualifier - DirectoryString(SIZE(1..64) + + + RFC 3039 Pseudonym - DirectoryString(SIZE(1..64) + + + RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z + + + RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128) + + + RFC 3039 DateOfBirth - PrintableString (SIZE(1)) -- "M", "F", "m" or "f" + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166 + codes only + + + ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64) + + + RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF + DirectoryString(SIZE(1..30)) + + + RFC 2256 dmdName + + + id-at-telephoneNumber + + + id-at-organizationIdentifier + + + id-at-name + + + Email address (RSA PKCS#9 extension) - IA5String. +

    Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.

    +
    + + more from PKCS#9 + + + email address in Verisign certificates + + + LDAP User id. + + + determines whether or not strings should be processed and printed + from back to front. + + + default look up table translating OID values into their common symbols following + the convention in RFC 2253 with a few extras + + + look up table translating OID values into their common symbols following the convention in RFC 2253 + + + look up table translating OID values into their common symbols following the convention in RFC 1779 + + + + look up table translating common symbols into their OIDS. + + + Return a X509Name based on the passed in tagged object. + + @param obj tag object holding name. + @param explicitly true if explicitly tagged false otherwise. + @return the X509Name + + + Constructor from Asn1Sequence + + the principal will be a list of constructed sets, each containing an (OID, string) pair. + + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +
    + + Constructor from a table of attributes with ordering. +

    + it's is assumed the table contains OID/string pairs, and the contents + of the table are copied into an internal table as part of the + construction process. The ordering ArrayList should contain the OIDs + in the order they are meant to be encoded or printed in ToString.

    +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes two vectors one of the oids and the other of the values. + + + Takes two vectors one of the oids and the other of the values. +

    + The passed in converter will be used to convert the strings into their + ASN.1 counterparts.

    +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. If reverse + is true, create the encoded version of the sequence starting from the + last element in the string. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes with each + string value being converted to its associated ASN.1 type using the passed + in converter. If reverse is true the ASN.1 sequence representing the DN will + be built by starting at the end of the string, rather than the start. + + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. +
    + If reverse is true, create the encoded version of the sequence + starting from the last element in the string. + @param reverse true if we should start scanning from the end (RFC 2553). + @param lookUp table of names and their oids. + @param dirName the X.500 string to be parsed. +
    + + Takes an X509 dir name as a string of the format "C=AU, ST=Victoria", or + some such, converting it into an ordered set of name attributes. lookUp + should provide a table of lookups, indexed by lowercase only strings and + yielding a DerObjectIdentifier, other than that OID. and numeric oids + will be processed automatically. The passed in converter is used to convert the + string values to the right of each equals sign to their ASN.1 counterparts. +
    + @param reverse true if we should start scanning from the end, false otherwise. + @param lookUp table of names and oids. + @param dirName the string dirName + @param converter the converter to convert string values into their ASN.1 equivalents +
    + + return an IList of the oids in the name, in the order they were found. + + + return an IList of the values found in the name, in the order they + were found. + + + return an IList of the values found in the name, in the order they + were found, with the DN label corresponding to passed in oid. + + + The X509Name object to test equivalency against. + If true, the order of elements must be the same, + as well as the values associated with each element. + + + test for equivalence - note: case is ignored. + + + convert the structure to a string - if reverse is true the + oids and values are listed out starting with the last element + in the sequence (ala RFC 2253), otherwise the string will begin + with the first element of the structure. If no string definition + for the oid is found in oidSymbols the string value of the oid is + added. Two standard symbol tables are provided DefaultSymbols, and + RFC2253Symbols as part of this class. + + @param reverse if true start at the end of the sequence and work back. + @param oidSymbols look up table strings for oids. + + + * 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). + *

    + * An example of an encoder look like below: + *

    +                 * public class X509DirEntryConverter
    +                 *     : X509NameEntryConverter
    +                 * {
    +                 *     public Asn1Object GetConvertedValue(
    +                 *         DerObjectIdentifier  oid,
    +                 *         string               value)
    +                 *     {
    +                 *         if (str.Length() != 0 && 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);
    +                 *         }
    +                 *     }
    +                 * }
    +            	 * 
    + *

    +
    + + 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 + + + return true if the passed in string can be represented without + loss as a PrintableString, false otherwise. + + + 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. + + + 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. + + + A general class that reads all X9.62 style EC curve tables. + + + return a X9ECParameters object representing the passed in named + curve. The routine returns null if the curve is not present. + + @param name the name of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return a X9ECParameters object representing the passed in named + curve. + + @param oid the object id of the curve requested + @return an X9ECParameters object or null if the curve is not available. + + + return an enumeration of the names of the available curves. + + @return an enumeration of the names of the available curves. + + + ASN.1 def for Diffie-Hellman key exchange KeySpecificInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             KeySpecificInfo ::= Sequence {
    +                 algorithm OBJECT IDENTIFIER,
    +                 counter OCTET STRING SIZE (4..4)
    +             }
    +            
    +
    + + ANS.1 def for Diffie-Hellman key exchange OtherInfo structure. See + RFC 2631, or X9.42, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             OtherInfo ::= Sequence {
    +                 keyInfo KeySpecificInfo,
    +                 partyAInfo [0] OCTET STRING OPTIONAL,
    +                 suppPubInfo [2] OCTET STRING
    +             }
    +            
    +
    + + table of the current named curves defined in X.962 EC-DSA. + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + Produce an object suitable for an Asn1OutputStream. +
    +            Parameters ::= CHOICE {
    +               ecParameters ECParameters,
    +               namedCurve   CURVES.&id({CurveNames}),
    +               implicitlyCA Null
    +            }
    +            
    +
    + + ASN.1 def for Elliptic-Curve Curve structure. See + X9.62, for further details. + + + Produce an object suitable for an Asn1OutputStream. +
    +             Curve ::= Sequence {
    +                 a               FieldElement,
    +                 b               FieldElement,
    +                 seed            BIT STRING      OPTIONAL
    +             }
    +            
    +
    + + ASN.1 def for Elliptic-Curve ECParameters structure. See + X9.62, for further details. + + + Return the ASN.1 entry representing the Curve. + + @return the X9Curve for the curve in these parameters. + + + Return the ASN.1 entry representing the FieldID. + + @return the X9FieldID for the FieldID in these parameters. + + + Return the ASN.1 entry representing the base point G. + + @return the X9ECPoint for the base point in these parameters. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECParameters ::= Sequence {
    +                 version         Integer { ecpVer1(1) } (ecpVer1),
    +                 fieldID         FieldID {{FieldTypes}},
    +                 curve           X9Curve,
    +                 base            X9ECPoint,
    +                 order           Integer,
    +                 cofactor        Integer OPTIONAL
    +             }
    +            
    +
    + + class for describing an ECPoint as a Der object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             ECPoint ::= OCTET STRING
    +            
    +

    + Octet string produced using ECPoint.GetEncoded().

    +
    + + Class for processing an ECFieldElement as a DER object. + + + Produce an object suitable for an Asn1OutputStream. +
    +             FieldElement ::= OCTET STRING
    +            
    +

    +

      +
    1. if q is an odd prime then the field element is + processed as an Integer and converted to an octet string + according to x 9.62 4.3.1.
    2. +
    3. if q is 2m then the bit string + contained in the field element is converted into an octet + string with the same ordering padded at the front if necessary. +
    4. +
    +

    +
    + + ASN.1 def for Elliptic-Curve Field ID structure. See + X9.62, for further details. + + + Constructor for elliptic curves over prime fields + F2. + @param primeP The prime p defining the prime field. + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk1 + 1 + represents the reduction polynomial f(z). + + + Constructor for elliptic curves over binary fields + F2m. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).. + + + Produce a Der encoding of the following structure. +
    +             FieldID ::= Sequence {
    +                 fieldType       FIELD-ID.&id({IOSet}),
    +                 parameters      FIELD-ID.&Type({IOSet}{@fieldType})
    +             }
    +            
    +
    + + id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) + us(840) x9-57 (10040) x9cm(4) 3 } + + + X9.63 + + + X9.42 + + + reader for Base64 armored objects - read the headers and then start returning + bytes when the data is reached. An IOException is thrown if the CRC check + fails. + + + decode the base 64 encoded input data. + + @return the offset the data starts in out. + + + Create a stream for reading a PGP armoured message, parsing up to a header + and then reading the data that follows. + + @param input + + + Create an armoured input stream which will assume the data starts + straight away, or parse for headers first depending on the value of + hasHeaders. + + @param input + @param hasHeaders true if headers are to be looked for, false otherwise. + + + @return true if we are inside the clear text section of a PGP + signed message. + + + @return true if the stream is actually at end of file. + + + Return the armor header line (if there is one) + @return the armor header line, null if none present. + + + Return the armor headers (the lines after the armor header line), + @return an array of armor headers, null if there aren't any. + + + Basic output stream. + + + encode the input data producing a base 64 encoded byte array. + + + Set an additional header entry. A null value will clear the entry for name. + + @param name the name of the header entry. + @param v the value of the header entry. + + + Reset the headers to only contain a Version string (if one is present). + + + Start a clear text signed message. + @param hashAlgorithm + + + Note: Close() does not close the underlying stream. So it is possible to write + multiple objects using armoring to a single stream. + + + Basic type for a image attribute packet. + + + Reader for PGP objects. + + + Returns the next packet tag in the stream. + + + + A stream that overlays our input stream, allowing the user to only read a segment of it. + NB: dataLength will be negative if the segment length is in the upper range above 2**31. + + + + Base class for a PGP object. + + + Basic output stream. + + + Create a stream representing a general packet. + Output stream to write to. + + + Create a stream representing an old style partial object. + Output stream to write to. + The packet tag for the object. + + + Create a stream representing a general packet. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + If true, the header is written out in old format. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Size of chunks making up the packet. + + + Create a new style partial input stream buffered into chunks. + Output stream to write to. + Packet tag. + Buffer to use for collecting chunks. + + + Flush the underlying stream. + + + Finish writing out the current packet without closing the underlying stream. + + + Generic compressed data object. + + + The algorithm tag value. + + + Basic tags for compression algorithms. + + + Basic type for a PGP packet. + + + Base class for a DSA public key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for a DSA secret key. + + + @param in + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + @return x + + + Base class for an ECDH Public Key. + + + The stream to read the packet from. + + + Base class for an ECDSA Public Key. + + + The stream to read the packet from. + + + Base class for an EC Public Key. + + + The stream to read the packet from. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an EC Secret Key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal public key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an ElGamal secret key. + + + @param in + + + @param x + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Basic packet for an experimental packet. + + + Basic tags for hash algorithms. + + + Base interface for a PGP key. + + + + 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. + + "RAW" or "PGP". + + + Note: you can only read from this once... + + + Generic literal data packet. + + + The format tag value. + + + The modification time of the file in milli-seconds (since Jan 1, 1970 UTC) + + + Basic type for a marker packet. + + + Basic packet for a modification detection code packet. + + + A multiple precision integer + + + Generic signature object + + + The encryption algorithm tag. + + + The hash algorithm tag. + + + Basic PGP packet tag types. + + + Public Key Algorithm tag numbers. + + + Basic packet for a PGP public key. + + + Basic packet for a PGP public key. + + + Construct a version 4 public key packet. + + + Basic packet for a PGP public subkey + + + Construct a version 4 public subkey packet. + + + Base class for an RSA public key. + + + Construct an RSA public key from the passed in stream. + + + The modulus. + The public exponent. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + Base class for an RSA secret (or priate) key. + + + The format, as a string, always "PGP". + + + Return the standard PGP encoding of the key. + + + The string to key specifier class. + + + The hash algorithm. + + + The IV for the key generation algorithm. + + + The iteration count + + + The protection mode - only if GnuDummyS2K + + + Basic packet for a PGP secret key. + + + Basic packet for a PGP secret key. + + + Generic signature packet. + + + Generate a version 4 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param hashedData + @param unhashedData + @param fingerprint + @param signature + + + Generate a version 2/3 signature packet. + + @param signatureType + @param keyAlgorithm + @param hashAlgorithm + @param fingerprint + @param signature + + + return the keyId + @return the keyId that created the signature. + + + return the signature trailer that must be included with the data + to reconstruct the signature + + @return byte[] + + + * 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. + + + Return the byte encoding of the signature section. + @return uninterpreted signature bytes. + + + Return the creation time in milliseconds since 1 Jan., 1970 UTC. + + + Basic type for a PGP Signature sub-packet. + + + Return the generic data making up the packet. + + + reader for signature sub-packets + + + Basic PGP signature sub-packet tag types. + + + Packet embedded signature + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + Identifier for the modification detection feature + + + Returns if modification detection is supported. + + + Returns if a particular feature is supported. + + + Sets support for a particular feature. + + + packet giving signature creation time. + + + packet giving time after creation at which the key expires. + + + Return the number of seconds after creation time a key is valid for. + + @return second count for key validity. + + + Packet holding the key flag values. + + + + Return the flag values contained in the first 4 octets (note: at the moment + the standard only uses the first one). + + + + Class provided a NotationData object according to + RFC2440, Chapter 5.2.3.15. Notation Data + + + packet giving signature creation time. + + + packet giving whether or not the signature is signed using the primary user ID for the key. + + + packet giving whether or not is revocable. + + + packet giving signature creation time. + + + packet giving signature expiration time. + + + return time in seconds before signature expires after creation time. + + + packet giving the User ID of the signer. + + + packet giving trust. + + + + Represents revocation key OpenPGP signature sub packet. + + + + + Represents revocation reason OpenPGP signature sub packet. + + + + Basic type for a symmetric key encrypted packet. + + + Basic tags for symmetric key algorithms + + + Basic type for a symmetric encrypted session key packet + + + @return int + + + @return S2k + + + @return byte[] + + + @return int + + + Basic type for a trust packet. + + + Basic type for a user attribute packet. + + + Basic type for a user attribute sub-packet. + + + return the generic data making up the packet. + + + reader for user attribute sub-packets + + + Basic PGP user attribute sub-packet tag types. + + + Basic type for a user ID packet. + + + Compressed data objects + + + The algorithm used for compression + + + Get the raw input stream contained in the object. + + + Return an uncompressed input stream which allows reading of the compressed data. + + + Class for producing compressed data packets. + + + +

    + Return an output stream which will save the data being written to + the compressed object. +

    +

    + 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 outStr. +

    +
    + Stream to be used for output. + A Stream for output of the compressed data. + + + +
    + + +

    + Return an output stream which will compress 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +

    + Note: using this may break compatibility with RFC 1991 compliant tools. + Only recent OpenPGP implementations are capable of accepting these streams. +

    +
    + Stream to be used for output. + The buffer to use. + A Stream for output of the compressed data. + + + + +
    + + Close the compressed object.summary> + + + + Thrown if the IV at the start of a data stream indicates the wrong key is being used. + + + + Return the raw input stream for the data stream. + + + Return true if the message is integrity protected. + True, if there is a modification detection code namespace associated + with this stream. + + + Note: This can only be called after the message has been read. + True, if the message verifies, false otherwise + + + Generator for encrypted objects. + + + Existing SecureRandom constructor. + The symmetric algorithm to use. + Source of randomness. + + + Creates a cipher stream which will have an integrity packet associated with it. + + + Base constructor. + The symmetric algorithm to use. + Source of randomness. + PGP 2.6.x compatibility required. + + + + Add a PBE encryption method to the encrypted object using the default algorithm (S2K_SHA1). + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Add a PBE encryption method to the encrypted object. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Add a PBE encryption method to the encrypted object. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Add a public key encrypted session key to the encrypted object. + + + +

    + If buffer is non null stream assumed to be partial, otherwise the length will be used + to output a fixed length packet. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + Return an output stream which will encrypt the data as it is written to it. +

    +

    + 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 outStr. +

    +
    +
    + + +

    + 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. +

    +

    + 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 outStr. +

    +

    + Note: 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. +

    +
    +
    + + +

    + Close off the encrypted object - this is equivalent to calling Close() on the stream + returned by the Open() method. +

    +

    + Note: This does not close the underlying output stream, only the stream on top of + it created by the Open() method. +

    +
    +
    + + A holder for a list of PGP encryption method packets. + + + Generic exception class for PGP encoding/decoding problems. + + + Key flag values for the KeyFlags subpacket. + + + + General class to handle JCA key pairs and convert them into OpenPGP ones. +

    + 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. +

    +
    +
    + + Create a key pair from a PgpPrivateKey and a PgpPublicKey. + The public key. + The private key. + + + The keyId associated with this key pair. + + + + Generator for a PGP master and subkey ring. + This class will generate both the secret and public key rings + + + + + Create a new key ring generator using old style checksumming. It is recommended to use + SHA1 checksumming where possible. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + + If true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + + Create a new key ring generator. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The certification level for keys on this ring. + The master key pair. + The id to be associated with the ring. + The algorithm to be used to protect secret keys. + The hash algorithm. + The passPhrase to be used to protect secret keys. + Checksum the secret keys with SHA1 rather than the older 16 bit checksum. + Packets to be included in the certification hash. + Packets to be attached unhashed to the certification. + input secured random. + + + Add a subkey to the key ring to be generated with default certification. + + + + Add a subkey to the key ring to be generated with default certification. + + The key pair. + The hash algorithm. + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + + + + + Add a subkey with specific hashed and unhashed packets associated with it and + default certification. + + Public/private key pair. + Hashed packet values to be included in certification. + Unhashed packets values to be included in certification. + The hash algorithm. + exception adding subkey: + + + + Return the secret key ring. + + + Return the public key ring that corresponds to the secret key ring. + + + + Thrown if the key checksum is invalid. + + + + Class for processing literal data objects. + + + The special name indicating a "for your eyes only" packet. + + + The format of the data stream - Binary or Text + + + The file name that's associated with the data stream. + + + Return the file name as an unintrepreted byte array. + + + The modification time for the file. + + + The raw input stream for the data stream. + + + The input stream representing the data stream. + + + Class for producing literal data packets. + + + The special name indicating a "for your eyes only" packet. + + + + Generates literal data objects in the old format. + This is important if you need compatibility with PGP 2.6.x. + + If true, uses old format. + + + +

    + Open a literal data packet, returning a stream to store the data inside the packet. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The length of the data we will write. + The time of last modification we want stored. +
    + + +

    + Open a literal data packet, returning a stream to store the data inside the packet, + as an indefinite length stream. The stream is written out as a series of partial + packets with a chunk size determined by the size of the passed in buffer. +

    +

    + 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 outStr. +

    +

    + Note: 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.

    +
    + The stream we want the packet in. + The format we are using. + The name of the 'file'. + The time of last modification we want stored. + The buffer to use for collecting data to put into chunks. +
    + + +

    + Open a literal data packet for the passed in FileInfo object, returning + an output stream for saving the file contents. +

    +

    + 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 outStr. +

    +
    + The stream we want the packet in. + The format we are using. + The FileInfo object containg the packet details. +
    + + + Close the literal data packet - this is equivalent to calling Close() + on the stream returned by the Open() method. + + + + + A PGP marker packet - in general these should be ignored other than where + the idea is to preserve the original input stream. + + + + + General class for reading a PGP object stream. +

    + 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.

    +
    +
    + + Return the next object in the stream, or null if the end is reached. + On a parse error + + + + Return all available objects in a list. + + An IList containing all objects from this factory, in order. + + + + Read all available objects, returning only those that are assignable to the specified type. + + The type of objects to return. All other objects are ignored. + An IList containing the filtered objects from this factory, in order. + + + A one pass signature object. + + + Initialise the signature object for verification. + + + Verify the calculated signature against the passed in PgpSignature. + + + Holder for a list of PgpOnePassSignature objects. + + + Padding functions. + + + A password based encryption object. + + + Return the raw input stream for the data stream. + + + Return the decrypted input stream, using the passed in passphrase. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Return the decrypted input stream, using the passed in passphrase. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Return the decrypted input stream, using the passed in passphrase. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + General class to contain a private key for use with other OpenPGP objects. + + + + Create a PgpPrivateKey from a keyID, the associated public data packet, and a regular private key. + + ID of the corresponding public key. + the public key data packet to be associated with this private key. + the private key data packet to be associated with this private key. + + + The keyId associated with the contained private key. + + + The public key packet associated with this private key, if available. + + + The contained private key. + + + General class to handle a PGP public key object. + + + + Create a PgpPublicKey from the passed in lightweight one. + + + 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. + + Asymmetric algorithm type representing the public key. + Actual public key to associate. + Date of creation. + If pubKey is not public. + On key creation problem. + + + Constructor for a sub-key. + + + Copy constructor. + The public key to copy. + + + The version of this key. + + + The creation time of this key. + + + The number of valid days from creation time - zero means no expiry. + WARNING: This method will return 1 for keys with version > 3 that expire in less than 1 day + + + Return the trust data associated with the public key, if present. + A byte array with trust data, null otherwise. + + + The number of valid seconds from creation time - zero means no expiry. + + + The keyId associated with the public key. + + + The fingerprint of the key + + + + Check if this key has an algorithm type that makes it suitable to use for encryption. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for encryption. + + + + True, if this is a master key. + + + The algorithm code associated with the public key. + + + The strength of the key in bits. + + + The public key contained in the object. + A lightweight public key. + If the key algorithm is not recognised. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of PgpUserAttributeSubpacketVector objects. + + + Allows enumeration of any signatures associated with the passed in id. + The ID to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures associated with the passed in user attributes. + The vector of user attributes to be matched. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of signatures of the passed in type that are on this key. + The type of the signature to be returned. + An IEnumerable of PgpSignature objects. + + + Allows enumeration of all signatures/certifications associated with this key. + An IEnumerable with all signatures/certifications. + + + Return all signatures/certifications directly associated with this key (ie, not to a user id). + + @return an iterator (possibly empty) with all signatures/certifications. + + + Check whether this (sub)key has a revocation signature on it. + True, if this (sub)key has been revoked. + + + Add a certification for an id to the given public key. + The key the certification is to be added to. + The ID the certification is associated with. + The new certification. + The re-certified key. + + + Add a certification for the given UserAttributeSubpackets to the given public key. + The key the certification is to be added to. + The attributes the certification is associated with. + The new certification. + The re-certified key. + + + + Remove any certifications associated with a user attribute subpacket on a key. + + The key the certifications are to be removed from. + The attributes to be removed. + + The re-certified key, or null if the user attribute subpacket was not found on the key. + + + + Remove any certifications associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that is to be removed. + The re-certified key, or null if the ID was not found on the key. + + + Remove a certification associated with a given ID on a key. + The key the certifications are to be removed from. + The ID that the certfication is to be removed from. + The certfication to be removed. + The re-certified key, or null if the certification was not found. + + + Remove a certification associated with a given user attributes on a key. + The key the certifications are to be removed from. + The user attributes that the certfication is to be removed from. + The certification to be removed. + The re-certified key, or null if the certification was not found. + + + Add a revocation or some other key certification to a key. + The key the revocation is to be added to. + The key signature to be added. + The new changed public key object. + + + Remove a certification from the key. + The key the certifications are to be removed from. + The certfication to be removed. + The modified key, null if the certification was not found. + + + A public key encrypted data object. + + + The key ID for the key used to encrypt the data. + + + + Return the algorithm code for the symmetric algorithm used to encrypt the data. + + + + Return the decrypted data stream for the packet. + + + + Class to hold a single master public key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpPublicKeyRingBundle class. +

    +
    +
    + + Return the first public key in the ring. + + + Return the public key referred to by the passed in key ID if it is present. + + + Allows enumeration of all the public keys. + An IEnumerable of PgpPublicKey objects. + + + + Returns a new key ring with the public key passed in either added or + replacing an existing one. + + The public key ring to be modified. + The public key to be inserted. + A new PgpPublicKeyRing + + + Returns a new key ring with the public key passed in removed from the key ring. + The public key ring to be modified. + The public key to be removed. + A new PgpPublicKeyRing, or null if pubKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire public key file in one hit this is the class for you. + + + + Build a PgpPublicKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpPublicKeyRing. + + + Return the number of key rings in this collection. + + + Allow enumeration of the public key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP public key associated with the given key id. + The ID of the public key to return. + + + Return the public key ring which contains the key referred to by keyId + key ID to match against + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in public key ring. + + The PgpPublicKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpPublicKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in public key ring removed. + + The PgpPublicKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpPublicKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + General class to handle a PGP secret key object. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + If utf8PassPhrase is true, conversion of the passphrase to bytes uses Encoding.UTF8.GetBytes(), otherwise the conversion + is performed using Convert.ToByte(), which is the historical behaviour of the library (1.7 and earlier). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Check if this key has an algorithm type that makes it suitable to use for signing. + + + Note: with version 4 keys KeyFlags subpackets should also be considered when present for + determining the preferred use of the key. + + + true if this key algorithm is suitable for use with signing. + + + + True, if this is a master key. + + + Detect if the Secret Key's Private Key is empty or not + + + The algorithm the key is encrypted with. + + + The key ID of the public key associated with this key. + + + Return the S2K usage associated with this key. + + + Return the S2K used to process this key. + + + The public key associated with this key. + + + Allows enumeration of any user IDs associated with the key. + An IEnumerable of string objects. + + + Allows enumeration of any user attribute vectors associated with the key. + An IEnumerable of string objects. + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + Extract a PgpPrivateKey from this secret key's encrypted contents. + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Return a copy of the passed in secret key, encrypted using a new password + and the passed in algorithm. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + The PgpSecretKey to be copied. + The current password for the key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + Replace the passed the public key on the passed in secret key. + Secret key to change. + New public key. + A new secret key. + If KeyId's do not match. + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys associating it with the passed in public key. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + Parse a secret key from one of the GPG S expression keys. + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Parse a secret key from one of the GPG S expression keys. + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + + Parse a secret key from one of the GPG S expression keys. + + + + + Class to hold a single master secret key and its subkeys. +

    + Often PGP keyring files consist of multiple master keys, if you are trying to process + or construct one of these you should use the PgpSecretKeyRingBundle class. +

    +
    +
    + + Return the public key for the master key. + + + Return the master private key. + + + Allows enumeration of the secret keys. + An IEnumerable of PgpSecretKey objects. + + + + Return an iterator of the public keys in the secret key ring that + have no matching private key. At the moment only personal certificate data + appears in this fashion. + + An IEnumerable of unattached, or extra, public keys. + + + + Replace the public key set on the secret ring with the corresponding key off the public ring. + + Secret ring to be changed. + Public ring containing the new public key set. + + + + Return a copy of the passed in secret key ring, with the master key and sub keys encrypted + using a new password and the passed in algorithm. + + The PgpSecretKeyRing to be copied. + The current password for key. + The new password for the key. + The algorithm to be used for the encryption. + Source of randomness. + + + + Returns a new key ring with the secret key passed in either added or + replacing an existing one with the same key ID. + + The secret key ring to be modified. + The secret key to be inserted. + A new PgpSecretKeyRing + + + Returns a new key ring with the secret key passed in removed from the key ring. + The secret key ring to be modified. + The secret key to be removed. + A new PgpSecretKeyRing, or null if secKey is not found. + + + + Often a PGP key ring file is made up of a succession of master/sub-key key rings. + If you want to read an entire secret key file in one hit this is the class for you. + + + + Build a PgpSecretKeyRingBundle from the passed in input stream. + Input stream containing data. + If a problem parsing the stream occurs. + If an object is encountered which isn't a PgpSecretKeyRing. + + + Return the number of rings in this collection. + + + Allow enumeration of the secret key rings making up this collection. + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + An IEnumerable of key rings which matched (possibly none). + + + Allow enumeration of the key rings associated with the passed in userId. + The user ID to be matched. + If true, userId need only be a substring of an actual ID string to match. + If true, case is ignored in user ID comparisons. + An IEnumerable of key rings which matched (possibly none). + + + Return the PGP secret key associated with the given key id. + The ID of the secret key to return. + + + Return the secret key ring which contains the key referred to by keyId + The ID of the secret key + + + + Return true if a key matching the passed in key ID is present, false otherwise. + + key ID to look for. + + + + Return a new bundle containing the contents of the passed in bundle and + the passed in secret key ring. + + The PgpSecretKeyRingBundle the key ring is to be added to. + The key ring to be added. + A new PgpSecretKeyRingBundle merging the current one with the passed in key ring. + If the keyId for the passed in key ring is already present. + + + + Return a new bundle containing the contents of the passed in bundle with + the passed in secret key ring removed. + + The PgpSecretKeyRingBundle the key ring is to be removed from. + The key ring to be removed. + A new PgpSecretKeyRingBundle not containing the passed in key ring. + If the keyId for the passed in key ring is not present. + + + A PGP signature object. + + + The OpenPGP version number for this signature. + + + The key algorithm associated with this signature. + + + The hash algorithm associated with this signature. + + + Return true if this signature represents a certification. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in user attributes. + + User attributes the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + + Verify the signature as certifying the passed in public key as associated + with the passed in ID. + + ID the key was stored under. + The key to be verified. + True, if the signature matches, false otherwise. + + + Verify a certification for the passed in key against the passed in master key. + The key we are verifying against. + The key we are verifying. + True, if the certification is valid, false otherwise. + + + Verify a key certification, such as revocation, for the passed in key. + The key we are checking. + True, if the certification is valid, false otherwise. + + + The ID of the key that created the signature. + + + The creation time of this signature. + + + + Return true if the signature has either hashed or unhashed subpackets. + + + + + Return true if the passed in signature type represents a certification, false if the signature type is not. + + + true if signatureType is a certification, false otherwise. + + + Generator for PGP signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a signature object containing the current signature state. + + + Generate a certification for the passed in ID and key. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in userAttributes. + The ID we are certifying against the public key. + The key we are certifying against the ID. + The certification. + + + Generate a certification for the passed in key against the passed in master key. + The key we are certifying against. + The key we are certifying. + The certification. + + + Generate a certification, such as a revocation, for the passed in key. + The key we are certifying. + The certification. + + + A list of PGP signatures - normally in the signature block after literal data. + + + Generator for signature subpackets. + + + + 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. + + true if the packet is critical. + depth level. + trust amount. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the key is valid, or zero if no expiry. + + + + 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. + + True, if should be treated as critical, false otherwise. + The number of seconds the signature is valid, or zero if no expiry. + + + + Set the creation time for the signature. +

    + Note: this overrides the generation of a creation time when the signature + is generated.

    +
    +
    + + + Sets revocation reason sub packet + + + + + Sets revocation key sub packet + + + + + Sets issuer key sub packet + + + + Container for a list of signature subpackets. + + + Return true if a particular subpacket type exists. + + @param type type to look for. + @return true if present, false otherwise. + + + Return all signature subpackets of the passed in type. + @param type subpacket type code + @return an array of zero or more matching subpackets. + + + + Return the number of seconds a signature is valid for after its creation date. + A value of zero means the signature never expires. + + Seconds a signature is valid for. + + + + Return the number of seconds a key is valid for after its creation date. + A value of zero means the key never expires. + + Seconds a signature is valid for. + + + Return the number of packets this vector contains. + + + Container for a list of user attribute subpackets. + + + Basic utility class. + + + + Conversion of the passphrase characters to bytes is performed using Convert.ToByte(), which is + the historical behaviour of the library (1.7 and earlier). + + + + + The passphrase is encoded to bytes using UTF8 (Encoding.UTF8.GetBytes). + + + + + Allows the caller to handle the encoding of the passphrase to bytes. + + + + Write out the passed in file as a literal data packet. + + + Write out the passed in file as a literal data packet in partial packet format. + + + + Return either an ArmoredInputStream or a BcpgInputStream based on whether + the initial characters of the stream are binary PGP encodings or not. + + + + Generator for old style PGP V3 Signatures. + + + Create a generator for the passed in keyAlgorithm and hashAlgorithm codes. + + + Initialise the generator for signing. + + + Initialise the generator for signing. + + + Return the one pass header associated with the current signature. + + + Return a V3 signature object containing the current signature state. + + + Utility functions for looking a S-expression keys. This class will move when it finds a better home! +

    + Format documented here: + http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/keyformat.txt;h=42c4b1f06faf1bbe71ffadc2fee0fad6bec91a97;hb=refs/heads/master +

    +
    + + + Wrap a PKIMessage ASN.1 structure. + + PKI message. + + + + Create a PKIMessage from the passed in bytes. + + BER/DER encoding of the PKIMessage + + + + Return true if this message has protection bits on it. A return value of true + indicates the message can be used to construct a ProtectedPKIMessage. + + + + + Wrapper for a PKIMessage with protection attached to it. + + + + + Wrap a general message. + + If the general message does not have protection. + The General message + + + + Wrap a PKI message. + + If the PKI message does not have protection. + The PKI message + + + + Message header + + + + + Message Body + + + + + Return the underlying ASN.1 structure contained in this object. + + PKI Message structure + + + + Determine whether the message is protected by a password based MAC. Use verify(PKMACBuilder, char[]) + to verify the message if this method returns true. + + true if protection MAC PBE based, false otherwise. + + + + Return the extra certificates associated with this message. + + an array of extra certificates, zero length if none present. + + + + Verify a message with a public key based signature attached. + + a factory of signature verifiers. + true if the provider is able to create a verifier that validates the signature, false otherwise. + + + + Verify a message with password based MAC protection. + + MAC builder that can be used to construct the appropriate MacCalculator + the MAC password + true if the passed in password and MAC builder verify the message, false otherwise. + if algorithm not MAC based, or an exception is thrown verifying the MAC. + + + + The 'Signature' parameter is only available when generating unsigned attributes. + + + + containing class for an CMS Authenticated Data object + + + return the object identifier for the content MAC algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the digested attributes indexed by + the OID of the attribute. + + + return a table of the undigested attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + General class for generating a CMS authenticated-data message. + + A simple example of usage. + +
    +                  CMSAuthenticatedDataGenerator  fact = new CMSAuthenticatedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSAuthenticatedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + + + generate an authenticated object that contains an CMS Authenticated Data object + + + Parsing class for an CMS Authenticated Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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!!!!");
    +                      }
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CMSAuthenticatedDataParser     ep = new CMSAuthenticatedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the mac algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + return a table of the unauthenticated attributes indexed by + the OID of the attribute. + @exception java.io.IOException + + + General class for generating a CMS authenticated-data message stream. +

    + A simple example of usage. +

    +                  CMSAuthenticatedDataStreamGenerator edGen = new CMSAuthenticatedDataStreamGenerator();
    +            
    +                  edGen.addKeyTransRecipient(cert);
    +            
    +                  ByteArrayOutputStream  bOut = new ByteArrayOutputStream();
    +            
    +                  OutputStream out = edGen.open(
    +                                          bOut, CMSAuthenticatedDataGenerator.AES128_CBC, "BC");*
    +                  out.write(data);
    +            
    +                  out.close();
    +             
    +

    +
    + + base constructor + + + constructor allowing specific source of randomness + @param rand instance of SecureRandom to use + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information + + + generate an enveloped object that contains an CMS Enveloped Data + object using the given provider and the passed in key generator. + @throws java.io.IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + + + generate an enveloped object that contains an CMS Enveloped Data object + + + base constructor + + + constructor allowing specific source of randomness + + @param rand instance of SecureRandom to use + + + containing class for an CMS AuthEnveloped Data object + + + containing class for an CMS Compressed Data object + + + Return the uncompressed content. + + @return the uncompressed content + @throws CmsException if there is an exception uncompressing the data. + + + Return the uncompressed content, throwing an exception if the data size + is greater than the passed in limit. If the content is exceeded getCause() + on the CMSException will contain a StreamOverflowException + + @param limit maximum number of bytes to read + @return the content read + @throws CMSException if there is an exception uncompressing the data. + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + * General class for generating a compressed CMS message. + *

    + * A simple example of usage.

    + *

    + *

    +                *      CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
    +                *      CMSCompressedData data = fact.Generate(content, algorithm);
    +                * 
    + *

    +
    + + Generate an object that contains an CMS Compressed Data + + + Class for reading a CMS Compressed Data stream. +
    +                 CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
    +            
    +                 process(cp.GetContent().GetContentStream());
    +             
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                  CMSCompressedDataParser     ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + General class for generating a compressed CMS message stream. +

    + A simple example of usage. +

    +
    +                  CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
    +            
    +                  Stream cOut = gen.Open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
    +            
    +                  cOut.Write(data);
    +            
    +                  cOut.Close();
    +             
    +
    + + base constructor + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + Close the underlying data stream. + @throws IOException if the close fails. + + + containing class for an CMS Enveloped Data object + + + return the object identifier for the content encryption algorithm. + + + return a store of the intended recipients for this message + + + return the ContentInfo + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + + + return the ASN.1 encoded representation of this object. + + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CmsEnvelopedDataGenerator  fact = new CmsEnvelopedDataGenerator();
    +            
    +                  fact.AddKeyTransRecipient(cert);
    +            
    +                  CmsEnvelopedData         data = fact.Generate(content, algorithm);
    +             
    +
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + + Generate an enveloped object that contains a CMS Enveloped Data + object using the passed in key generator. + + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Generate an enveloped object that contains an CMS Enveloped Data object. + + + Parsing class for an CMS Enveloped Data object from an input stream. +

    + 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. +

    +

    + Example of use - assuming the first recipient matches the private key we have. +

    +                  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());
    +                  }
    +              
    + Note: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsEnvelopedDataParser     ep = new CmsEnvelopedDataParser(new BufferedInputStream(inputStream, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +

    +
    + + return the object identifier for the content encryption algorithm. + + + return the ASN.1 encoded encryption algorithm parameters, or null if + there aren't any. + + + return a store of the intended recipients for this message + + + return a table of the unprotected attributes indexed by + the OID of the attribute. + @throws IOException + + + General class for generating a CMS enveloped-data message stream. +

    + A simple example of usage. +

    +                  CmsEnvelopedDataStreamGenerator edGen = new CmsEnvelopedDataStreamGenerator();
    +            
    +                  edGen.AddKeyTransRecipient(cert);
    +            
    +                  MemoryStream  bOut = new MemoryStream();
    +            
    +                  Stream out = edGen.Open(
    +                                          bOut, CMSEnvelopedDataGenerator.AES128_CBC);*
    +                  out.Write(data);
    +            
    +                  out.Close();
    +             
    +

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data. + Length of octet strings to buffer the data. + + + Use a BER Set to store the recipient information. + + + + Generate an enveloped object that contains an CMS Enveloped Data + object using the passed in key generator. + + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + generate an enveloped object that contains an CMS Enveloped Data object + @throws IOException + + + General class for generating a CMS enveloped-data message. + + A simple example of usage. + +
    +                  CMSEnvelopedDataGenerator  fact = new CMSEnvelopedDataGenerator();
    +            
    +                  fact.addKeyTransRecipient(cert);
    +            
    +                  CMSEnvelopedData         data = fact.generate(content, algorithm, "BC");
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + add a recipient. + + @param cert recipient's public key certificate + @exception ArgumentException if there is a problem with the certificate + + + 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 + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + add a KEK recipient. + @param key the secret key to use for wrapping + @param keyIdentifier the byte string that identifies the key + + + 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 + + + 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 + + + + Add a generator to produce the recipient info required. + + a generator of a recipient info object. + + + + Generic routine to copy out the data we want processed. + + + This routine may be called multiple times. + + + + a holding class for a byte array of data to be processed. + + + A clone of the byte array + + + a holding class for a file of data to be processed. + + + The file handle + + + 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... + +
    +              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++;
    +                  }
    +              }
    +             
    +
    + + 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. + + + base constructor - content with detached signature. + + @param signedContent the content that was signed. + @param sigData the signature object. + + + base constructor - with encapsulated content + + + Return the version number for this object. + + + return the collection of signers that are associated with the + signatures for the message. + + + 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 + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + return the ContentInfo + + + return the ASN.1 encoded representation of this object. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + 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. + + + 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 + + + * general class for generating a pkcs7-signature message. + *

    + * A simple example of usage. + * + *

    +                 *      IX509Store certs...
    +                 *      IX509Store crls...
    +                 *      CmsSignedDataGenerator gen = new CmsSignedDataGenerator();
    +                 *
    +                 *      gen.AddSigner(privKey, cert, CmsSignedGenerator.DigestSha1);
    +                 *      gen.AddCertificates(certs);
    +                 *      gen.AddCrls(crls);
    +                 *
    +                 *      CmsSignedData data = gen.Generate(content);
    +                 * 
    + *

    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + * add a signer - no attributes other than the default ones will be + * provided here. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + + + add a signer - no attributes other than the default ones will be + provided here. + + + add a signer, specifying the digest encryption algorithm to use - no attributes other than the default ones will be + provided here. + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param cert certificate containing corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param cert certificate containing corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + * add a signer with extra signed/unsigned attributes. + * + * @param key signing key to use + * @param subjectKeyID subjectKeyID of corresponding public key + * @param digestOID digest algorithm OID + * @param signedAttr table of attributes to be included in signature + * @param unsignedAttr table of attributes to be included as unsigned + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes. + + @param key signing key to use + @param subjectKeyID subjectKeyID of corresponding public key + @param encryptionOID digest encryption algorithm OID + @param digestOID digest algorithm OID + @param signedAttr table of attributes to be included in signature + @param unsignedAttr table of attributes to be included as unsigned + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, specifying the digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + add a signer with extra signed/unsigned attributes based on generators. + + + add a signer, including digest encryption algorithm, with extra signed/unsigned attributes based on generators. + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a set of one or more SignerInformation objects representing counter signatures on + the passed in SignerInformation object. + + @param signer the signer to be countersigned + @param sigProvider the provider to be used for counter signing. + @return a store containing the signers. + + + Parsing class for an CMS Signed Data object from an input stream. +

    + Note: that because we are in a streaming mode only one signer can be tried and it is important + that the methods on the parser are called in the appropriate order. +

    +

    + A simple example of usage for an encapsulated signature. +

    +

    + Two notes: first, in the example below the validity of + the certificate isn't verified, just the fact that one of the certs + matches the given signer, and, second, because we are in a streaming + mode the order of the operations is important. +

    +
    +                  CmsSignedDataParser     sp = new CmsSignedDataParser(encapSigData);
    +            
    +                  sp.GetSignedContent().Drain();
    +            
    +                  IX509Store              certs = sp.GetCertificates();
    +                  SignerInformationStore  signers = sp.GetSignerInfos();
    +            
    +                  foreach (SignerInformation signer in signers.GetSigners())
    +                  {
    +                      ArrayList       certList = new ArrayList(certs.GetMatches(signer.SignerID));
    +                      X509Certificate cert = (X509Certificate) certList[0];
    +            
    +                      Console.WriteLine("verify returns: " + signer.Verify(cert));
    +                  }
    +             
    + Note also: this class does not introduce buffering - if you are processing large files you should create + the parser with: +
    +                      CmsSignedDataParser     ep = new CmsSignedDataParser(new BufferedInputStream(encapSigData, bufSize));
    +              
    + where bufSize is a suitably large buffer size. +
    + + base constructor - with encapsulated content + + + base constructor + + @param signedContent the content that was signed. + @param sigData the signature object. + + + Return the version number for the SignedData object + + @return the version number + + + return the collection of signers that are associated with the + signatures for the message. + @throws CmsException + + + 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 org.bouncycastle.x509.NoSuchStoreException if the store type isn't available. + @exception CmsException if a general exception prevents creation of the X509Store + + + 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 + + + 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 + + + + Return the DerObjectIdentifier associated with the encapsulated + content info structure carried in the signed data. + + + + Replace the signerinformation store associated with the passed + in message contained in the stream original 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. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param signerInformationStore the new signer information store to use. + @param out the stream to Write the new signed data object to. + @return out. +
    + + Replace the certificate and CRL information associated with this + CMSSignedData object with the new one passed in. +

    + The output stream is returned unclosed. +

    + @param original the signed data stream to be used as a base. + @param certsAndCrls the new certificates and CRLs to be used. + @param out the stream to Write the new signed data object to. + @return out. + @exception CmsException if there is an error processing the CertStore +
    + + General class for generating a pkcs7-signature message stream. +

    + A simple example of usage. +

    +
    +                  IX509Store                   certs...
    +                  CmsSignedDataStreamGenerator gen = new CmsSignedDataStreamGenerator();
    +            
    +                  gen.AddSigner(privateKey, cert, CmsSignedDataStreamGenerator.DIGEST_SHA1);
    +            
    +                  gen.AddCertificates(certs);
    +            
    +                  Stream sigOut = gen.Open(bOut);
    +            
    +                  sigOut.Write(Encoding.UTF8.GetBytes("Hello World!"));
    +            
    +                  sigOut.Close();
    +             
    +
    + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + Set the underlying string size for encapsulated data + + @param bufferSize length of octet strings to buffer the data. + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer, specifying the digest encryption algorithm - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes - specifying digest + encryption algorithm. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer - no attributes other than the default ones will be + provided here. + @throws NoSuchProviderException + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + add a signer with extra signed/unsigned attributes. + @throws NoSuchAlgorithmException + @throws InvalidKeyException + + + generate a signed object that for a CMS Signed Data object + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature with the + default content type "data". If dataOutputStream is non null the data + being signed will be written to the stream as it is processed. + @param out stream the CMS object is to be written to. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + generate a signed object that for a CMS Signed Data + object - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + + + generate a signed object that for a CMS Signed Data + object using the given provider - if encapsulate is true a copy + of the message will be included in the signature. The content type + is set according to the OID represented by the string signedContentType. + @param out stream the CMS object is to be written to. + @param signedContentType OID for data to be signed. + @param encapsulate true if data should be encapsulated. + @param dataOutputStream output stream to copy the data being signed to. + + + Default type for the signed data. + + + Constructor allowing specific source of randomness + Instance of SecureRandom to use. + + + 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. + + + Add a store of precalculated signers to the generator. + + @param signerStore store of signers + + + 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. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + Return the digest encryption algorithm using one of the standard + JCA string representations rather than the algorithm identifier (if + possible). + + + Default authenticated attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + 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. + + + @param parameters source parameters + @return the populated attribute table + + + Default signed attributes generator. + + + Initialise to use all defaults + + + Initialise with some extra attributes or overrides. + + @param attributeTable initial attribute table to use. + + + Create a standard attribute table from the passed in parameters - this will + normally include contentType, signingTime, and messageDigest. If the constructor + using an AttributeTable was used, entries in it for contentType, signingTime, and + messageDigest will override the generated ones. + + @param parameters source parameters for table generation. + + @return a filled in Hashtable of attributes. + + + @param parameters source parameters + @return the populated attribute table + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a secret key known to the other side. + + + decrypt the content and return an input stream. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using key agreement. + + + decrypt the content and return an input stream. + + + 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. + + + decrypt the content and return it as a byte array. + + + a basic index for an originator. + + + Return the certificates stored in the underlying OriginatorInfo object. + + @return a Store of X509CertificateHolder objects. + + + Return the CRLs stored in the underlying OriginatorInfo object. + + @return a Store of X509CRLHolder objects. + + + Return the underlying ASN.1 object defining this SignerInformation object. + + @return a OriginatorInfo. + + + the RecipientInfo class for a recipient who has been sent a message + encrypted using a password. + + + return the object identifier for the key derivation algorithm, or null + if there is none present. + + @return OID for key derivation algorithm, if present. + + + decrypt the content and return an input stream. + + + + PKCS5 scheme-2 - password converted to bytes assuming ASCII. + + + + PKCS5 scheme-2 - password converted to bytes using UTF-8. + + + + Generate a RecipientInfo object for the given key. + + + A + + + A + + + A + + + + + * return the object identifier for the key encryption algorithm. + * + * @return OID for key encryption algorithm. + + + * 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. + + + 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. + + + 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. + + + Return the number of recipients in the collection. + + @return number of recipients identified. + + + Return all recipients in the collection + + @return a collection of recipients. + + + 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. + + + a basic index for a signer. + + + If the passed in flag is true, the signer signature will be based on the data, not + a collection of signed attributes, and no signed attributes will be included. + + @return the builder object + + + Provide a custom signed attribute generator. + + @param signedGen a generator of signed attributes. + @return the builder object + + + Provide a generator of unsigned attributes. + + @param unsignedGen a generator for signed attributes. + @return the builder object + + + Build a generator with the passed in X.509 certificate issuer and serial number as the signerIdentifier. + + @param contentSigner operator for generating the final signature in the SignerInfo with. + @param certificate X.509 certificate related to the contentSigner. + @return a SignerInfoGenerator + @throws OperatorCreationException if the generator cannot be built. + + + Build a generator with the passed in subjectKeyIdentifier as the signerIdentifier. If used you should + try to follow the calculation described in RFC 5280 section 4.2.1.2. + + @param signerFactory operator factory for generating the final signature in the SignerInfo with. + @param subjectKeyIdentifier key identifier to identify the public key for verifying the signature. + @return a SignerInfoGenerator + + + an expanded SignerInfo block from a CMS Signed message + + + Protected constructor. In some cases clients have their own idea about how to encode + the signed attributes and calculate the signature. This constructor is to allow developers + to deal with that by extending off the class and overridng methods like getSignedAttributes(). + + @param baseInfo the SignerInformation to base this one on. + + + return the version number for this objects underlying SignerInfo structure. + + + return the object identifier for the signature. + + + return the signature parameters, or null if there aren't any. + + + return the content digest that was calculated during verification. + + + return the object identifier for the signature. + + + return the signature/encryption algorithm parameters, or null if + there aren't any. + + + return a table of the signed attributes - indexed by + the OID of the attribute. + + + return a table of the unsigned attributes indexed by + the OID of the attribute. + + + return the encoded signature + + + Return a SignerInformationStore containing the counter signatures attached to this + signer. If no counter signatures are present an empty store is returned. + + + return the DER encoding of the signed attributes. + @throws IOException if an encoding error occurs. + + + verify that the given public key successfully handles and confirms the + signature associated with this signer. + + + 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. + + + Return the base ASN.1 CMS structure that this object contains. + + @return an object containing a CMS SignerInfo 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. + + + 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. + + + Create a store containing a single SignerInformation object. + + @param signerInfo the signer information to contain. + + + Create a store containing a collection of SignerInformation objects. + + @param signerInfos a collection signer information objects to contain. + + + 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. + + + The number of signers in the collection. + + + An ICollection of all signers in the collection + + + 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. + + + Basic generator that just returns a preconstructed attribute table + + + + Carrier for an authenticator control. + + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + + + + Return the token associated with this control (a UTF8String). + + + + + Create a CertificateRequestMessage from the passed in bytes. + + BER/DER encoding of the CertReqMsg structure. + + + + Return the underlying ASN.1 object defining this CertificateRequestMessage object. + + A CertReqMsg + + + + Return the certificate template contained in this message. + + a CertTemplate structure. + + + + Return whether or not this request has control values associated with it. + + true if there are control values present, false otherwise. + + + + Return whether or not this request has a specific type of control value. + + the type OID for the control value we are checking for. + true if a control value of type is present, false otherwise. + + + + Return a control value of the specified type. + + the type OID for the control value we are checking for. + the control value if present, null otherwise. + + + + Return whether or not this request message has a proof-of-possession field in it. + + true if proof-of-possession is present, false otherwise. + + + + Return the type of the proof-of-possession this request message provides. + + one of: popRaVerified, popSigningKey, popKeyEncipherment, popKeyAgreement + + + + Return whether or not the proof-of-possession (POP) is of the type popSigningKey and + it has a public key MAC associated with it. + + true if POP is popSigningKey and a PKMAC is present, false otherwise. + + + + Return whether or not a signing key proof-of-possession (POP) is valid. + + a provider that can produce content verifiers for the signature contained in this POP. + true if the POP is valid, false otherwise. + if there is a problem in verification or content verifier creation. + if POP not appropriate. + + + + Return the ASN.1 encoding of the certReqMsg we wrap. + + a byte array containing the binary encoding of the certReqMsg. + + + + Create a builder that makes EncryptedValue structures. + + wrapper a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + + + + + Create a builder that makes EncryptedValue structures with fixed length blocks padded using the passed in padder. + + a wrapper for key used to encrypt the actual data contained in the EncryptedValue. + encryptor an output encryptor to encrypt the actual data contained in the EncryptedValue. + padder a padder to ensure that the EncryptedValue created will always be a constant length. + + + + + Build an EncryptedValue structure containing the passed in pass phrase. + + a revocation pass phrase. + an EncryptedValue containing the encrypted pass phrase. + + + + + Build an EncryptedValue structure containing the certificate contained in + the passed in holder. + + a holder containing a certificate. + an EncryptedValue containing the encrypted certificate. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Build an EncryptedValue structure containing the private key contained in + the passed info structure. + + a PKCS#8 private key info structure. + an EncryptedValue containing an EncryptedPrivateKeyInfo structure. + on a failure to encrypt the data, or wrap the symmetric key for this value. + + + + + Generic interface for a CertificateRequestMessage control value. + + + + + Return the type of this control. + + + + + Return the value contained in this control object. + + + + + An encrypted value padder is used to make sure that prior to a value been + encrypted the data is padded to a standard length. + + + + + Return a byte array of padded data. + + the data to be padded. + a padded byte array containing data. + + + + + Return a byte array of with padding removed. + + the data to be padded. + an array containing the original unpadded data. + + + + + Basic constructor - build from an PKIArchiveOptions structure. + + the ASN.1 structure that will underlie this control. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_pkiArchiveOptions + + + + Return the underlying ASN.1 object. + + a PKIArchiveOptions structure. + + + + Return the archive control type, one of: encryptedPrivKey,keyGenParameters,or archiveRemGenPrivKey. + + the archive control type. + + + + Return whether this control contains enveloped data. + + true if the control contains enveloped data, false otherwise. + + + + Return the enveloped data structure contained in this control. + + a CMSEnvelopedData object. + + + + Basic constructor - specify the contents of the PKIArchiveControl structure. + + the private key to be archived. + the general name to be associated with the private key. + + + + Add a recipient generator to this control. + recipient generator created for a specific recipient. + this builder object. + + + Build the PKIArchiveControl using the passed in encryptor to encrypt its contents. + a suitable content encryptor. + a PKIArchiveControl object. + + + + Default, IterationCount = 1000, OIW=IdSha1, Mac=HmacSHA1 + + + + + Defaults with IPKMacPrimitivesProvider + + + + + + Create. + + The Mac provider + Digest Algorithm Id + Mac Algorithm Id + + + + Create a PKMAC builder enforcing a ceiling on the maximum iteration count. + + supporting calculator + max allowable value for iteration count. + + + Set the salt length in octets. + + @param saltLength length in octets of the salt to be generated. + @return the generator + + + + Set the iteration count. + + the iteration count. + this + if iteration count is less than 100 + + + + Set PbmParameters + + The parameters. + this + + + + The Secure random + + The random. + this + + + + Build an IMacFactory. + + The password. + IMacFactory + + + + Basic constructor - build from a UTF-8 string representing the token. + + UTF-8 string representing the token. + + + + Basic constructor - build from a string representing the token. + + string representing the token. + + + + Return the type of this control. + + CRMFObjectIdentifiers.id_regCtrl_regToken + + + + Return the token associated with this control (a UTF8String). + + a UTF8String. + + + a Diffie-Hellman key exchange engine. +

    + 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.

    +

    + 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.

    +
    + + calculate our initial message. + + + 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. + + + a Diffie-Hellman key agreement class. +

    + note: This is only the basic algorithm, it doesn't take advantage of + long term public keys if they are available. See the DHAgreement class + for a "better" implementation.

    +
    + + given a short term public key from a given party calculate the next + message in the agreement sequence. + + + Standard Diffie-Hellman groups from various IETF specifications. + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + + Existence of a "hidden SNFS" backdoor cannot be ruled out. see https://eprint.iacr.org/2016/961.pdf . + + + + P1363 7.2.1 ECSVDP-DH + + ECSVDP-DH is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version. It is based on the work of [DH76], [Mil86], + and [Kob87]. This primitive derives a shared secret value from one + party's private key and another party's public key, where both have + the same set of EC domain parameters. If two parties correctly + execute this primitive, they will produce the same output. This + primitive can be invoked by a scheme to derive a shared secret key; + specifically, it may be used with the schemes ECKAS-DH1 and + DL/ECKAS-DH2. It assumes that the input keys are valid (see also + Section 7.2.2). + + + P1363 7.2.2 ECSVDP-DHC + + ECSVDP-DHC is Elliptic Curve Secret Value Derivation Primitive, + Diffie-Hellman version with cofactor multiplication. It is based on + the work of [DH76], [Mil86], [Kob87], [LMQ98] and [Kal98a]. This + primitive derives a shared secret value from one party's private key + and another party's public key, where both have the same set of EC + domain parameters. If two parties correctly execute this primitive, + they will produce the same output. This primitive can be invoked by a + scheme to derive a shared secret key; specifically, it may be used + with the schemes ECKAS-DH1 and DL/ECKAS-DH2. It does not assume the + validity of the input public key (see also Section 7.2.1). +

    + Note: As stated P1363 compatibility mode with ECDH can be preset, and + in this case the implementation doesn't have a ECDH compatibility mode + (if you want that just use ECDHBasicAgreement and note they both implement + BasicAgreement!).

    +
    + + + A participant in a Password Authenticated Key Exchange by Juggling (J-PAKE) exchange. + + The J-PAKE exchange is defined by Feng Hao and Peter Ryan in the paper + + "Password Authenticated Key Exchange by Juggling, 2008." + + The J-PAKE protocol is symmetric. + There is no notion of a client or server, but rather just two participants. + An instance of JPakeParticipant represents one participant, and + is the primary interface for executing the exchange. + + To execute an exchange, construct a JPakeParticipant on each end, + and call the following 7 methods + (once and only once, in the given order, for each participant, sending messages between them as described): + + CreateRound1PayloadToSend() - and send the payload to the other participant + ValidateRound1PayloadReceived(JPakeRound1Payload) - use the payload received from the other participant + CreateRound2PayloadToSend() - and send the payload to the other participant + ValidateRound2PayloadReceived(JPakeRound2Payload) - use the payload received from the other participant + CalculateKeyingMaterial() + CreateRound3PayloadToSend(BigInteger) - and send the payload to the other participant + ValidateRound3PayloadReceived(JPakeRound3Payload, BigInteger) - use the payload received from the other participant + + Each side should derive a session key from the keying material returned by CalculateKeyingMaterial(). + The caller is responsible for deriving the session key using a secure key derivation function (KDF). + + Round 3 is an optional key confirmation process. + If you do not execute round 3, then there is no assurance that both participants are using the same key. + (i.e. if the participants used different passwords, then their session keys will differ.) + + If the round 3 validation succeeds, then the keys are guaranteed to be the same on both sides. + + The symmetric design can easily support the asymmetric cases when one party initiates the communication. + e.g. Sometimes the round1 payload and round2 payload may be sent in one pass. + Also, in some cases, the key confirmation payload can be sent together with the round2 payload. + These are the trivial techniques to optimize the communication. + + The key confirmation process is implemented as specified in + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + This class is stateful and NOT threadsafe. + Each instance should only be used for ONE complete J-PAKE exchange + (i.e. a new JPakeParticipant should be constructed for each new J-PAKE exchange). + + + + + Convenience constructor for a new JPakeParticipant that uses + the JPakePrimeOrderGroups#NIST_3072 prime order group, + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + + + + Convenience constructor for a new JPakeParticipant that uses + a SHA-256 digest, and a default SecureRandom implementation. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + + + + Constructor for a new JPakeParticipant. + + After construction, the State state will be STATE_INITIALIZED. + + Throws NullReferenceException if any argument is null. Throws + ArgumentException if password is empty. + + Unique identifier of this participant. + The two participants in the exchange must NOT share the same id. + Shared secret. + A defensive copy of this array is made (and cleared once CalculateKeyingMaterial() is called). + Caller should clear the input password as soon as possible. + Prime order group. See JPakePrimeOrderGroups for standard groups. + Digest to use during zero knowledge proofs and key confirmation + (SHA-256 or stronger preferred). + Source of secure random data for x1 and x2, and for the zero knowledge proofs. + + + + Gets the current state of this participant. + See the STATE_* constants for possible values. + + + + + Creates and returns the payload to send to the other participant during round 1. + + After execution, the State state} will be STATE_ROUND_1_CREATED}. + + + + + Validates the payload received from the other participant during round 1. + + Must be called prior to CreateRound2PayloadToSend(). + + After execution, the State state will be STATE_ROUND_1_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException + if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 2. + + ValidateRound1PayloadReceived(JPakeRound1Payload) must be called prior to this method. + + After execution, the State state will be STATE_ROUND_2_CREATED. + + Throws InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Validates the payload received from the other participant during round 2. + Note that this DOES NOT detect a non-common password. + The only indication of a non-common password is through derivation + of different keys (which can be detected explicitly by executing round 3 and round 4) + + Must be called prior to CalculateKeyingMaterial(). + + After execution, the State state will be STATE_ROUND_2_VALIDATED. + + Throws CryptoException if validation fails. Throws + InvalidOperationException if called prior to ValidateRound1PayloadReceived(JPakeRound1Payload), or multiple times + + + + + Calculates and returns the key material. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPakeParticipant). + + The keying material will be identical for each participant if and only if + each participant's password is the same. i.e. If the participants do not + share the same password, then each participant will derive a different key. + Therefore, if you immediately start using a key derived from + the keying material, then you must handle detection of incorrect keys. + If you want to handle this detection explicitly, you can optionally perform + rounds 3 and 4. See JPakeParticipant for details on how to execute + rounds 3 and 4. + + The keying material will be in the range [0, p-1]. + + ValidateRound2PayloadReceived(JPakeRound2Payload) must be called prior to this method. + + As a side effect, the internal password array is cleared, since it is no longer needed. + + After execution, the State state will be STATE_KEY_CALCULATED. + + Throws InvalidOperationException if called prior to ValidateRound2PayloadReceived(JPakeRound2Payload), + or if called multiple times. + + + + + Creates and returns the payload to send to the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state} will be STATE_ROUND_3_CREATED. + Throws InvalidOperationException if called prior to CalculateKeyingMaterial, or multiple + times. + + The keying material as returned from CalculateKeyingMaterial(). + + + + Validates the payload received from the other participant during round 3. + + See JPakeParticipant for more details on round 3. + + After execution, the State state will be STATE_ROUND_3_VALIDATED. + + Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to + CalculateKeyingMaterial or multiple times + + The round 3 payload received from the other participant. + The keying material as returned from CalculateKeyingMaterial(). + + + + A pre-computed prime order group for use during a J-PAKE exchange. + + Typically a Schnorr group is used. In general, J-PAKE can use any prime order group + that is suitable for public key cryptography, including elliptic curve cryptography. + + See JPakePrimeOrderGroups for convenient standard groups. + + NIST publishes + many groups that can be used for the desired level of security. + + + + + Constructs a new JPakePrimeOrderGroup. + + In general, you should use one of the pre-approved groups from + JPakePrimeOrderGroups, rather than manually constructing one. + + The following basic checks are performed: + + p-1 must be evenly divisible by q + g must be in [2, p-1] + g^q mod p must equal 1 + p must be prime (within reasonably certainty) + q must be prime (within reasonably certainty) + + The prime checks are performed using BigInteger#isProbablePrime(int), + and are therefore subject to the same probability guarantees. + + These checks prevent trivial mistakes. + However, due to the small uncertainties if p and q are not prime, + advanced attacks are not prevented. + Use it at your own risk. + + Throws NullReferenceException if any argument is null. Throws + InvalidOperationException is any of the above validations fail. + + + + + Constructor used by the pre-approved groups in JPakePrimeOrderGroups. + These pre-approved groups can avoid the expensive checks. + User-specified groups should not use this constructor. + + + + + Standard pre-computed prime order groups for use by J-PAKE. + (J-PAKE can use pre-computed prime order groups, same as DSA and Diffie-Hellman.) +

    + This class contains some convenient constants for use as input for + constructing {@link JPAKEParticipant}s. +

    + The prime order groups below are taken from Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB), + and from the prime order groups + published by NIST. +

    +
    + + + From Sun's JDK JavaDoc (docs/guide/security/CryptoSpec.html#AppB) + 1024-bit p, 160-bit q and 1024-bit g for 80-bit security. + + + + + From NIST. + 2048-bit p, 224-bit q and 2048-bit g for 112-bit security. + + + + + From NIST. + 3072-bit p, 256-bit q and 3072-bit g for 128-bit security. + + + + + The payload sent/received during the first round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance of this payload to + the other. The payload to send should be created via + JPAKEParticipant.CreateRound1PayloadToSend(). + + Each participant must also validate the payload received from the other. + The received payload should be validated via + JPAKEParticipant.ValidateRound1PayloadReceived(JPakeRound1Payload). + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of g^x1 + + + + + The value of g^x2 + + + + + The zero knowledge proof for x1. + + This is a two element array, containing {g^v, r} for x1. + + + + + The zero knowledge proof for x2. + + This is a two element array, containing {g^v, r} for x2. + + + + + The payload sent/received during the second round of a J-PAKE exchange. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound2PayloadToSend() + + Each JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound2PayloadReceived(JPakeRound2Payload) + + + + + The id of the JPAKEParticipant who created/sent this payload. + + + + + The value of A, as computed during round 2. + + + + + The zero knowledge proof for x2 * s. + + This is a two element array, containing {g^v, r} for x2 * s. + + + + + The payload sent/received during the optional third round of a J-PAKE exchange, + which is for explicit key confirmation. + + Each JPAKEParticipant creates and sends an instance + of this payload to the other JPAKEParticipant. + The payload to send should be created via + JPAKEParticipant#createRound3PayloadToSend(BigInteger) + + Eeach JPAKEParticipant must also validate the payload + received from the other JPAKEParticipant. + The received payload should be validated via + JPAKEParticipant#validateRound3PayloadReceived(JPakeRound3Payload, BigInteger) + + + + + The id of the {@link JPAKEParticipant} who created/sent this payload. + + + + + The value of MacTag, as computed by round 3. + + See JPAKEUtil#calculateMacTag(string, string, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, org.bouncycastle.crypto.Digest) + + + + + Primitives needed for a J-PAKE exchange. + + The recommended way to perform a J-PAKE exchange is by using + two JPAKEParticipants. Internally, those participants + call these primitive operations in JPakeUtilities. + + The primitives, however, can be used without a JPAKEParticipant if needed. + + + + + Return a value that can be used as x1 or x3 during round 1. + The returned value is a random value in the range [0, q-1]. + + + + + Return a value that can be used as x2 or x4 during round 1. + The returned value is a random value in the range [1, q-1]. + + + + + Converts the given password to a BigInteger + for use in arithmetic calculations. + + + + + Calculate g^x mod p as done in round 1. + + + + + Calculate ga as done in round 2. + + + + + Calculate x2 * s as done in round 2. + + + + + Calculate A as done in round 2. + + + + + Calculate a zero knowledge proof of x using Schnorr's signature. + The returned array has two elements {g^v, r = v-x*h} for x. + + + + + Validates that g^x4 is not 1. + throws CryptoException if g^x4 is 1 + + + + + Validates that ga is not 1. + + As described by Feng Hao... + Alice could simply check ga != 1 to ensure it is a generator. + In fact, as we will explain in Section 3, (x1 + x3 + x4 ) is random over Zq even in the face of active attacks. + Hence, the probability for ga = 1 is extremely small - on the order of 2^160 for 160-bit q. + + throws CryptoException if ga is 1 + + + + + Validates the zero knowledge proof (generated by + calculateZeroKnowledgeProof(BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, string, Digest, SecureRandom) + is correct. + + throws CryptoException if the zero knowledge proof is not correct + + + + + Calculates the keying material, which can be done after round 2 has completed. + A session key must be derived from this key material using a secure key derivation function (KDF). + The KDF used to derive the key is handled externally (i.e. not by JPAKEParticipant). + + KeyingMaterial = (B/g^{x2*x4*s})^x2 + + + + + Validates that the given participant ids are not equal. + (For the J-PAKE exchange, each participant must use a unique id.) + + Throws CryptoException if the participantId strings are equal. + + + + + Validates that the given participant ids are equal. + This is used to ensure that the payloads received from + each round all come from the same participant. + + + + + Validates that the given object is not null. + throws NullReferenceException if the object is null. + + object in question + name of the object (to be used in exception message) + + + + Calculates the MacTag (to be used for key confirmation), as defined by + NIST SP 800-56A Revision 1, + Section 8.2 Unilateral Key Confirmation for Key Agreement Schemes. + + MacTag = HMAC(MacKey, MacLen, MacData) + MacKey = H(K || "JPAKE_KC") + MacData = "KC_1_U" || participantId || partnerParticipantId || gx1 || gx2 || gx3 || gx4 + + Note that both participants use "KC_1_U" because the sender of the round 3 message + is always the initiator for key confirmation. + + HMAC = {@link HMac} used with the given {@link Digest} + H = The given {@link Digest} + MacLen = length of MacTag + + + + + Calculates the MacKey (i.e. the key to use when calculating the MagTag for key confirmation). + + MacKey = H(K || "JPAKE_KC") + + + + + Validates the MacTag received from the partner participant. + + throws CryptoException if the participantId strings are equal. + + + + Generator for Concatenation Key Derivation Function defined in NIST SP 800-56A, Sect 5.8.1 + + + @param digest the digest to be used as the source of generated bytes + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + RFC 2631 Diffie-hellman KEK derivation function. + + + X9.63 based key derivation function for ECDH CMS. + + + + SM2 Key Exchange protocol - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02 + + + + 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" + + + 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 + + + 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 + + + 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 + + + Computes the client evidence message M1 using the previously received values. + To be called after calculating the secret S. + @return M1: the client side generated evidence message + @throws CryptoException + + + Authenticates the server evidence message M2 received and saves it only if correct. + @param M2: the server side generated evidence message + @return A boolean indicating if the server message M2 was the expected one. + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after verifying the server evidence message M2. + @return Key: the mutually authenticated symmetric session key + @throws CryptoException + + + 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" + + + 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 + + + Generates the server's credentials that are to be sent to the client. + @return The server's public value to the client + + + 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 + + + Authenticates the received client evidence message M1 and saves it only if correct. + To be called after calculating the secret S. + @param M1: the client side generated evidence message + @return A boolean indicating if the client message M1 was the expected one. + @throws CryptoException + + + Computes the server evidence message M2 using the previously verified values. + To be called after successfully verifying the client evidence message M1. + @return M2: the server side generated evidence message + @throws CryptoException + + + Computes the final session key as a result of the SRP successful mutual authentication + To be called after calculating the server evidence message M2. + @return Key: the mutual authenticated symmetric session key + @throws CryptoException + + + Computes the client evidence message (M1) according to the standard routine: + M1 = H( A | B | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param B The public server value + @param S The secret calculated by both sides + @return M1 The calculated client evidence message + + + Computes the server evidence message (M2) according to the standard routine: + M2 = H( A | M1 | S ) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param A The public client value + @param M1 The client evidence message + @param S The secret calculated by both sides + @return M2 The calculated server evidence message + + + Computes the final Key according to the standard routine: Key = H(S) + @param digest The Digest used as the hashing function H + @param N Modulus used to get the pad length + @param S The secret calculated by both sides + @return + + + Generates new SRP verifier for user + + + 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. + + + 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 + + + a holding class for public/private parameter pairs. + + + basic constructor. + + @param publicParam a public key parameters object. + @param privateParam the corresponding private key parameters. + + + return the public key parameters. + + @return the public key parameters. + + + return the private key parameters. + + @return the private key parameters. + + + The AEAD block ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The AEAD ciphers already handle buffering internally, so this class + just takes care of implementing IBufferedCipher methods. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + a buffer wrapper for an asymmetric block cipher, allowing input + to be accumulated in a piecemeal fashion until final processing. + + + base constructor. + + @param cipher the cipher this buffering object wraps. + + + return the amount of data sitting in the buffer. + + @return the amount of data sitting in the buffer. + + + 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. + + + 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. + + + Reset the buffer + + + A wrapper class that allows block ciphers to be used to process data in + a piecemeal fashion. The BufferedBlockCipher outputs a block only when the + buffer is full and more data is being added, or on a doFinal. +

    + Note: in the case where the underlying cipher is either a CFB cipher or an + OFB one the last block may not be a multiple of the block size. +

    +
    + + constructor for subclasses + + + Create a buffered block cipher without padding. + + @param cipher the underlying block cipher this buffering object wraps. + false otherwise. + + + 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. + + + return the blocksize for the underlying cipher. + + @return the blocksize for the underlying cipher. + + + 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. + + + return the 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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, or the input is not block size aligned and should be. + @exception InvalidOperationException if the underlying cipher is not + initialised. + @exception InvalidCipherTextException if padding is expected and not found. + @exception DataLengthException if the input is not block size + aligned. + + + Reset the buffer and cipher. After resetting the object is in the same + state as it was after the last init (if there was one). + + + The base class for symmetric, or secret, cipher key generators. + + + initialise the key generator. + + @param param the parameters to be used for key generation + + + Generate a secret key. + + @return a byte array containing the key value. + + + this exception is thrown if a buffer that is meant to have output + copied into it turns out to be too short, or if we've been given + insufficient input. In general this exception will Get thrown rather + than an ArrayOutOfBounds exception. + + + base constructor. + + + create a DataLengthException with the given message. + + @param message the message to be carried with the exception. + + + + Basic sized constructor - size in bits. + + @param digestSize size of the digest in bits + + + Blake2b for authentication ("Prefix-MAC mode"). + After calling the doFinal() method, the key will + remain to be used for further computations of + this instance. + The key can be overwritten using the clearKey() method. + + @param key A key up to 64 bytes or null + + + Blake2b with key, required digest length (in bytes), salt and personalization. + After calling the doFinal() method, the key, the salt and the personal string + will remain and might be used for further computations with this instance. + The key can be overwritten using the clearKey() method, the salt (pepper) + can be overwritten using the clearSalt() method. + + @param key A key up to 64 bytes or null + @param digestLength from 1 up to 64 bytes + @param salt 16 bytes or null + @param personalization 16 bytes or null + + + update the message digest with a single byte. + + @param b the input byte to be entered. + + + update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to it's initial state. + The key, the salt and the personal string will + remain for further computations. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies it's compression + function to. + + @return byte length of the digests internal buffer. + + + Overwrite the key + if it is no longer used (zeroization) + + + Overwrite the salt (pepper) if it + is secret and no longer used (zeroization) + + + Implementation of the cryptographic hash function BLAKE2s. +

    + BLAKE2s offers a built-in keying mechanism to be used directly + for authentication ("Prefix-MAC") rather than a HMAC construction. +

    + BLAKE2s offers a built-in support for a salt for randomized hashing + and a personal string for defining a unique hash function for each application. +

    + BLAKE2s is optimized for 32-bit platforms and produces digests of any size + between 1 and 32 bytes. + + + BLAKE2s Initialization Vector + + + + Message word permutations + + + + Whenever this buffer overflows, it will be processed in the Compress() + function. For performance issues, long messages will not use this buffer. + + + Position of last inserted byte + + + + Internal state, in the BLAKE2 paper it is called v + + + + State vector, in the BLAKE2 paper it is called h + + + + holds least significant bits of counter + + + + holds most significant bits of counter + + + + finalization flag, for last block: ~0 + + + + BLAKE2s-256 for hashing. + + + BLAKE2s for hashing. + + @param digestBits the desired digest length in bits. Must be a multiple of 8 and less than 256. + + + BLAKE2s for authentication ("Prefix-MAC mode"). +

    + After calling the doFinal() method, the key will remain to be used for + further computations of this instance. The key can be overwritten using + the clearKey() method. + + @param key a key up to 32 bytes or null + + + BLAKE2s with key, required digest length, salt and personalization. +

    + After calling the doFinal() method, the key, the salt and the personal + string will remain and might be used for further computations with this + instance. The key can be overwritten using the clearKey() method, the + salt (pepper) can be overwritten using the clearSalt() method. + + @param key a key up to 32 bytes or null + @param digestBytes from 1 up to 32 bytes + @param salt 8 bytes or null + @param personalization 8 bytes or null + + + Update the message digest with a single byte. + + @param b the input byte to be entered. + + + Update the message digest with a block of bytes. + + @param message the byte array containing the data. + @param offset the offset into the byte array where the data starts. + @param len the length of the data. + + + Close the digest, producing the final digest value. The doFinal() call + leaves the digest reset. Key, salt and personal string remain. + + @param out the array the digest is to be copied into. + @param outOffset the offset into the out array the digest is to start at. + + + Reset the digest back to its initial state. The key, the salt and the + personal string will remain for further computations. + + + Return the algorithm name. + + @return the algorithm name + + + 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. + + + Return the size in bytes of the internal buffer the digest applies its + compression function to. + + @return byte length of the digest's internal buffer. + + + Overwrite the key if it is no longer used (zeroization). + + + Overwrite the salt (pepper) if it is secret and no longer used + (zeroization). + + + implementation of Ukrainian DSTU 7564 hash function + + + base implementation of MD4 family style digest as outlined in + "Handbook of Applied Cryptography", pages 344 - 347. + + + implementation of GOST R 34.11-94 + + + Standard constructor + + + Constructor to allow use of a particular sbox with GOST28147 + @see GOST28147Engine#getSBox(String) + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + +

    + Implementation of Keccak based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + +
    + + Return the size of block that the compression function is applied to in bytes. + + @return internal byte length of a block. + + + Base class for SHA-384 and SHA-512. + + + Constructor for variable length word + + + Copy constructor. We are using copy constructors in place + of the object.Clone() interface as this interface is not + supported by J2ME. + + + adjust the byte counts so that byteCount2 represents the + upper long (less 3 bits) word of the byte count. + + + implementation of MD2 + as outlined in RFC1319 by B.Kaliski from RSA Laboratories April 1992 + + + return the algorithm name + + @return the algorithm name + + + Close the digest, producing the final digest value. The doFinal + call leaves the digest reset. + + @param out the array the digest is to be copied into. + @param outOff the offset into the out array the digest is to start at. + + + reset the digest back to it's initial state. + + + update the message digest with a single byte. + + @param in the input byte to be entered. + + + update the message digest with a block of bytes. + + @param in 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. + + + implementation of MD4 as RFC 1320 by R. Rivest, MIT Laboratory for + Computer Science and RSA Data Security, Inc. +

    + NOTE: This algorithm is only included for backwards compatibility + with legacy applications, it's not secure, don't use it for anything new!

    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of MD5 as outlined in "Handbook of Applied Cryptography", pages 346 - 347. + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + Wrapper removes exposure to the IMemoable interface on an IDigest implementation. + + + Base constructor. + + @param baseDigest underlying digest to use. + @exception IllegalArgumentException if baseDigest is null + + + implementation of RipeMD128 + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + implementation of RipeMD see, + http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD256.

    +

    Note: this algorithm offers the same level of security as RipeMD128.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + +

    Implementation of RipeMD 320.

    +

    Note: this algorithm offers the same level of security as RipeMD160.

    +
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + + reset the chaining variables to the IV values. + + + implementation of SHA-1 as outlined in "Handbook of Applied Cryptography", pages 346 - 349. + + It is interesting to ponder why the, apart from the extra IV, the other difference here from MD5 + is the "endianness" of the word processing! + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + SHA-224 as described in RFC 3874 +
    +                    block  word  digest
    +            SHA-1   512    32    160
    +            SHA-224 512    32    224
    +            SHA-256 512    32    256
    +            SHA-384 1024   64    384
    +            SHA-512 1024   64    512
    +            
    +
    + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-256. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Draft FIPS 180-2 implementation of SHA-384. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHA-3 based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Draft FIPS 180-2 implementation of SHA-512. Note: As this is + based on a draft this implementation is subject to change. + +
    +                     block  word  digest
    +             SHA-1   512    32    160
    +             SHA-256 512    32    256
    +             SHA-384 1024   64    384
    +             SHA-512 1024   64    512
    +             
    +
    + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + FIPS 180-4 implementation of SHA-512/t + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + + Implementation of SHAKE based on following KeccakNISTInterface.c from http://keccak.noekeon.org/ + + + Following the naming conventions used in the C source code to enable easy review of the implementation. + + + + Wrapper class that reduces the output length of a particular digest to + only the first n bytes of the digest function. + + + 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(). + + + + Implementation of the Skein parameterised hash function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + Implementation of the Skein family of parameterised hash functions in 256, 512 and 1024 bit block + sizes, based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation is the basis for and , implementing the + parameter based configuration system that allows Skein to be adapted to multiple applications.
    + Initialising the engine with allows standard and arbitrary parameters to + be applied during the Skein hash function. +

    + Implemented: +

      +
    • 256, 512 and 1024 bit internal states.
    • +
    • Full 96 bit input length.
    • +
    • Parameters defined in the Skein specification, and arbitrary other pre and post message + parameters.
    • +
    • Arbitrary output size in 1 byte intervals.
    • +
    +

    + Not implemented: +

      +
    • Sub-byte length input (bit padding).
    • +
    • Tree hashing.
    • +
    +
    + +
    + + + 256 bit block size - Skein-256 + + + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + The parameter type for the Skein key. + + + The parameter type for the Skein configuration block. + + + The parameter type for the message. + + + The parameter type for the output transformation. + + + Precalculated UBI(CFG) states for common state/output combinations without key or other + pre-message params. + + + Point at which position might overflow long, so switch to add with carry logic + + + Bit 127 = final + + + Bit 126 = first + + + UBI uses a 128 bit tweak + + + Whether 64 bit position exceeded + + + Advances the position in the tweak by the specified value. + + + The Unique Block Iteration chaining mode. + + + Buffer for the current block of message data + + + Offset into the current message block + + + Buffer for message words for feedback into encrypted block + + + Underlying Threefish tweakable block cipher + + + Size of the digest output, in bytes + + + The current chaining/state value + + + The initial state value + + + The (optional) key parameter + + + Parameters to apply prior to the message + + + Parameters to apply after the message, but prior to output + + + The current UBI operation + + + Buffer for single byte update method + + + + Constructs a Skein digest with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/digest size to produce in bits, which must be an integral number of + bytes. + + + + Creates a SkeinEngine as an exact copy of an existing instance. + + + + + Initialises the Skein engine with the provided parameters. See for + details on the parameterisation of the Skein hash function. + + the parameters to apply to this engine, or null to use no parameters. + + + Calculate the initial (pre message block) chaining state. + + + + Reset the engine to the initial state (with the key and any pre-message parameters , ready to + accept message input. + + + + + Implementation of Chinese SM3 digest as described at + http://tools.ietf.org/html/draft-shen-sm3-hash-00 + and at .... ( Chinese PDF ) + + + The specification says "process a bit stream", + but this is written to process bytes in blocks of 4, + meaning this will process 32-bit word groups. + But so do also most other digest specifications, + including the SHA-256 which was a origin for + this specification. + + + + + Standard constructor + + + + + Copy constructor. This will copy the state of the provided + message digest. + + + + + reset the chaining variables + + + + implementation of Tiger based on: + + http://www.cs.technion.ac.il/~biham/Reports/Tiger + + + Standard constructor + + + Copy constructor. This will copy the state of the provided + message digest. + + + reset the chaining variables + + + Implementation of WhirlpoolDigest, based on Java source published by Barreto + and Rijmen. + + + + Copy constructor. This will copy the state of the provided message + digest. + + + Reset the chaining variables + + + return the X9ECParameters object for the named curve represented by + the passed in object identifier. Null if the curve isn't present. + + @param oid an object identifier representing a named curve, if present. + + + return the object identifier signified by the passed in name. Null + if there is no object identifier associated with name. + + @return the object identifier associated with name, if present. + + + return the named curve name represented by the given object identifier. + + + returns an enumeration containing the name strings for curves + contained in this structure. + + + 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. + + + 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. + + + return the maximum possible size for the output. + + + set the number of bits in the next message to be treated as + pad bits. + + + retrieve the number of pad bits in the last decoded message. + + + @exception InvalidCipherTextException if the decrypted block is not a valid ISO 9796 bit string + + + Optimal Asymmetric Encryption Padding (OAEP) - see PKCS 1 V 2. + + + @exception InvalidCipherTextException if the decrypted block turns out to + be badly formatted. + + + int to octet string. + + + mask generator function, as described in PKCS1v2. + + + this does your basic Pkcs 1 v1.5 padding - whether or not you should be using this + depends on your application - see Pkcs1 Version 2 for details. + + + some providers fail to include the leading zero in PKCS1 encoded blocks. If you need to + work with one of these set the system property Org.BouncyCastle.Pkcs1.Strict to false. + + + The same effect can be achieved by setting the static property directly +

    + The static property is checked during construction of the encoding object, it is set to + true by default. +

    +
    + + Basic constructor. + + @param cipher + + + Constructor for decryption with a fixed plaintext length. + + @param cipher The cipher to use for cryptographic operation. + @param pLen Length of the expected plaintext. + + + Constructor for decryption with a fixed plaintext length and a fallback + value that is returned, if the padding is incorrect. + + @param cipher + The cipher to use for cryptographic operation. + @param fallback + The fallback value, we don't to a arraycopy here. + + + Checks if the argument is a correctly PKCS#1.5 encoded Plaintext + for encryption. + + @param encoded The Plaintext. + @param pLen Expected length of the plaintext. + @return Either 0, if the encoding is correct, or -1, if it is incorrect. + + + Decode PKCS#1.5 encoding, and return a random value if the padding is not correct. + + @param in The encrypted block. + @param inOff Offset in the encrypted block. + @param inLen Length of the encrypted block. + @param pLen Length of the desired output. + @return The plaintext without padding, or a random value if the padding was incorrect. + @throws InvalidCipherTextException + + + @exception InvalidCipherTextException if the decrypted block is not in Pkcs1 format. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first. + + The slowest version uses no static tables at all and computes the values in each round. +

    +

    + This file contains the middle performance version with 2Kbytes of static tables for round precomputation. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael)), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor), they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations), 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each), for a total of 2Kbytes), + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values in each round +

    +

    + This file contains the fast version with 8Kbytes of static tables for round precomputation +

    + + Unfortunately this class has a few side channel issues. + In an environment where encryption/decryption may be closely observed it should not be used. + +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + an implementation of the AES (Rijndael), from FIPS-197. +

    + For further details see: http://csrc.nist.gov/encryption/aes/. + + This implementation is based on optimizations from Dr. Brian Gladman's paper and C code at + http://fp.gladman.plus.com/cryptography_technology/rijndael/ + + There are three levels of tradeoff of speed vs memory + Because java has no preprocessor, they are written as three separate classes from which to choose + + The fastest uses 8Kbytes of static tables to precompute round calculations, 4 256 word tables for encryption + and 4 for decryption. + + The middle performance version uses only one 256 word table for each, for a total of 2Kbytes, + adding 12 rotate operations per round to compute the values contained in the other tables from + the contents of the first + + The slowest version uses no static tables at all and computes the values + in each round. +

    +

    + This file contains the slowest performance version with no static tables + for round precomputation, but it has the smallest foot print. +

    +
    + + Calculate the necessary round keys + The number of calculations depends on key size and block size + AES specified a fixed block size of 128 bits and key sizes 128/192/256 bits + This code is written assuming those are the only possible values + + + default constructor - 128 bit block size. + + + initialise an AES 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. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap Specification. +

    + For further details see: http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + 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. + + + 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. + + + apply the encryption cycle to each value pair in the table. + + + 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. + + + 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. + + + Camellia - based on RFC 3713. + + + Camellia - based on RFC 3713, smaller implementation, about half the size of CamelliaEngine. + + + + An implementation of the Camellia key wrapper based on RFC 3657/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3657.txt. + + + + 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. + + + 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. + + + 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 + + + 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 + + + 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 + + + + 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 + + + + 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 + + + + 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 + + + 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. + + + 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 + + + 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 + + + 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 + + + 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 + + +

    + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + +
    + + + Creates a 20 rounds ChaCha engine. + + + + + Implementation of Daniel J. Bernstein's ChaCha stream cipher. + + + + + Creates a 20 rounds ChaCha engine. + + + + + Creates a ChaCha engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + + ChaCha function. + + The number of ChaCha rounds to execute + The input words. + The ChaCha state to modify. + + + A class that provides a basic DESede (or Triple DES) engine. + + + initialise a DESede 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. + + + * Wrap keys according to + * + * draft-ietf-smime-key-wrap-01.txt. + *

    + * Note: + *

      + *
    • this is based on a draft, and as such is subject to change - don't use this class for anything requiring long term storage.
    • + *
    • 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.
    • + *
    + *

    +
    + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + A class that provides a basic DES engine. + + + 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. + + + what follows is mainly taken from "Applied Cryptography", by + Bruce Schneier, however it also bears great resemblance to Richard + Outerbridge's D3DES... + + + 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!). + + + the DES engine. + + + implementation of DSTU 7624 (Kalyna) + + + this does your basic ElGamal algorithm. + + + initialise the ElGamal engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary ElGamal key parameters. + + + 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. + + + 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. + + + 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. + + + implementation of GOST 28147-89 + + + standard constructor. + + + initialise an Gost28147 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. + + + Return the S-Box associated with SBoxName + @param sBoxName name of the S-Box + @return byte array representing the S-Box + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc128_p3.pdf +

    + 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 +

    +
    + + 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). + + + 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. +

    + http://www.ecrypt.eu.org/stream/p3ciphers/hc/hc256_p3.pdf +

    + 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 +

    +
    + + 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). + + + A class that provides a basic International Data Encryption Algorithm (IDEA) engine. +

    + This implementation is based on the "HOWTO: INTERNATIONAL DATA ENCRYPTION ALGORITHM" + implementation summary by Fauzan Mirza (F.U.Mirza@sheffield.ac.uk). (barring 1 typo at the + end of the MulInv function!). +

    +

    + It can be found at ftp://ftp.funet.fi/pub/crypt/cryptography/symmetric/idea/ +

    +

    + Note: This algorithm was patented in the USA, Japan and Europe. These patents expired in 2011/2012. +

    +
    + + standard constructor. + + + initialise an IDEA 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. + + + return x = x * y where the multiplication is done modulo + 65537 (0x10001) (as defined in the IDEA specification) and + a zero input is taken to be 65536 (0x10000). + + @param x the x value + @param y the y value + @return x = x * y + + + The following function is used to expand the user key to the encryption + subkey. The first 16 bytes are the user key, and the rest of the subkey + is calculated by rotating the previous 16 bytes by 25 bits to the left, + and so on until the subkey is completed. + + + This function computes multiplicative inverse using Euclid's Greatest + Common Divisor algorithm. Zero and one are self inverse. +

    + i.e. x * MulInv(x) == 1 (modulo BASE) +

    +
    + + Return the additive inverse of x. +

    + i.e. x + AddInv(x) == 0 +

    +
    + + The function to invert the encryption subkey to the decryption subkey. + It also involves the multiplicative inverse and the additive inverse functions. + + + support class for constructing intergrated encryption ciphers + for doing basic message exchanges on top of key agreement ciphers + + + set up for use with stream mode, where the key derivation function + is used to provide a stream of bytes to xor with the message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + + + set up for use in conjunction with a block cipher to handle the + message. + + @param agree the key agreement used as the basis for the encryption + @param kdf the key derivation function used for byte generation + @param mac the message authentication code generator for the message + @param cipher the cipher to used for encrypting the message + + + Initialise the encryptor. + + @param forEncryption whether or not this is encryption/decryption. + @param privParam our private key parameters + @param pubParam the recipient's/sender's public key parameters + @param param encoding and derivation parameters. + + + Implementation of Bob Jenkin's ISAAC (Indirection Shift Accumulate Add and Count). + see: http://www.burtleburtle.net/bob/rand/isaacafa.html + + + initialise an ISAAC cipher. + + @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. + + + NaccacheStern Engine. For details on this cipher, please see + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Initializes this algorithm. Must be called before all other Functions. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#init(bool, + org.bouncycastle.crypto.CipherParameters) + + + Returns the input block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetInputBlockSize() + + + Returns the output block size of this algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#GetOutputBlockSize() + + + Process a single Block using the Naccache-Stern algorithm. + + @see org.bouncycastle.crypto.AsymmetricBlockCipher#ProcessBlock(byte[], + int, int) + + + Encrypts a BigInteger aka Plaintext with the public key. + + @param plain + The BigInteger to encrypt + @return The byte[] representation of the encrypted BigInteger (i.e. + crypted.toByteArray()) + + + Adds the contents of two encrypted blocks mod sigma + + @param block1 + the first encrypted block + @param block2 + the second encrypted block + @return encrypt((block1 + block2) mod sigma) + @throws InvalidCipherTextException + + + Convenience Method for data exchange with the cipher. + + Determines blocksize and splits data to blocksize. + + @param data the data to be processed + @return the data after it went through the NaccacheSternEngine. + @throws InvalidCipherTextException + + + Computes the integer x that is expressed through the given primes and the + congruences with the chinese remainder theorem (CRT). + + @param congruences + the congruences c_i + @param primes + the primes p_i + @return an integer x for that x % p_i == c_i + + + A Noekeon engine, using direct-key mode. + + + Create an instance of the Noekeon encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + The no-op engine that just copies bytes through, irrespective of whether encrypting and decrypting. + Provided for the sake of completeness. + + + an implementation of RC2 as described in RFC 2268 + "A Description of the RC2(r) Encryption Algorithm" R. Rivest. + + + 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. + + + return the result rotating the 16 bit number in x left by y + + + Wrap keys according to RFC 3217 - RC2 mechanism + + + Field engine + + + Field param + + + Field paramPlusIV + + + Field iv + + + Field forWrapping + + + Field IV2 + + + Method init + + @param forWrapping + @param param + + + Method GetAlgorithmName + + @return + + + Method wrap + + @param in + @param inOff + @param inLen + @return + + + Method unwrap + + @param in + @param inOff + @param inLen + @return + @throws InvalidCipherTextException + + + 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 + + + @param key + @param checksum + @return + @see http://www.w3.org/TR/xmlenc-core/#sec-CMSKeyChecksum + + + 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. + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation has a word size of 32 bits.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(32) low-order bits of y + 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 + + + The specification for RC5 came from the RC5 Encryption Algorithm + publication in RSA CryptoBytes, Spring of 1995. + http://www.rsasecurity.com/rsalabs/cryptobytes. +

    + This implementation is set to work with a 64 bit word size.

    +
    + + Create an instance of the RC5 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + 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 + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + An RC6 engine. + + + Create an instance of the RC6 encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param inKey the key to be used + + + Perform a left "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + Perform a right "spin" of the word. The rotation of the given + word x is rotated left by y bits. + Only the lg(wordSize) low-order bits of y + 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 + + + an implementation of the RFC 3211 Key Wrap + Specification. + + + + An implementation of the AES Key Wrapper from the NIST Key Wrap + Specification as described in RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc3394.txt + and http://csrc.nist.gov/encryption/kms/key-wrap.pdf. + + + + an implementation of Rijndael, based on the documentation and reference implementation + by Paulo Barreto, Vincent Rijmen, for v2.0 August '99. +

    + Note: this implementation is based on information prior to readonly NIST publication. +

    +
    + + multiply two elements of GF(2^m) + needed for MixColumn and InvMixColumn + + + xor corresponding text input and round key input bytes + + + Row 0 remains unchanged + The other three rows are shifted a variable amount + + + Replace every byte of the input by the byte at that place + in the nonlinear S-box + + + Mix the bytes of every column in a linear way + + + Mix the bytes of every column in a linear way + This is the opposite operation of Mixcolumn + + + Calculate the necessary round keys + The number of calculations depends on keyBits and blockBits + + + default constructor - 128 bit block size. + + + basic constructor - set the cipher up for a given blocksize + + @param blocksize the blocksize in bits, must be 128, 192, or 256. + + + 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. + + + this does your basic RSA algorithm with blinding + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + 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. + + + Initialise the blinding engine. + + @param forEncryption true if we are encrypting (blinding), false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + this does your basic RSA algorithm. + + + initialise the RSA engine. + + @param forEncryption true if we are encrypting, false otherwise. + @param param the necessary RSA key 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. + + + 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. + + + 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. + + + + Implementation of Daniel J. Bernstein's Salsa20 stream cipher, Snuffle 2005 + + + + Constants + + + + Creates a 20 round Salsa20 engine. + + + + + Creates a Salsa20 engine with a specific number of rounds. + + the number of rounds (must be an even number). + + + Rotate left + + @param x value to rotate + @param y amount to rotate x + + @return rotated x + + + Implementation of the SEED algorithm as described in RFC 4009 + + + + An implementation of the SEED key wrapper based on RFC 4010/RFC 3394. +

    + For further details see: http://www.ietf.org/rfc/rfc4010.txt. + + + + * 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. + *

    + * Serpent was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + * candidate algorithm for the NIST AES Quest. + *

    + *

    + * For full details see The Serpent home page + *

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + initialise a Serpent cipher. + + @param encrypting whether or not we are for encryption. + @param params the parameters required to set up the cipher. + @throws IllegalArgumentException if the params argument is + inappropriate. + + + 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. + @return the number of bytes processed and produced. + @throws DataLengthException if there isn't enough data in in, or + space in out. + @throws IllegalStateException if the cipher isn't initialised. + + + InvSO - {13, 3,11, 0,10, 6, 5,12, 1,14, 4, 7,15, 9, 8, 2 } - 15 terms. + + + S1 - {15,12, 2, 7, 9, 0, 5,10, 1,11,14, 8, 6,13, 3, 4 } - 14 terms. + + + InvS1 - { 5, 8, 2,14,15, 6,12, 3,11, 4, 7, 9, 1,13,10, 0 } - 14 steps. + + + S2 - { 8, 6, 7, 9, 3,12,10,15,13, 1,14, 4, 0,11, 5, 2 } - 16 terms. + + + InvS2 - {12, 9,15, 4,11,14, 1, 2, 0, 3, 6,13, 5, 8,10, 7 } - 16 steps. + + + S3 - { 0,15,11, 8,12, 9, 6, 3,13, 1, 2, 4,10, 7, 5,14 } - 16 terms. + + + InvS3 - { 0, 9,10, 7,11,14, 6,13, 3, 5,12, 2, 4, 8,15, 1 } - 15 terms + + + S4 - { 1,15, 8, 3,12, 0,11, 6, 2, 5, 4,10, 9,14, 7,13 } - 15 terms. + + + InvS4 - { 5, 0, 8, 3,10, 9, 7,14, 2,12,11, 6, 4,15,13, 1 } - 15 terms. + + + S5 - {15, 5, 2,11, 4,10, 9,12, 0, 3,14, 8,13, 6, 7, 1 } - 16 terms. + + + InvS5 - { 8,15, 2, 9, 4, 1,13,14,11, 6, 5, 3, 7,12,10, 0 } - 16 terms. + + + S6 - { 7, 2,12, 5, 8, 4, 6,11,14, 9, 1,15,13, 3,10, 0 } - 15 terms. + + + InvS6 - {15,10, 1,13, 5, 3, 6, 0, 4, 9,14, 7, 2,12, 8,11 } - 15 terms. + + + S7 - { 1,13,15, 0,14, 8, 2,11, 7, 4,12,10, 9, 3, 5, 6 } - 16 terms. + + + InvS7 - { 3, 0, 6,13, 9,14,15, 8, 5,12,11, 7,10, 1, 4, 2 } - 17 terms. + + + Apply the linear transformation to the register set. + + + Apply the inverse of the linear transformation to the register set. + + + a class that provides a basic SKIPJACK engine. + + + 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. + + + The G permutation + + + the inverse of the G permutation. + + + + SM2 public key encryption engine - based on https://tools.ietf.org/html/draft-shen-sm2-ecdsa-02. + + + + SM4 Block Cipher - SM4 is a 128 bit block cipher with a 128 bit key. + + The implementation here is based on the document http://eprint.iacr.org/2008/329.pdf + by Whitfield Diffie and George Ledin, which is a translation of Prof. LU Shu-wang's original standard. + + + + An TEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + + Implementation of the Threefish tweakable large block cipher in 256, 512 and 1024 bit block + sizes. + + + This is the 1.3 version of Threefish defined in the Skein hash function submission to the NIST + SHA-3 competition in October 2010. +

    + Threefish was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. +

    + This implementation inlines all round functions, unrolls 8 rounds, and uses 1.2k of static tables + to speed up key schedule injection.
    + 2 x block size state is retained by each cipher instance. + + + +

    + 256 bit block size - Threefish-256 + +
    + + + 512 bit block size - Threefish-512 + + + + + 1024 bit block size - Threefish-1024 + + + + Size of the tweak in bytes (always 128 bit/16 bytes) + + + Rounds in Threefish-256 + + + Rounds in Threefish-512 + + + Rounds in Threefish-1024 + + + Max rounds of any of the variants + + + Key schedule parity constant + + + Block size in bytes + + + Block size in 64 bit words + + + Buffer for byte oriented processBytes to call internal word API + + + Tweak bytes (2 byte t1,t2, calculated t3 and repeat of t1,t2 for modulo free lookup + + + Key schedule words + + + The internal cipher implementation (varies by blocksize) + + + + Constructs a new Threefish cipher, with a specified block size. + + the block size in bits, one of , , + . + + + + Initialise the engine. + + Initialise for encryption if true, for decryption if false. + an instance of or (to + use a 0 tweak) + + + + Initialise the engine, specifying the key and tweak directly. + + the cipher mode. + the words of the key, or null to use the current key. + the 2 word (128 bit) tweak, or null to use the current tweak. + + + + Process a block of data represented as 64 bit words. + + the number of 8 byte words processed (which will be the same as the block size). + a block sized buffer of words to process. + a block sized buffer of words to receive the output of the operation. + if either the input or output is not block sized + if this engine is not initialised + + + + Read a single 64 bit word from input in LSB first order. + + + + + Write a 64 bit word to output in LSB first order. + + + + Rotate left + xor part of the mix operation. + + + Rotate xor + rotate right part of the unmix operation. + + + The extended + repeated tweak words + + + The extended + repeated key words + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Mix rotation constants defined in Skein 1.3 specification + + + Tnepres 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. +

    + Tnepres is based on Serpent which was designed by Ross Anderson, Eli Biham and Lars Knudsen as a + candidate algorithm for the NIST AES Quest. Unfortunately there was an endianness issue + with test vectors in the AES submission and the resulting confusion lead to the Tnepres cipher + as well, which is a byte swapped version of Serpent. +

    +

    + For full details see The Serpent home page +

    +
    + + Expand a user-supplied key material into a session key. + + @param key The user-key bytes (multiples of 4) to use. + @exception ArgumentException + + + Encrypt one block of plaintext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + Decrypt one block of ciphertext. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output the array the output data will be copied into. + @param outOff the offset into the out array the output will start at. + + + 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. + + + 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. + + + gSubKeys[] and gSBox[] are eventually used in the + encryption and decryption methods. + + + 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. + + + 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. + + + 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. + + + 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 + + + * Reed-Solomon code parameters: (12,8) reversible code: + *

    + *

    +                    * G(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1
    +                    * 
    + * where a = primitive root of field generator 0x14D + *

    +
    + + initialise a VMPC cipher. + + @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. + + + + Implementation of Daniel J. Bernstein's XSalsa20 stream cipher - Salsa20 with an extended nonce. + + + XSalsa20 requires a 256 bit key, and a 192 bit nonce. + + + + + XSalsa20 key generation: process 256 bit input key and 128 bits of the input nonce + using a core Salsa20 function without input addition to produce 256 bit working key + and use that with the remaining 64 bits of nonce to initialize a standard Salsa20 engine state. + + + + An XTEA engine. + + + Create an instance of the TEA encryption algorithm + and set some defaults + + + 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. + + + Re-key the cipher. + + @param key the key to be used + + + Basic KDF generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on ISO 18033/P1363a. +
    + + Construct a KDF Parameters generator. + + @param counterStart value of counter. + @param digest the digest to be used as the source of derived keys. + + + return the underlying digest. + + + fill len bytes of the output buffer with bytes generated from + the derivation function. + + @throws ArgumentException if the size of the request will cause an overflow. + @throws DataLengthException if the out buffer is too small. + + + Core of password hashing scheme Bcrypt, + designed by Niels Provos and David Mazières, + corresponds to the C reference implementation. +

    + This implementation does not correspondent to the 1999 published paper + "A Future-Adaptable Password Scheme" of Niels Provos and David Mazières, + see: https://www.usenix.org/legacy/events/usenix99/provos/provos_html/node1.html. + In contrast to the paper, the order of key setup and salt setup is reversed: + state <- ExpandKey(state, 0, key) + state %lt;- ExpandKey(state, 0, salt) + This corresponds to the OpenBSD reference implementation of Bcrypt. +

    + Note: + There is no successful cryptanalysis (status 2015), but + the amount of memory and the band width of Bcrypt + may be insufficient to effectively prevent attacks + with custom hardware like FPGAs, ASICs +

    + This implementation uses some parts of Bouncy Castle's BlowfishEngine. +

    +
    + + Derives a raw 192 bit Bcrypt key + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param psw the password + @return a 192 bit key + + + Size of the salt parameter in bytes + + + Minimum value of cost parameter, equal to log2(bytes of salt) + + + Maximum value of cost parameter (31 == 2,147,483,648) + + + Maximum size of password == max (unrestricted) size of Blowfish key + + + Converts a character password to bytes incorporating the required trailing zero byte. + + @param password the password to be encoded. + @return a byte representation of the password in UTF8 + trailing zero. + + + Calculates the bcrypt hash of a password. +

    + This implements the raw bcrypt function as defined in the bcrypt specification, not + the crypt encoded version implemented in OpenBSD. +

    + @param password the password bytes (up to 72 bytes) to use for this invocation. + @param salt the 128 bit salt to use for this invocation. + @param cost the bcrypt cost parameter. The cost of the bcrypt function grows as + 2^cost. Legal values are 4..31 inclusive. + @return the output of the raw bcrypt operation: a 192 bit (24 byte) hash. +
    + + 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 + + + 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 + + + a basic Diffie-Hellman key pair generator. + + This generates keys consistent for use with the basic algorithm for + Diffie-Hellman. + + + 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. + + + which Generates the p and g values from the given parameters, + returning the DHParameters object. +

    + Note: can take a while...

    +
    + + a DSA key pair generator. + + This Generates DSA keys in line with the method described + in FIPS 186-3 B.1 FFC Key Pair Generation. + + + Generate suitable parameters for DSA, in line with FIPS 186-2, or FIPS 186-3. + + + Initialise the generator + This form can only be used for older DSA (pre-DSA2) parameters + the size of keys in bits (from 512 up to 1024, and a multiple of 64) + measure of robustness of primes (at least 80 for FIPS 186-2 compliance) + the source of randomness to use + + + Initialise the generator for DSA 2 + You must use this Init method if you need to generate parameters for DSA 2 keys + An instance of DsaParameterGenerationParameters used to configure this generator + + + Generates a set of DsaParameters + Can take a while... + + + generate suitable parameters for DSA, in line with + FIPS 186-3 A.1 Generation of the FFC Primes p and q. + + + Given the domain parameters this routine generates an EC key + pair in accordance with X9.62 section 5.2.1 pages 26, 27. + + + a ElGamal key pair generator. +

    + This Generates keys consistent for use with ElGamal as described in + page 164 of "Handbook of Applied Cryptography".

    +
    + + * which Generates the p and g values from the given parameters, + * returning the ElGamalParameters object. + *

    + * Note: can take a while... + *

    +
    + + a GOST3410 key pair generator. + This generates GOST3410 keys in line with the method described + in GOST R 34.10-94. + + + generate suitable parameters for GOST3410. + + + 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. + + + Procedure C + procedure generates the a value from the given p,q, + returning the a value. + + + which generates the p , q and a values from the given parameters, + returning the Gost3410Parameters object. + + + HMAC-based Extract-and-Expand Key Derivation Function (HKDF) implemented + according to IETF RFC 5869, May 2010 as specified by H. Krawczyk, IBM + Research & P. Eronen, Nokia. It uses a HMac internally to compute de OKM + (output keying material) and is likely to have better security properties + than KDF's based on just a hash function. + + + Creates a HKDFBytesGenerator based on the given hash function. + + @param hash the digest to be used as the source of generatedBytes bytes + + + Performs the extract part of the key derivation function. + + @param salt the salt to use + @param ikm the input keying material + @return the PRK as KeyParameter + + + Performs the expand part of the key derivation function, using currentT + as input and output buffer. + + @throws DataLengthException if the total number of bytes generated is larger than the one + specified by RFC 5869 (255 * HashLen) + + + KFD2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF1 byte generator. + + @param digest the digest to be used as the source of derived keys. + + + KDF2 generator for derived keys and ivs as defined by IEEE P1363a/ISO 18033 +
    + This implementation is based on IEEE P1363/ISO 18033. +
    + + Construct a KDF2 bytes generator. Generates key material + according to IEEE P1363 or ISO 18033 depending on the initialisation. + + @param digest the digest to be used as the source of derived keys. + + + Generator for MGF1 as defined in Pkcs 1v2 + + + @param digest the digest to be used as the source of Generated bytes + + + return the underlying digest. + + + int to octet string. + + + fill len bytes of the output buffer with bytes Generated from + the derivation function. + + @throws DataLengthException if the out buffer is too small. + + + Key generation parameters for NaccacheStern cipher. For details on this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Generates a permuted ArrayList from the original one. The original List + is not modified + + @param arr + the ArrayList to be permuted + @param rand + the source of Randomness for permutation + @return a new IList with the permuted elements. + + + Finds the first 'count' primes starting with 3 + + @param count + the number of primes to find + @return a vector containing the found primes as Integer + + + Password hashing scheme BCrypt, + designed by Niels Provos and David Mazières, using the + String format and the Base64 encoding + of the reference implementation on OpenBSD + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, 2y,2b or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' using version + '2y'. + + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Creates a 60 character Bcrypt String, including + version, cost factor, salt and hash, separated by '$' + + @param version the version, may be 2b, 2y or 2a. (2a is not backwards compatible.) + @param cost the cost factor, treated as an exponent of 2 + @param salt a 16 byte salt + @param password the password + @return a 60 character Bcrypt String + + + Checks if a password corresponds to a 60 character Bcrypt String + + @param bcryptString a 60 character Bcrypt String, including + version, cost factor, salt and hash, + separated by '$' + @param password the password as an array of chars + @return true if the password corresponds to the + Bcrypt String, otherwise false + + + Generator for PBE derived keys and ivs as usd by OpenSSL. +

    + The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an + iteration count of 1. +

    +
    + + Construct a OpenSSL Parameters generator. + + + Initialise - note the iteration count for this algorithm is fixed at 1. + + @param password password to use. + @param salt salt to use. + + + the derived key function, the ith hash of the password and the salt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 12 V1.0. +

    + The document this implementation is based on can be found at + + RSA's Pkcs12 Page +

    +
    + + Construct a Pkcs 12 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + @exception ArgumentException if an unknown digest is passed in. + + + add a + b + 1, returning the result in a. The a value is treated + as a BigInteger of length (b.Length * 8) bits. The result is + modulo 2^b.Length in case of overflow. + + + generation of a derived key ala Pkcs12 V1.0. + + + 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. + + + 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. + + + 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. + + + 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. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page +

    +
    + + Construct a Pkcs 5 Scheme 1 Parameters generator. + + @param digest the digest to be used as the source of derived keys. + + + the derived key function, the ith hash of the mPassword and the mSalt. + + + 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. + + + 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. + + + 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. + + + Generator for Pbe derived keys and ivs as defined by Pkcs 5 V2.0 Scheme 2. + This generator uses a SHA-1 HMac as the calculation function. +

    + The document this implementation is based on can be found at + + RSA's Pkcs5 Page

    +
    + + construct a Pkcs5 Scheme 2 Parameters generator. + + + 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. + + + 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. + + + 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. + + + + Generates keys for the Poly1305 MAC. + + + Poly1305 keys are 256 bit keys consisting of a 128 bit secret key used for the underlying block + cipher followed by a 128 bit {@code r} value used for the polynomial portion of the Mac.
    + The {@code r} value has a specific format with some bits required to be cleared, resulting in an + effective 106 bit key.
    + A separately generated 256 bit key can be modified to fit the Poly1305 key format by using the + {@link #clamp(byte[])} method to clear the required bits. +
    + +
    + + + Initialises the key generator. + + + Poly1305 keys are always 256 bits, so the key length in the provided parameters is ignored. + + + + + Generates a 256 bit key in the format required for Poly1305 - e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + + + + Modifies an existing 32 byte key value to comply with the requirements of the Poly1305 key by + clearing required bits in the r (second 16 bytes) portion of the key.
    + Specifically: +
      +
    • r[3], r[7], r[11], r[15] have top four bits clear (i.e., are {0, 1, . . . , 15})
    • +
    • r[4], r[8], r[12] have bottom two bits clear (i.e., are in {0, 4, 8, . . . , 252})
    • +
    +
    + a 32 byte key value k[0] ... k[15], r[0] ... r[15] +
    + + + Checks a 32 byte key for compliance with the Poly1305 key requirements, e.g. + k[0] ... k[15], r[0] ... r[15] with the required bits in r cleared + as per . + + Key. + if the key is of the wrong length, or has invalid bits set + in the r portion of the key. + + + 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. + + + Initialise the factor generator + + @param param the necessary RSA key parameters. + + + Generate a suitable blind factor for the public key the generator was initialised with. + + @return a random blind factor + + + an RSA key pair generator. + + + Choose a random prime value for use with RSA + the bit-length of the returned prime + the RSA public exponent + a prime p, with (p-1) relatively prime to e + + + Implementation of the scrypt a password-based key derivation function. + + Scrypt was created by Colin Percival and is specified in + draft-josefsson-scrypt-kd. + + + + Generate a key using the scrypt key derivation function. + the bytes of the pass phrase. + the salt to use for this invocation. + CPU/Memory cost parameter. Must be larger than 1, a power of 2 and less than + 2^(128 * r / 8). + the block size, must be >= 1. + Parallelization parameter. Must be a positive integer less than or equal to + Int32.MaxValue / (128 * r * 8). + the length of the key to generate. + the generated key. + + + Base interface for a public/private key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The maximum size, in bytes, an input block may be. + + + The maximum size, in bytes, an output block will be. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The length of the input block. + Input decrypts improperly. + Input is too large for the cipher. + + + interface that a public/private key pair generator should conform to. + + + intialise the key pair generator. + + @param the parameters the key pair is to be initialised with. + + + return an AsymmetricCipherKeyPair containing the Generated keys. + + @return an AsymmetricCipherKeyPair containing the Generated keys. + + + The basic interface that basic Diffie-Hellman implementations + conforms to. + + + initialise the agreement engine. + + + return the field size for the agreement algorithm in bytes. + + + given a public key from a given party calculate the next + message in the agreement sequence. + + + Base interface for a symmetric key block cipher. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + The block size for this cipher, in bytes. + + + Indicates whether this cipher can handle partial blocks. + + + Process a block. + The input buffer. + The offset into inBuf that the input block begins. + The output buffer. + The offset into outBuf to write the output block. + If input block is wrong size, or outBuf too small. + The number of bytes processed and produced. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to a single block return an object + of this type. + + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + Block cipher engines are expected to conform to this interface. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + + + Reset the cipher. After resetting the cipher is in the same state + as it was after the last init (if there was one). + + + + + Base interface for a ciphers that do not require data to be block aligned. + + Note: In cases where the underlying algorithm is block based, these ciphers may add or remove padding as needed. + + + + + + Return the size of the output buffer required for a Write() plus a + close() with the write() being passed inputLen bytes. + + The returned size may be dependent on the initialisation of this cipher + and may not be accurate once subsequent input data is processed as the cipher may + add, add or remove padding, as it sees fit. + + + The space required to accommodate a call to processBytes and doFinal with inputLen bytes of input. + The length of the expected input. + + + + Return the size of the output buffer required for a write() with the write() being + passed inputLen bytes and just updating the cipher output. + + The space required to accommodate a call to processBytes with inputLen bytes of input. + The length of the expected input. + + + + Gets the stream for reading/writing data processed/to be processed. + + The stream associated with this cipher. + + + + Base interface for cipher builders. + + + + + Return the algorithm and parameter details associated with any cipher built. + + + + + Return the maximum output size that a given input will produce. + + the length of the expected input. + The maximum possible output size that can produced for the expected input length. + + + + Build a cipher that operates on the passed in stream. + + The stream to write/read any encrypted/decrypted data. + A cipher based around the given stream. + + + + A cipher builder that can also return the key it was initialized with. + + + + + Return the key we were initialized with. + + + + all parameter classes implement this. + + + + Interface describing a provider of cipher builders for creating decrypting ciphers. + + + + + Return a cipher builder for creating decrypting ciphers. + + The algorithm details/parameters to use to create the final cipher. + A new cipher builder. + + + base interface for general purpose byte derivation functions. + + + return the message digest used as the basis for the function + + + Parameters for key/byte stream derivation classes + + + interface that a message digest conforms to. + + + return the algorithm name + + @return the algorithm name + + + 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. + + + 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. + + + update the message digest with a single byte. + + @param inByte the input byte to be entered. + + + 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. + + + 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. + + + reset the digest back to it's initial state. + + + interface for classes implementing the Digital Signature Algorithm + + + 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. + + + 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. + + + 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. + + + + An "extended" interface for classes implementing DSA-style algorithms, that provides access + to the group order. + + + + The order of the group that the r, s values in signatures belong to. + + + + Base interface describing an entropy source for a DRBG. + + + + + Return whether or not this entropy source is regarded as prediction resistant. + + true if this instance is prediction resistant; otherwise, false. + + + + Return a byte array of entropy. + + The entropy bytes. + + + + Return the number of bits of entropy this source can produce. + + The size, in bits, of the return value of getEntropy. + + + + Base interface describing a provider of entropy sources. + + + + + Return an entropy source providing a block of entropy. + + The size of the block of entropy required. + An entropy source providing bitsRequired blocks of entropy. + + + + Base interface for a key unwrapper. + + + + + The parameter set used to configure this key unwrapper. + + + + + Unwrap the passed in data. + + The array containing the data to be unwrapped. + The offset into cipherText at which the unwrapped data starts. + The length of the data to be unwrapped. + an IBlockResult containing the unwrapped key data. + + + + Base interface for a key wrapper. + + + + + The parameter set used to configure this key wrapper. + + + + + Wrap the passed in key data. + + The key data to be wrapped. + an IBlockResult containing the wrapped key data. + + + The base interface for implementations of message authentication codes (MACs). + + + Initialise the MAC. + + @param param the key and other data required by the MAC. + @exception ArgumentException if the parameters argument is + inappropriate. + + + Return the name of the algorithm the MAC implements. + + @return the name of the algorithm the MAC implements. + + + Return the block size for this MAC (in bytes). + + @return the block size for this MAC in bytes. + + + add a single byte to the mac for processing. + + @param in the byte to be processed. + @exception InvalidOperationException if the MAC is not initialised. + + + @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. + + + Compute the final stage of the MAC writing the output to the out + parameter. +

    + doFinal leaves the MAC in the same state it was after the last init. +

    + @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. +
    + + 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). + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + this exception is thrown whenever we find something we don't expect in a + message. + + + base constructor. + + + create a InvalidCipherTextException with the given message. + + @param message the message to be carried with the exception. + + + + Base interface for operators that serve as stream-based signature calculators. + + + + The algorithm details object for this calculator. + + + + Create a stream calculator for this signature calculator. The stream + calculator is used for the actual operation of entering the data to be signed + and producing the signature block. + + A calculator producing an IBlockResult with a signature in it. + + + Return the name of the algorithm the signer implements. + + @return the name of the algorithm the signer implements. + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + reset the internal state + + + Signer with message recovery. + + + Returns true if the signer has recovered the full message as + part of signature verification. + + @return true if full message recovered. + + + Returns a reference to what message was recovered (if any). + + @return full/partial message, null if nothing. + + + 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 + + + + Base interface for cryptographic operations such as Hashes, MACs, and Signatures which reduce a stream of data + to a single value. + + + + Return a "sink" stream which only exists to update the implementing object. + A stream to write to in order to update the implementing object. + + + + Return the result of processing the stream. This value is only available once the stream + has been closed. + + The result of processing the stream. + + + The interface stream ciphers conform to. + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + If true the cipher is initialised for encryption, + if false for decryption. + The key and other data required by the cipher. + + If the parameters argument is inappropriate. + + + + encrypt/decrypt a single byte returning the result. + the byte to be processed. + the result of processing the input byte. + + + + Process a block of bytes from input putting the result into output. + + The input byte array. + + The offset into input where the data to be processed starts. + + The number of bytes to be processed. + The output buffer the processed bytes go into. + + The offset into output the processed data starts at. + + If the output buffer is too small. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Operators that reduce their input to the validation of a signature produce this type. + + + + + Return true if the passed in data matches what is expected by the verification result. + + The bytes representing the signature. + true if the signature verifies, false otherwise. + + + + Return true if the length bytes from off in the source array match the signature + expected by the verification result. + + Byte array containing the signature. + The offset into the source array where the signature starts. + The number of bytes in source making up the signature. + true if the signature verifies, false otherwise. + + + + Base interface for operators that serve as stream-based signature verifiers. + + + + The algorithm details object for this verifier. + + + + Create a stream calculator for this verifier. The stream + calculator is used for the actual operation of entering the data to be verified + and producing a result which can be used to verify the original signature. + + A calculator producing an IVerifier which can verify the signature. + + + + Base interface for a provider to support the dynamic creation of signature verifiers. + + + + + Return a signature verfier for signature algorithm described in the passed in algorithm details object. + + The details of the signature algorithm verification is required for. + A new signature verifier. + + + The name of the algorithm this cipher implements. + + + + With FIPS PUB 202 a new kind of message digest was announced which supported extendable output, or variable digest sizes. + This interface provides the extra method required to support variable output on a digest implementation. + + + + + Output the results of the final calculation for this digest to outLen number of bytes. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + + Start outputting the results of the final calculation for this digest. Unlike DoFinal, this method + will continue producing output until the Xof is explicitly reset, or signals otherwise. + + output array to write the output bytes to. + offset to start writing the bytes at. + the number of output bytes requested. + the number of bytes written + + + The base class for parameters to key generators. + + + 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. + + + return the random source associated with this + generator. + + @return the generators random source. + + + return the bit strength for keys produced by this generator, + + @return the strength of the keys this generator produces (in bits). + + + standard CBC Block Cipher MAC - if no padding is specified the default of + pad of zeroes is used. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + CMAC - as specified at www.nuee.nagoya-u.ac.jp/labs/tiwata/omac/omac.html +

    + CMAC is analogous to OMAC1 - see also en.wikipedia.org/wiki/CMAC +

    + CMAC is a NIST recomendation - see + csrc.nist.gov/CryptoToolkit/modes/800-38_Series_Publications/SP800-38B.pdf +

    + CMAC/OMAC1 is a blockcipher-based message authentication code designed and + analyzed by Tetsu Iwata and Kaoru Kurosawa. +

    + CMAC/OMAC1 is a simple variant of the CBC MAC (Cipher Block Chaining Message + Authentication Code). OMAC stands for One-Key CBC MAC. +

    + It supports 128- or 64-bits block ciphers, with any key size, and returns + a MAC with dimension less or equal to the block size of the underlying + cipher. +

    +
    + + create a standard MAC based on a CBC block cipher (64 or 128 bit block). + This will produce an authentication code the length of the block size + of the cipher. + + @param cipher the cipher to be used as the basis of the MAC generation. + + + create a standard MAC based on a block cipher with the size of the + MAC been given in bits. +

    + 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). + + @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 and @lt;= 128. + + + Reset the mac generator. + + +

    + Implementation of DSTU7564 mac mode + +
    + + implementation of DSTU 7624 MAC + + + + The GMAC specialisation of Galois/Counter mode (GCM) detailed in NIST Special Publication + 800-38D. + + + GMac is an invocation of the GCM mode where no data is encrypted (i.e. all input data to the Mac + is processed as additional authenticated data with the underlying GCM block cipher). + + + + + Creates a GMAC based on the operation of a block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + + + + Creates a GMAC based on the operation of a 128 bit block cipher in GCM mode. + + + This will produce an authentication code the length of the block size of the cipher. + + the cipher to be used in GCM mode to generate the MAC. + the mac size to generate, in bits. Must be a multiple of 8, between 32 and 128 (inclusive). + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + Initialises the GMAC - requires a + providing a and a nonce. + + + + implementation of GOST 28147-89 MAC + + + HMAC implementation based on RFC2104 + + H(K XOR opad, H(K XOR ipad, text)) + + + Reset the mac generator. + + + 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 + + + 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. + + + 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. + + + 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. +

    + 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). +

    + @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. +
    + + 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. +

    + 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). +

    + @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. +
    + + Reset the mac generator. + + + + Poly1305 message authentication code, designed by D. J. Bernstein. + + + Poly1305 computes a 128-bit (16 bytes) authenticator, using a 128 bit nonce and a 256 bit key + consisting of a 128 bit key applied to an underlying cipher, and a 128 bit key (with 106 + effective key bits) used in the authenticator. + + The polynomial calculation in this implementation is adapted from the public domain poly1305-donna-unrolled C implementation + by Andrew M (@floodyberry). + + + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Polynomial key + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Precomputed 5 * r[1..4] + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Encrypted nonce + + + Current block of buffered input + + + Current offset in input buffer + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Polynomial accumulator + + + Constructs a Poly1305 MAC, where the key passed to init() will be used directly. + + + Constructs a Poly1305 MAC, using a 128 bit block cipher. + + + + Initialises the Poly1305 MAC. + + a {@link ParametersWithIV} containing a 128 bit nonce and a {@link KeyParameter} with + a 256 bit key complying to the {@link Poly1305KeyGenerator Poly1305 key format}. + + + + Implementation of SipHash as specified in "SipHash: a fast short-input PRF", by Jean-Philippe + Aumasson and Daniel J. Bernstein (https://131002.net/siphash/siphash.pdf). + + + "SipHash is a family of PRFs SipHash-c-d where the integer parameters c and d are the number of + compression rounds and the number of finalization rounds. A compression round is identical to a + finalization round and this round function is called SipRound. Given a 128-bit key k and a + (possibly empty) byte string m, SipHash-c-d returns a 64-bit value..." + + + + SipHash-2-4 + + + SipHash-c-d + the number of compression rounds + the number of finalization rounds + + + + Implementation of the Skein parameterised MAC function in 256, 512 and 1024 bit block sizes, + based on the Threefish tweakable block cipher. + + + This is the 1.3 version of Skein defined in the Skein hash function submission to the NIST SHA-3 + competition in October 2010. +

    + Skein was designed by Niels Ferguson - Stefan Lucks - Bruce Schneier - Doug Whiting - Mihir + Bellare - Tadayoshi Kohno - Jon Callas - Jesse Walker. + + + + + +

    + 256 bit block size - Skein-256 + +
    + + + 512 bit block size - Skein-512 + + + + + 1024 bit block size - Skein-1024 + + + + + Constructs a Skein MAC with an internal state size and output size. + + the internal state size in bits - one of or + . + the output/MAC size to produce in bits, which must be an integral number of + bytes. + + + + Optionally initialises the Skein digest with the provided parameters. + + See for details on the parameterisation of the Skein hash function. + the parameters to apply to this engine, or null to use no parameters. + + + + This exception is thrown whenever a cipher requires a change of key, iv + or similar after x amount of bytes enciphered + + + + implements Cipher-Block-Chaining (CBC) mode on top of a simple cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of chaining. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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. + + @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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CBC". + + + return the block size of the underlying cipher. + + @return the block size of the underlying cipher. + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + Do the appropriate chaining step for CBC 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. + + + Do the appropriate chaining step for CBC 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 decrypted 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. + + + Implements the Counter with Cipher Block Chaining mode (CCM) detailed in + NIST Special Publication 800-38C. +

    + Note: this mode is a packet mode - it needs all the data up front. +

    +
    + + Basic constructor. + + @param cipher the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Returns a byte array containing the mac calculated as part of the + last encrypt or decrypt operation. + + @return the last mac calculated. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @return a byte array containing the processed input.. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + + + Process a packet of data for either CCM decryption or encryption. + + @param in data for processing. + @param inOff offset at which data starts in the input array. + @param inLen length of the data in the input array. + @param output output array. + @param outOff offset into output array to start putting processed bytes. + @return the number of bytes added to output. + @throws IllegalStateException if the cipher is not appropriately set up. + @throws InvalidCipherTextException if the input data is truncated or the mac check fails. + @throws DataLengthException if output buffer too short. + + + implements a Cipher-FeedBack (CFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/CFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + Do the appropriate processing for CFB 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. + + + Do the appropriate processing for CFB 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + Create a buffered block cipher that uses Cipher Text Stealing + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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). + + + A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and + Efficiency - by M. Bellare, P. Rogaway, D. Wagner. + + http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf + + EAX is an AEAD scheme based on CTR and OMAC1/CMAC, that uses a single block + cipher to encrypt and authenticate data. It's on-line (the length of a + message isn't needed to begin processing it), has good performances, it's + simple and provably secure (provided the underlying block cipher is secure). + + Of course, this implementations is NOT thread-safe. + + + Constructor that accepts an instance of a block cipher engine. + + @param cipher the engine to use + + + + Implements the Galois/Counter mode (GCM) detailed in + NIST Special Publication 800-38D. + + + + + MAC sizes from 32 bits to 128 bits (must be a multiple of 8) are supported. The default is 128 bits. + Sizes less than 96 are not recommended, but are supported for specialized applications. + + + + implements the GOST 28147 OFB counter mode (GCTR). + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + counter mode (must have a 64 bit block size). + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 encrypting 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. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/GCTR" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + An IAeadCipher based on an IBlockCipher. + + + The block size for this cipher, in bytes. + + + The block cipher underlying this algorithm. + + + + A cipher mode that includes authenticated encryption with a streaming mode and optional + associated data. + + + Implementations of this interface may operate in a packet mode (where all input data is + buffered and processed during the call to DoFinal, or in a streaming mode (where output + data is incrementally produced with each call to ProcessByte or ProcessBytes. This is + important to consider during decryption: in a streaming mode, unauthenticated plaintext + data may be output prior to the call to DoFinal that results in an authentication failure. + The higher level protocol utilising this cipher must ensure the plaintext data is handled + appropriately until the end of data is reached and the entire ciphertext is authenticated. + + + + + The name of the algorithm this cipher implements. + + + Initialise the cipher. + Parameter can either be an AeadParameters or a ParametersWithIV object. + Initialise for encryption if true, for decryption if false. + The key or other data required by the cipher. + + + Add a single byte to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The byte to be processed. + + + Add a sequence of bytes to the associated data check. + If the implementation supports it, this will be an online operation and will not retain the associated data. + The input byte array. + The offset into the input array where the data to be processed starts. + The number of bytes to be processed. + + + Encrypt/decrypt a single byte. + + @param input the byte to be processed. + @param outBytes the output buffer the processed byte goes into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Process a block of bytes from in putting the result into out. + + @param inBytes 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 outBytes the output buffer the processed bytes go into. + @param outOff the offset into the output byte array the processed data starts at. + @return the number of bytes written to out. + @exception DataLengthException if the output buffer is too small. + + + Finish the operation either appending or verifying the MAC at the end of the data. + + @param outBytes space for any resulting output data. + @param outOff offset into out to start copying the data at. + @return number of bytes written into out. + @throws InvalidOperationException if the cipher is in an inappropriate state. + @throws InvalidCipherTextException if the MAC fails to match. + + + Return the value of the MAC associated with the last stream processed. + + @return MAC for plaintext data. + + + Return the size of the output buffer required for a ProcessBytes + an input of len bytes. + + @param len the length of the input. + @return the space required to accommodate a call to ProcessBytes + with len bytes of input. + + + Return the size of the output buffer required for a ProcessBytes 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 ProcessBytes and DoFinal + with len bytes of input. + + + + Reset the cipher to the same state as it was after the last init (if there was one). + + + + + Base constructor. Nb value is set to 4. + + base cipher to use under CCM. + + + + Constructor allowing Nb configuration. + + Nb is a parameter specified in CCM mode of DSTU7624 standard. + This parameter specifies maximum possible length of input.It should + be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1, + where Nmax - length of input message in bits.For practical reasons + Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4. + + base cipher to use under CCM. + Nb value to use. + + + Implements a Gamming or Counter (CTR) mode on top of a DSTU 7624 block cipher. + + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/KCTR" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + Process one block of input from the array in and write it to + the out array. + + @param input the array containing the input data. + @param inOff offset into the in array the data starts at. + @param output 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + An implementation of RFC 7253 on The OCB + Authenticated-Encryption Algorithm, licensed per: + +

    License for + Open-Source Software Implementations of OCB (Jan 9, 2013) - 'License 1'
    + Under this license, you are authorized to make, use, and distribute open-source software + implementations of OCB. This license terminates for you if you sue someone over their open-source + software implementation of OCB claiming that you have a patent covering their implementation. +

    + This is a non-binding summary of a legal document (the link above). The parameters of the license + are specified in the license document and that document is controlling.

    +
    + + implements a Output-FeedBack (OFB) mode on top of a simple 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) + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + 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 param the key and other data required by the cipher. + @exception ArgumentException if the parameters argument is + inappropriate. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/OFB" + and the block size in bits + + + return the block size we are operating at (in bytes). + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the feedback vector back to the IV and reset the underlying + cipher. + + + * 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. + *

    + * For further info see RFC 2440. + *

    +
    + + Basic constructor. + + @param cipher the block cipher to be used as the basis of the + feedback mode. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + return the algorithm name and mode. + + @return the name of the underlying algorithm followed by "/PGPCFB" + and the block size in bits. + + + return the block size we are operating at. + + @return the block size we are operating at (in bytes). + + + 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. + + + reset the chaining vector back to the IV and reset the underlying + cipher. + + + 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. + + + 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 + + + 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. + + + 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. + + + Implements the Segmented Integer Counter (SIC) mode on top of a simple + block cipher. + + + Basic constructor. + + @param c the block cipher to be used. + + + return the underlying block cipher that we are wrapping. + + @return the underlying block cipher that we are wrapping. + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Calculator factory class for signature generation in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + + + + Constructor which also specifies a source of randomness to be used if one is required. + + The name of the signature algorithm to use. + The private key to be used in the signing operation. + The source of randomness to be used in signature calculation. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + + Verifier class for signature verification in ASN.1 based profiles that use an AlgorithmIdentifier to preserve + signature algorithm details. + + + + + Base constructor. + + The name of the signature algorithm to use. + The public key to be used in the verification operation. + + + + Provider class which supports dynamic creation of signature verifiers. + + + + + Base constructor - specify the public key to be used in verification. + + The public key to be used in creating verifiers provided by this object. + + + + Allows enumeration of the signature names supported by the verifier provider. + + + + Block cipher padders are expected to conform to this interface + + + Initialise the padder. + + @param param parameters, if any required. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + @exception InvalidCipherTextException if the padding is badly formed + or invalid. + + + A padder that adds ISO10126-2 padding to a block. + + + Initialise the padder. + + @param random a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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 + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the padder implements. + + @return the name of the algorithm the padder implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + 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. + + + Create a buffered block cipher with the desired padding. + + @param cipher the underlying block cipher this buffering object wraps. + @param padding the padding type. + + + Create a buffered block cipher Pkcs7 padding + + @param cipher the underlying block cipher this buffering object wraps. + + + 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. + + + 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. + + + 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. + + + process a single byte, producing an output block if necessary. + + @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. + + + 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. + + + 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. + + + A padder that adds Pkcs7/Pkcs5 padding to a block. + + + Initialise the padder. + + @param random - a SecureRandom if available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Trailing-Bit-Compliment padding to a block. +

    + This padding pads the block out compliment of the last bit + of the plain text. +

    +
    +
    + + Return the name of the algorithm the cipher implements. + the name of the algorithm the cipher implements. + + + + Initialise the padder. + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. +

    + 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. +

    +
    +
    + + return the number of pad bytes present in the block. + + + 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. + + + Initialise the padder. + + @param random a SecureRandom if one is available. + + + Return the name of the algorithm the cipher implements. + + @return the name of the algorithm the cipher implements. + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + return the number of pad bytes present in the block. + + + A padder that adds Null byte padding to a block. + + + Return the name of the algorithm the cipher implements. + + + the name of the algorithm the cipher implements. + + + + Initialise the padder. + + + - a SecureRandom if available. + + + + add the pad bytes to the passed in block, returning the + number of bytes added. + + + + return the number of pad bytes present in the block. + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + Base constructor. + + @param key key to be used by underlying cipher + @param macSize macSize in bits + @param nonce nonce to be used + @param associatedText associated text, if any + + + 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 + + + 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 + + + return true if the passed in key is a real 2/3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 2 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + return true if the passed in key is a real 3 part DES-EDE key. + + @param key bytes making up the key + @param offset offset into the byte array the key starts at + + + 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. +

    + See "Applied + Cryptography" by Bruce Schneier for more information. +

    + @return true if the given DES key material is weak or semi-weak, + false otherwise. +
    + + 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. + + + The minimum bitlength of the private value. + + + The bitlength of the private value. + + + Construct without a usage index, this will do a random construction of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + + + Construct for a specific usage index - this has the effect of using verifiable canonical generation of G. + + @param L desired length of prime P in bits (the effective key size). + @param N desired length of prime Q in bits. + @param certainty certainty level for prime number generation. + @param random the source of randomness to use. + @param usageIndex a valid usage index. + + + return the generator - g + + + return private value limit - l + + + Parameter class for the HkdfBytesGenerator class. + + + Generates parameters for HKDF, specifying both the optional salt and + optional info. Step 1: Extract won't be skipped. + + @param ikm the input keying material or seed + @param salt the salt to use, may be null for a salt for hashLen zeros + @param info the info to use, may be null for an info field of zero bytes + + + Factory method that makes the HKDF skip the extract part of the key + derivation function. + + @param ikm the input keying material or seed, directly used for step 2: + Expand + @param info the info to use, may be null for an info field of zero bytes + @return HKDFParameters that makes the implementation skip step 1 + + + Returns the input keying material or seed. + + @return the keying material + + + Returns if step 1: extract has to be skipped or not + + @return true for skipping, false for no skipping of step 1 + + + Returns the salt, or null if the salt should be generated as a byte array + of HashLen zeros. + + @return the salt, or null + + + Returns the info field, which may be empty (null is converted to empty). + + @return the info field, never null + + + parameters for using an integrated cipher in stream mode. + + + @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 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). + + + parameters for Key derivation functions for ISO-18033 + + + + Base constructor - suffix fixed input data only. + + the KDF seed + fixed input data to follow counter. + length of the counter in bits + + + + Base constructor - prefix and suffix fixed input data. + + the KDF seed + fixed input data to precede counter + fixed input data to follow counter. + length of the counter in bits. + + + parameters for Key derivation functions for IEEE P1363a + + + Parameters for mask derivation functions. + + + Parameters for NaccacheStern public private key generation. For details on + this cipher, please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + 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 + + + * 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 + * Ignored + + + @return Returns the certainty. + + + @return Returns the countSmallPrimes. + + + Public key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + @param privateKey + + + @return Returns the g. + + + @return Returns the lowerSigmaBound. + + + @return Returns the n. + + + Private key parameters for NaccacheStern cipher. For details on this cipher, + please see + + http://www.gemplus.com/smart/rd/publications/pdf/NS98pkcs.pdf + + + Constructs a NaccacheSternPrivateKey + + @param g + the public enryption parameter g + @param n + the public modulus n = p*q + @param lowerSigmaBound + the public lower sigma bound up to which data can be encrypted + @param smallPrimes + the small primes, of which sigma is constructed in the right + order + @param phi_n + the private modulus phi(n) = (p-1)(q-1) + + + Cipher parameters with a fixed salt value associated with them. + + + + Parameters for the Skein hash function - a series of byte[] strings identified by integer tags. + + + Parameterised Skein can be used for: +
      +
    • MAC generation, by providing a key.
    • +
    • Randomised hashing, by providing a nonce.
    • +
    • A hash function for digital signatures, associating a + public key with the message digest.
    • +
    • A key derivation function, by providing a + key identifier.
    • +
    • Personalised hashing, by providing a + recommended format or + arbitrary personalisation string.
    • +
    +
    + + + +
    + + + The parameter type for a secret key, supporting MAC or KDF functions: 0 + + + + + The parameter type for the Skein configuration block: 4 + + + + + The parameter type for a personalisation string: 8 + + + + + The parameter type for a public key: 12 + + + + + The parameter type for a key identifier string: 16 + + + + + The parameter type for a nonce: 20 + + + + + The parameter type for the message: 48 + + + + + The parameter type for the output transformation: 63 + + + + + Obtains a map of type (int) to value (byte[]) for the parameters tracked in this object. + + + + + Obtains the value of the key parameter, or null if not + set. + + The key. + + + + Obtains the value of the personalisation parameter, or + null if not set. + + + + + Obtains the value of the public key parameter, or + null if not set. + + + + + Obtains the value of the key identifier parameter, or + null if not set. + + + + + Obtains the value of the nonce parameter, or null if + not set. + + + + + A builder for . + + + + + Sets a parameters to apply to the Skein hash function. + + + Parameter types must be in the range 0,5..62, and cannot use the value 48 + (reserved for message body). +

    + Parameters with type < 48 are processed before + the message content, parameters with type > 48 + are processed after the message and prior to output. + + the type of the parameter, in the range 5..62. + the byte sequence of the parameter. + + +

    + Sets the parameter. + +
    + + + Sets the parameter. + + + + + Implements the recommended personalisation format for Skein defined in Section 4.11 of + the Skein 1.3 specification. + + + The format is YYYYMMDD email@address distinguisher, encoded to a byte + sequence using UTF-8 encoding. + + the date the personalised application of the Skein was defined. + the email address of the creation of the personalised application. + an arbitrary personalisation string distinguishing the application. + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Sets the parameter. + + + + + Constructs a new instance with the parameters provided to this + builder. + + + + Private parameters for an SM2 key exchange. + The ephemeralPrivateKey is used to calculate the random point used in the algorithm. + + + Public parameters for an SM2 key exchange. + In this case the ephemeralPublicKey provides the random point used in the algorithm. + + + + Parameters for tweakable block ciphers. + + + + + Gets the key. + + the key to use, or null to use the current key. + + + + Gets the tweak value. + + The tweak to use, or null to use the current tweak. + + + super class for all Password Based Encyrption (Pbe) parameter generator classes. + + + base constructor. + + + initialise the Pbe generator. + + @param password the password converted into bytes (see below). + @param salt the salt to be mixed with the password. + @param iterationCount the number of iterations the "mixing" function + is to be applied for. + + + return the password byte array. + + @return the password byte array. + + + return the salt byte array. + + @return the salt byte array. + + + return the iteration count. + + @return the iteration count. + + + Generate derived parameters for a key of length keySize. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + Generate derived parameters for a key of length keySize, and + an initialisation vector (IV) of length ivSize. + + @param keySize the length, in bits, of the key required. + @param ivSize the length, in bits, of the iv required. + @return a parameters object representing a key and an IV. + + + Generate derived parameters for a key of length keySize, specifically + for use with a MAC. + + @param keySize the length, in bits, of the key required. + @return a parameters object representing a key. + + + converts a password to a byte array according to the scheme in + Pkcs5 (ascii, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + PKCS5 (UTF-8, no padding) + + @param password a character array representing the password. + @return a byte array representing the password. + + + converts a password to a byte array according to the scheme in + Pkcs12 (unicode, big endian, 2 zero pad bytes at the end). + + @param password a character array representing the password. + @return a byte array representing the password. + + + An EntropySourceProvider where entropy generation is based on a SecureRandom output using SecureRandom.generateSeed(). + + + Create a entropy source provider based on the passed in SecureRandom. + + @param secureRandom the SecureRandom to base EntropySource construction on. + @param isPredictionResistant boolean indicating if the SecureRandom is based on prediction resistant entropy or not (true if it is). + + + Return an entropy source that will create bitsRequired bits of entropy on + each invocation of getEntropy(). + + @param bitsRequired size (in bits) of entropy to be created by the provided source. + @return an EntropySource that generates bitsRequired bits of entropy on each call to its getEntropy() method. + + + + Uses RandomNumberGenerator.Create() to get randomness generator + + + + Random generation based on the digest with counter. Calling AddSeedMaterial will + always increase the entropy of the hash. +

    + Internal access to the digest is synchronized so a single one of these can be shared. +

    +
    + + A SP800-90A CTR DRBG. + + + Construct a SP800-90A CTR DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param engine underlying block cipher to use to support DRBG + @param keySizeInBits size of the key to use with the block cipher. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Pad out a key for TDEA, setting odd parity for each byte. + + @param keyMaster + @param keyOff + @param tmp + @param tmpOff + + + Used by both Dual EC and Hash. + + + A SP800-90A Hash DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param digest source digest to use for DRB stream. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each internal round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + A SP800-90A HMAC DRBG. + + + Construct a SP800-90A Hash DRBG. +

    + Minimum entropy requirement is the security strength requested. +

    + @param hMac Hash MAC to base the DRBG on. + @param securityStrength security strength required (in bits) + @param entropySource source of entropy to use for seeding/reseeding. + @param personalizationString personalization string to distinguish this DRBG (may be null). + @param nonce nonce to further distinguish this DRBG (may be null). +
    + + Return the block size (in bits) of the DRBG. + + @return the number of bits produced on each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Interface to SP800-90A deterministic random bit generators. + + + Return the block size of the DRBG. + + @return the block size (in bits) produced by each round of the DRBG. + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param additionalInput additional input to be added to the DRBG in this step. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the DRBG. + + @param additionalInput additional input to be added to the DRBG in this step. + + + Generate numBytes worth of entropy from the passed in entropy source. + + @param entropySource the entropy source to request the data from. + @param numBytes the number of bytes of entropy requested. + @return a byte array populated with the random data. + + + Generic interface for objects generating random bytes. + + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + + Takes bytes generated by an underling RandomGenerator and reverses the order in + each small window (of configurable size). +

    + Access to internals is synchronized so a single one of these can be shared. +

    +
    +
    + + Add more seed material to the generator. + A byte array to be mixed into the generator's state. + + + Add more seed material to the generator. + A long value to be mixed into the generator's state. + + + Fill byte array with random values. + Array to be filled. + + + Fill byte array with random values. + Array to receive bytes. + Index to start filling at. + Length of segment to fill. + + + Force a reseed of the DRBG. + optional additional input + + + Builder class for making SecureRandom objects based on SP 800-90A Deterministic Random Bit Generators (DRBG). + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Set the personalization string for DRBG SecureRandoms created by this builder + @param personalizationString the personalisation string for the underlying DRBG. + @return the current builder. + + + Set the security strength required for DRBGs used in building SecureRandom objects. + + @param securityStrength the security strength (in bits) + @return the current builder. + + + Set the amount of entropy bits required for seeding and reseeding DRBGs used in building SecureRandom objects. + + @param entropyBitsRequired the number of bits of entropy to be requested from the entropy source on each seed/reseed. + @return the current builder. + + + Build a SecureRandom based on a SP 800-90A Hash DRBG. + + @param digest digest algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a Hash DRBG. + + + Build a SecureRandom based on a SP 800-90A CTR DRBG. + + @param cipher the block cipher to base the DRBG on. + @param keySizeInBits key size in bits to be used with the block cipher. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a CTR DRBG. + + + Build a SecureRandom based on a SP 800-90A HMAC DRBG. + + @param hMac HMAC algorithm to use in the DRBG underneath the SecureRandom. + @param nonce nonce value to use in DRBG construction. + @param predictionResistant specify whether the underlying DRBG in the resulting SecureRandom should reseed on each request for bytes. + @return a SecureRandom supported by a HMAC DRBG. + + + A thread based seed generator - one source of randomness. +

    + Based on an idea from Marcus Lippert. +

    +
    + + Generate seed bytes. Set fast to false for best quality. +

    + If fast is set to true, the code should be round about 8 times faster when + generating a long sequence of random bytes. 20 bytes of random values using + the fast mode take less than half a second on a Nokia e70. If fast is set to false, + it takes round about 2500 ms. +

    + @param numBytes the number of bytes to generate + @param fast true if fast mode should be used +
    + + + Permutation generated by code: + + // First 1850 fractional digit of Pi number. + byte[] key = new BigInteger("14159265358979323846...5068006422512520511").ToByteArray(); + 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] + key[m % key.length]) & 0xff]; + byte temp = P[m & 0xff]; + P[m & 0xff] = P[s & 0xff]; + P[s & 0xff] = temp; + } + + + + Value generated in the same way as P. + + + + @param engine + @param entropySource + + + Populate a passed in array with random data. + + @param output output array for generated bits. + @param predictionResistant true if a reseed should be forced, false otherwise. + + @return number of bits generated, -1 if a reseed required. + + + Reseed the RNG. + + + Basic constructor, creates a builder using an EntropySourceProvider based on the default SecureRandom with + predictionResistant set to false. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the default SecureRandom does for its generateSeed() call. +

    +
    + + Construct a builder with an EntropySourceProvider based on the passed in SecureRandom and the passed in value + for prediction resistance. +

    + Any SecureRandom created from a builder constructed like this will make use of input passed to SecureRandom.setSeed() if + the passed in SecureRandom does for its generateSeed() call. +

    + @param entropySource + @param predictionResistant +
    + + Create a builder which makes creates the SecureRandom objects from a specified entropy source provider. +

    + Note: If this constructor is used any calls to setSeed() in the resulting SecureRandom will be ignored. +

    + @param entropySourceProvider a provider of EntropySource objects. +
    + + Construct a X9.31 secure random generator using the passed in engine and key. If predictionResistant is true the + generator will be reseeded on each request. + + @param engine a block cipher to use as the operator. + @param key the block cipher key to initialise engine with. + @param predictionResistant true if engine to be reseeded on each use, false otherwise. + @return a SecureRandom. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + The Digital Signature Algorithm - as described in "Handbook of Applied + Cryptography", pages 452 - 453. + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message for standard DSA the message should be a + SHA-1 hash of the real message to be verified. + + + EC-DSA as described in X9.62 + + + Default configuration, random K values. + + + Configuration with an alternate, possibly deterministic calculator of K. + + @param kCalculator a K value calculator. + + + Generate a signature for the given message using the key we were + initialised with. For conventional DSA the message should be a SHA-1 + hash of the message of interest. + + @param message the message that will be verified later. + + + return true if the value r and s represent a DSA signature for + the passed in message (for standard DSA the message should be + a SHA-1 hash of the real message to be verified). + + + GOST R 34.10-2001 Signature Algorithm + + + 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. + + + 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). + + + EC-NR as described in IEEE 1363-2000 + + + generate a signature for the given message using the key we were + initialised with. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR it *must* be at least as long. + + @param digest the digest to be signed. + @exception DataLengthException if the digest is longer than the key allows + + + return true if the value r and s represent a signature for the + message passed in. Generally, the order of the curve should be at + least as long as the hash of the message of interest, and with + ECNR, it *must* be at least as long. But just in case the signer + applied mod(n) to the longer digest, this implementation will + apply mod(n) during verification. + + @param digest the digest to be verified. + @param r the r value of the signature. + @param s the s value of the signature. + @exception DataLengthException if the digest is longer than the key allows + + + initialise the signer for signing or verification. + + @param forSigning + true if for signing, false otherwise + @param parameters + necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using the key + we were initialised with. + + + return true if the internal state represents the signature described in + the passed in array. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + true if the internal state represents the signature described in the passed in array. + + + Reset the internal state + + + Gost R 34.10-94 Signature Algorithm + + + 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. + + + 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. + + + A deterministic K calculator based on the algorithm in section 3.2 of RFC 6979. + + + Base constructor. + + @param digest digest to build the HMAC on. + + + + An interface for different encoding formats for DSA signatures. + + + + Decode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + An encoding of the (r, s) pair of a DSA signature. + The (r, s) of a DSA signature, stored in an array of exactly two elements, r followed by s. + + + Encode the (r, s) pair of a DSA signature. + The order of the group that r, s belong to. + The r value of a DSA signature. + The s value of a DSA signature. + An encoding of the DSA signature given by the provided (r, s) pair. + + + Interface define calculators of K values for DSA/ECDSA. + + + Return true if this calculator is deterministic, false otherwise. + + @return true if deterministic, otherwise false. + + + Non-deterministic initialiser. + + @param n the order of the DSA group. + @param random a source of randomness. + + + Deterministic initialiser. + + @param n the order of the DSA group. + @param d the DSA private value. + @param message the message being signed. + + + Return the next valid value of K. + + @return a K value. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 2 and 3). +

    + Note: the usual length for the salt is the length of the hash + function used in bytes.

    +
    +
    + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2, scheme 2 or 3. + + base cipher to use for signature creation/verification + digest to use. + length of salt in bytes. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + length of salt in bytes. + + + + Initialise the signer. + true if for signing, false if for verification. + parameters for signature generation/verification. If the + parameters are for generation they should be a ParametersWithRandom, + a ParametersWithSalt, or just an RsaKeyParameters object. If RsaKeyParameters + are passed in a SecureRandom will be created. + + if wrong parameter type or a fixed + salt is passed in which is the wrong length. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise, or if not sure. + + + + int to octet string. + int to octet string. + + + long to octet string. + + + mask generator function, as described in Pkcs1v2. + + + ISO9796-2 - mechanism using a hash function with recovery (scheme 1) + + + + Return a reference to the recoveredMessage message. + + The full/partial recoveredMessage message. + + + + + Generate a signer with either implicit or explicit trailers for ISO9796-2. + + base cipher to use for signature creation/verification + digest to use. + whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + + cipher to use. + + digest to sign with. + + + + compare two byte arrays - constant time. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the loaded message using the key we were + initialised with. + + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + + Return true if the full message was recoveredMessage. + + true on full message recovery, false otherwise. + + + + RSA-PSS as described in Pkcs# 1 v 2.1. +

    + Note: the usual value for the salt length is the number of + bytes in the hash function.

    +
    +
    + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the length of the salt to use (in bytes). + + + Basic constructor + the asymmetric cipher to use. + the digest to use. + the fixed salt to be used. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + + return true if the internal state represents the signature described + in the passed in array. + + + + int to octet string. + + + mask generator function, as described in Pkcs1v2. + + + + Load oid table. + + + + Initialise the signer for signing or verification. + + @param forSigning true if for signing, false otherwise + @param param necessary parameters. + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + Generate a signature for the message we've been loaded with using + the key we were initialised with. + + + return true if the internal state represents the signature described + in the passed in array. + + + The SM2 Digital Signature algorithm. + + + X9.31-1998 - signing using a hash. +

    + The message digest hash, H, is encapsulated to form a byte string as follows +

    +
    +            EB = 06 || PS || 0xBA || H || TRAILER
    +            
    + where PS is a string of bytes all of value 0xBB of length such that |EB|=|n|, and TRAILER is the ISO/IEC 10118 part number† for the digest. The byte string, EB, is converted to an integer value, the message representative, f. +
    + + Generate a signer with either implicit or explicit trailers for X9.31. + + @param cipher base cipher to use for signature creation/verification + @param digest digest to use. + @param implicit whether or not the trailer is implicit or gives the hash. + + + Constructor for a signer with an explicit digest trailer. + + @param cipher cipher to use. + @param digest digest to sign with. + + + clear possible sensitive data + + + update the internal digest with the byte b + + + update the internal digest with the byte array in + + + reset the internal state + + + generate a signature for the loaded message using the key we were + initialised with. + + + return true if the signature represents a ISO9796-2 signature + for the passed in message. + + + + A simple block result object which just carries a byte array. + + + + + Base constructor - a wrapper for the passed in byte array. + + The byte array to be wrapped. + + + + Return the number of bytes in the result + + The length of the result in bytes. + + + + Return the final result of the operation. + + A block of bytes, representing the result of an operation. + + + + Store the final result of the operation by copying it into the destination array. + + The number of bytes copied into destination. + The byte array to copy the result into. + The offset into destination to start copying the result at. + + + a wrapper for block ciphers with a single byte block size, so that they + can be treated like stream ciphers. + + + basic constructor. + + @param cipher the block cipher to be wrapped. + @exception ArgumentException if the cipher has a block size other than + one. + + + 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. + + + return the name of the algorithm we are wrapping. + + @return the name of the algorithm we are wrapping. + + + encrypt/decrypt a single byte returning the result. + + @param in the byte to be processed. + @return the result of processing the input byte. + + + 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. + + + reset the underlying cipher. This leaves it in the same state + it was at after the last init (if there was one). + + + + + + + + + + + + + + + + + + + RFC 5246 7.2 + + + + This message notifies the recipient that the sender will not send any more messages on this + connection. Note that as of TLS 1.1, failure to properly close a connection no longer + requires that a session not be resumed. This is a change from TLS 1.0 ("The session becomes + unresumable if any connection is terminated without proper close_notify messages with level + equal to warning.") to conform with widespread implementation practice. + + + An inappropriate message was received. This alert is always fatal and should never be + observed in communication between proper implementations. + + + This alert is returned if a record is received with an incorrect MAC. This alert also MUST be + returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: either it + wasn't an even multiple of the block length, or its padding values, when checked, weren't + correct. This message is always fatal and should never be observed in communication between + proper implementations (except when messages were corrupted in the network). + + + This alert was used in some earlier versions of TLS, and may have permitted certain attacks + against the CBC mode [CBCATT]. It MUST NOT be sent by compliant implementations. + + + A TLSCiphertext record was received that had a length more than 2^14+2048 bytes, or a record + decrypted to a TLSCompressed record with more than 2^14+1024 bytes. This message is always + fatal and should never be observed in communication between proper implementations (except + when messages were corrupted in the network). + + + The decompression function received improper input (e.g., data that would expand to excessive + length). This message is always fatal and should never be observed in communication between + proper implementations. + + + Reception of a handshake_failure alert message indicates that the sender was unable to + negotiate an acceptable set of security parameters given the options available. This is a + fatal error. + + + This alert was used in SSLv3 but not any version of TLS. It MUST NOT be sent by compliant + implementations. + + + A certificate was corrupt, contained signatures that did not verify correctly, etc. + + + A certificate was of an unsupported type. + + + A certificate was revoked by its signer. + + + A certificate has expired or is not currently valid. + + + Some other (unspecified) issue arose in processing the certificate, rendering it + unacceptable. + + + A field in the handshake was out of range or inconsistent with other fields. This message is + always fatal. + + + A valid certificate chain or partial chain was received, but the certificate was not accepted + because the CA certificate could not be located or couldn't be matched with a known, trusted + CA. This message is always fatal. + + + A valid certificate was received, but when access control was applied, the sender decided not + to proceed with negotiation. This message is always fatal. + + + A message could not be decoded because some field was out of the specified range or the + length of the message was incorrect. This message is always fatal and should never be + observed in communication between proper implementations (except when messages were corrupted + in the network). + + + A handshake cryptographic operation failed, including being unable to correctly verify a + signature or validate a Finished message. This message is always fatal. + + + This alert was used in some earlier versions of TLS. It MUST NOT be sent by compliant + implementations. + + + The protocol version the client has attempted to negotiate is recognized but not supported. + (For example, old protocol versions might be avoided for security reasons.) This message is + always fatal. + + + Returned instead of handshake_failure when a negotiation has failed specifically because the + server requires ciphers more secure than those supported by the client. This message is + always fatal. + + + An internal error unrelated to the peer or the correctness of the protocol (such as a memory + allocation failure) makes it impossible to continue. This message is always fatal. + + + This handshake is being canceled for some reason unrelated to a protocol failure. If the user + cancels an operation after the handshake is complete, just closing the connection by sending + a close_notify is more appropriate. This alert should be followed by a close_notify. This + message is generally a warning. + + + Sent by the client in response to a hello request or by the server in response to a client + hello after initial handshaking. Either of these would normally lead to renegotiation; when + that is not appropriate, the recipient should respond with this alert. At that point, the + original requester can decide whether to proceed with the connection. One case where this + would be appropriate is where a server has spawned a process to satisfy a request; the + process might receive security parameters (key length, authentication, etc.) at startup, and + it might be difficult to communicate changes to these parameters after that point. This + message is always a warning. + + + Sent by clients that receive an extended server hello containing an extension that they did + not put in the corresponding client hello. This message is always fatal. + + + This alert is sent by servers who are unable to retrieve a certificate chain from the URL + supplied by the client (see Section 3.3). This message MAY be fatal - for example if client + authentication is required by the server for the handshake to continue and the server is + unable to retrieve the certificate chain, it may send a fatal alert. + + + This alert is sent by servers that receive a server_name extension request, but do not + recognize the server name. This message MAY be fatal. + + + This alert is sent by clients that receive an invalid certificate status response (see + Section 3.6). This message is always fatal. + + + This alert is sent by servers when a certificate hash does not match a client provided + certificate_hash. This message is always fatal. + + + If the server does not recognize the PSK identity, it MAY respond with an + "unknown_psk_identity" alert message. + + + If TLS_FALLBACK_SCSV appears in ClientHello.cipher_suites and the highest protocol version + supported by the server is higher than the version indicated in ClientHello.client_version, + the server MUST respond with a fatal inappropriate_fallback alert [..]. + + + + RFC 5246 7.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + A queue for bytes. +

    + This file could be more optimized. +

    +
    +
    + + The smallest number which can be written as 2^x which is bigger than i. + + + The initial size for our buffer. + + + The buffer where we store our data. + + + How many bytes at the beginning of the buffer are skipped. + + + How many bytes in the buffer are valid data. + + + Add some data to our buffer. + A byte-array to read data from. + How many bytes to skip at the beginning of the array. + How many bytes to read from the array. + + + The number of bytes which are available in this buffer. + + + Copy some bytes from the beginning of the data to the provided Stream. + The Stream to copy the bytes to. + How many bytes to copy. + If insufficient data is available. + If there is a problem copying the data. + + + Read data from the buffer. + The buffer where the read data will be copied to. + How many bytes to skip at the beginning of buf. + How many bytes to read at all. + How many bytes from our data to skip. + + + Return a MemoryStream over some bytes at the beginning of the data. + How many bytes will be readable. + A MemoryStream over the data. + If insufficient data is available. + + + Remove some bytes from our data from the beginning. + How many bytes to remove. + + + Parsing and encoding of a Certificate struct from RFC 4346. +

    +

    +             opaque ASN.1Cert<2^24-1>;
    +            
    +             struct {
    +                 ASN.1Cert certificate_list<0..2^24-1>;
    +             } Certificate;
    +             
    + + @see Org.BouncyCastle.Asn1.X509.X509CertificateStructure +
    + + The certificates. + + + @return an array of {@link org.bouncycastle.asn1.x509.Certificate} representing a certificate + chain. + + + @return true if this certificate chain contains no certificates, or + false otherwise. + + + Encode this {@link Certificate} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link Certificate} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link Certificate} object. + @throws IOException + + + Parsing and encoding of a CertificateRequest struct from RFC 4346. +

    +

    +             struct {
    +                 ClientCertificateType certificate_types<1..2^8-1>;
    +                 DistinguishedName certificate_authorities<3..2^16-1>
    +             } CertificateRequest;
    +             
    + + @see ClientCertificateType + @see X509Name +
    + + @param certificateTypes see {@link ClientCertificateType} for valid constants. + @param certificateAuthorities an {@link IList} of {@link X509Name}. + + + @return an array of certificate types + @see {@link ClientCertificateType} + + + @return an {@link IList} of {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + @return an {@link IList} of {@link X509Name} + + + Encode this {@link CertificateRequest} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateRequest} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateRequest} object. + @throws IOException + + + Encode this {@link CertificateStatus} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatus} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatus} object. + @throws IOException + + + Encode this {@link CertificateStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link CertificateStatusRequest} object. + @throws IOException + + + RFC 6091 + + + @param type + see {@link CertChainType} for valid constants. + @param urlAndHashList + a {@link IList} of {@link UrlAndHash}. + + + @return {@link CertChainType} + + + @return an {@link IList} of {@link UrlAndHash} + + + Encode this {@link CertificateUrl} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link CertificateUrl} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link CertificateUrl} object. + @throws IOException + + + draft-ietf-tls-chacha20-poly1305-04 + + + + + + + + + + + + + + + + RFC 2246 A.5 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + A combined hash, which implements md5(m) || sha1(m). + + + @see org.bouncycastle.crypto.Digest#update(byte[], int, int) + + + @see org.bouncycastle.crypto.Digest#doFinal(byte[], int) + + + @see org.bouncycastle.crypto.Digest#reset() + + + + RFC 2246 6.1 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 6.2.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Accept various standard DH groups with 'P' at least DefaultMinimumPrimeBits bits. + + + Accept various standard DH groups with 'P' at least the specified number of bits. + + + Accept a custom set of group parameters, subject to a minimum bitlength for 'P'. + An IList of acceptable DHParameters. + The minimum acceptable bitlength of the 'P' parameter. + + + + + + + + + Accept only the group parameters specified in RFC 5054 Appendix A. + + + Specify a custom set of acceptable group parameters. + + @param groups a {@link Vector} of acceptable {@link SRP6GroupParameters} + + + Buffers input until the hash algorithm is determined. + + + @return a {@link SignatureAndHashAlgorithm} (or null before TLS 1.2). + + + Encode this {@link DigitallySigned} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link DigitallySigned} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link DigitallySigned} object. + @throws IOException + + + + + + + + + + + + + + + + + + + + + + + + + + + Check that there are no "extra" messages left in the current inbound flight + + + RFC 4347 4.1.2.5 Anti-replay +

    + Support fast rejection of duplicate records by maintaining a sliding receive window + + + Check whether a received record with the given sequence number should be rejected as a duplicate. + + @param seq the 48-bit DTLSPlainText.sequence_number field of a received record. + @return true if the record should be discarded without further processing. + + + Report that a received record with the given sequence number passed authentication checks. + + @param seq the 48-bit DTLSPlainText.sequence_number field of an authenticated record. + + + When a new epoch begins, sequence numbers begin again at 0 + + +

    RFC 4492 5.4. (Errata ID: 2389) +
    + + + RFC 4492 5.4 + + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a prime field. + + + Indicates the elliptic curve domain parameters are conveyed verbosely, and the + underlying finite field is a characteristic-2 field. + + + Indicates that a named curve is used. This option SHOULD be used when applicable. + + + + RFC 4492 5.1.2 + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 5705 + + + RFC 5246 7.4.1.4.1 + + + Encode this {@link HeartbeatExtension} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatExtension} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatExtension} object. + @throws IOException + + + Encode this {@link HeartbeatMessage} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link HeartbeatMessage} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link HeartbeatMessage} object. + @throws IOException + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + RFC 2246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + RFC 4492 5.1.1 + The named curves defined here are those specified in SEC 2 [13]. Note that many of + these curves are also recommended in ANSI X9.62 [7] and FIPS 186-2 [11]. Values 0xFE00 + through 0xFEFF are reserved for private use. Values 0xFF01 and 0xFF02 indicate that the + client supports arbitrary prime and characteristic-2 curves, respectively (the curve + parameters must be encoded explicitly in ECParameters). + + + + Encode this {@link NewSessionTicket} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link NewSessionTicket} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link NewSessionTicket} object. + @throws IOException + + + RFC 3546 3.6 + + + @param responderIDList + an {@link IList} of {@link ResponderID}, specifying the list of trusted OCSP + responders. An empty list has the special meaning that the responders are + implicitly known to the server - e.g., by prior arrangement. + @param requestExtensions + OCSP request extensions. A null value means that there are no extensions. + + + @return an {@link IList} of {@link ResponderID} + + + @return OCSP request extensions + + + Encode this {@link OcspStatusRequest} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link OcspStatusRequest} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return an {@link OcspStatusRequest} object. + @throws IOException + + + RFC 5246 + + Note that the values here are implementation-specific and arbitrary. It is recommended not to + depend on the particular values (e.g. serialization). + + + + + + + An implementation of the TLS 1.0/1.1/1.2 record layer, allowing downgrade to SSLv3. + + + RFC 5246 E.1. "Earlier versions of the TLS specification were not fully clear on what the + record layer version number (TLSPlaintext.version) should contain when sending ClientHello + (i.e., before it is known which version of the protocol will be employed). Thus, TLS servers + compliant with this specification MUST accept any value {03,XX} as the record layer version + number for ClientHello." + + + @return {@link ConnectionEnd} + + + @return {@link CipherSuite} + + + @return {@link CompressionMethod} + + + @return {@link PRFAlgorithm} + + + Encode this {@link ServerName} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerName} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerName} object. + @throws IOException + + + @param serverNameList an {@link IList} of {@link ServerName}. + + + @return an {@link IList} of {@link ServerName}. + + + Encode this {@link ServerNameList} to a {@link Stream}. + + @param output + the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link ServerNameList} from a {@link Stream}. + + @param input + the {@link Stream} to parse from. + @return a {@link ServerNameList} object. + @throws IOException + + + Encode this {@link ServerSRPParams} to an {@link OutputStream}. + + @param output + the {@link OutputStream} to encode to. + @throws IOException + + + Parse a {@link ServerSRPParams} from an {@link InputStream}. + + @param input + the {@link InputStream} to parse from. + @return a {@link ServerSRPParams} object. + @throws IOException + + + RFC 5246 7.4.1.4.1 (in RFC 2246, there were no specific values assigned) + + + RFC 5246 7.4.1.4.1 + + + @param hash {@link HashAlgorithm} + @param signature {@link SignatureAlgorithm} + + + @return {@link HashAlgorithm} + + + @return {@link SignatureAlgorithm} + + + Encode this {@link SignatureAndHashAlgorithm} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link SignatureAndHashAlgorithm} from a {@link Stream}. + + @param input the {@link Stream} to parse from. + @return a {@link SignatureAndHashAlgorithm} object. + @throws IOException + + + An implementation of {@link TlsSRPIdentityManager} that simulates the existence of "unknown" identities + to obscure the fact that there is no verifier for them. + + + Create a {@link SimulatedTlsSRPIdentityManager} that implements the algorithm from RFC 5054 2.5.1.3 + + @param group the {@link SRP6GroupParameters} defining the group that SRP is operating in + @param seedKey the secret "seed key" referred to in RFC 5054 2.5.1.3 + @return an instance of {@link SimulatedTlsSRPIdentityManager} + + + HMAC implementation based on original internet draft for HMAC (RFC 2104) + + The difference is that padding is concatentated versus XORed with the key + + H(K + opad, H(K + ipad, text)) + + + Base constructor for one of the standard digest algorithms that the byteLength of + the algorithm is know for. Behaviour is undefined for digests other than MD5 or SHA1. + + @param digest the digest. + + + Reset the mac generator. + + + RFC 4680 + + + + + + + + + + + + + + + + + + + + + + Called by the protocol handler to report the server certificate. + + + This method is responsible for certificate verification and validation + + The server received + + + + + Return client credentials in response to server's certificate request + + + A containing server certificate request details + + + A to be used for client authentication + (or null for no client authentication) + + + + + + A generic TLS 1.0-1.2 / SSLv3 block cipher. This can be used for AES or 3DES for example. + + + + + + + + + + + + + + + + + + + + Called at the start of a new TLS session, before any other methods. + + + A + + + + Return the session this client wants to resume, if any. + Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. + + A representing the resumable session to be used for this connection, + or null to use a new session. + + + + + Return the to use for the TLSPlaintext.version field prior to + receiving the server version. NOTE: This method is not called for DTLS. + + + See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value + {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest + version number supported by the client, and the value of ClientHello.client_version. No + single value will guarantee interoperability with all old servers, but this is a complex + topic beyond the scope of this document." + + The to use. + + + + Get the list of cipher suites that this client supports. + + + An array of values, each specifying a supported cipher suite. + + + + + Get the list of compression methods that this client supports. + + + An array of values, each specifying a supported compression method. + + + + + Get the (optional) table of client extensions to be included in (extended) client hello. + + + A (Int32 -> byte[]). May be null. + + + + + + + + + Notifies the client of the session_id sent in the ServerHello. + + An array of + + + + Report the cipher suite that was selected by the server. + + + The protocol handler validates this value against the offered cipher suites + + + + A + + + + + Report the compression method that was selected by the server. + + + The protocol handler validates this value against the offered compression methods + + + + A + + + + + Report the extensions from an extended server hello. + + + Will only be called if we returned a non-null result from . + + + A (Int32 -> byte[]) + + + + A list of + + + + + Return an implementation of to negotiate the key exchange + part of the protocol. + + + A + + + + + + Return an implementation of to handle authentication + part of the protocol. + + + + + A list of + + + + RFC 5077 3.3. NewSessionTicket Handshake Message + + This method will be called (only) when a NewSessionTicket handshake message is received. The + ticket is opaque to the client and clients MUST NOT examine the ticket under the assumption + that it complies with e.g. RFC 5077 4. Recommended Ticket Construction. + + The ticket + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the server + @param output The stream of data to the server + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Initiates a TLS handshake in the role of client.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsClient The {@link TlsClient} to use for the handshake. + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Used to get the resumable session, if any, used by this connection. Only available after the + handshake has successfully completed. + + @return A {@link TlsSession} representing the resumable session used by this connection, or + null if no resumable session available. + @see TlsPeer#NotifyHandshakeComplete() + + + Export keying material according to RFC 5705: "Keying Material Exporters for TLS". + + @param asciiLabel indicates which application will use the exported keys. + @param context_value allows the application using the exporter to mix its own data with the TLS PRF for + the exporter output. + @param length the number of bytes to generate + @return a pseudorandom bit string of 'length' bytes generated from the master_secret. + + + (D)TLS DH key exchange. + + + An interface for verifying that Diffie-Hellman parameters are acceptable. + + + Verify that the given DHParameters are acceptable. + The DHParameters to verify. + true if (and only if) the specified parameters are acceptable. + + + (D)TLS ECDHE key exchange (see RFC 4492). + + + (D)TLS ECDH key exchange (see RFC 4492). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic interface for key exchange implementations in (D)TLS. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A generic TLS MAC implementation, acting as an HMAC based on some underlying Digest. + + + + Generate a new instance of an TlsMac. + + @param context the TLS client context + @param digest The digest to use. + @param key A byte-array where the key for this MAC is located. + @param keyOff The number of bytes to skip, before the key starts in the buffer. + @param keyLen The length of the key. + + + @return the MAC write secret + + + @return The output length of this MAC. + + + Calculate the MAC for some given data. + + @param type The message type of the message. + @param message A byte-buffer containing the message. + @param offset The number of bytes to skip, before the message starts. + @param length The length of the message. + @return A new byte-buffer containing the MAC value. + + + + This exception will be thrown(only) when the connection is closed by the peer without sending a + close_notify warning alert. + + + If this happens, the TLS protocol cannot rule out truncation of the connection data (potentially + malicious). It may be possible to check for truncation via some property of a higher level protocol + built upon TLS, e.g.the Content-Length header for HTTPS. + + + + + A NULL CipherSuite, with optional MAC. + + + + + + + + + + + + + + + + + This implementation supports RFC 7627 and will always negotiate the extended_master_secret + extension where possible. + + + When connecting to a peer that does not offer/accept this extension, it is recommended to + abort the handshake. This option is provided for interoperability with legacy peers, + although some TLS features will be disabled in that case (see RFC 7627 5.4). + + + true if the handshake should be aborted when the peer does not negotiate the + extended_master_secret extension, or false to support legacy interoperability. + + + + + draft-mathewson-no-gmtunixtime-00 2. "If existing users of a TLS implementation may rely on + gmt_unix_time containing the current time, we recommend that implementors MAY provide the + ability to set gmt_unix_time as an option only, off by default." + + + true if the current time should be used in the gmt_unix_time field of + Random, or false if gmt_unix_time should contain a cryptographically + random value. + + + + + Report whether the server supports secure renegotiation + + + The protocol handler automatically processes the relevant extensions + + + A , true if the server supports secure renegotiation + + + + + + Return an implementation of to handle record compression. + + A + + + + + Return an implementation of to use for encryption/decryption. + + A + + + + This method will be called when an alert is raised by the protocol. + + + A human-readable message explaining what caused this alert. May be null. + The Exception that caused this alert to be raised. May be null. + + + This method will be called when an alert is received from the remote peer. + + + + + Notifies the peer that the handshake has been successfully completed. + + + + This method is called, when a change cipher spec message is received. + + @throws IOException If the message has an invalid content or the handshake is not in the correct + state. + + + Read data from the network. The method will return immediately, if there is still some data + left in the buffer, or block until some application data has been read from the network. + + @param buf The buffer where the data will be copied to. + @param offset The position where the data will be placed in the buffer. + @param len The maximum number of bytes to read. + @return The number of bytes read. + @throws IOException If something goes wrong during reading data. + + + Send some application data to the remote system. +

    + The method will handle fragmentation internally. + + @param buf The buffer with the data. + @param offset The position in the buffer where the data is placed. + @param len The length of the data. + @throws IOException If something goes wrong during sending. + + +

    The secure bidirectional stream for this connection + Only allowed in blocking mode. +
    + + Should be called in non-blocking mode when the input data reaches EOF. + + + Equivalent to OfferInput(input, 0, input.length) + @see TlsProtocol#OfferInput(byte[], int, int) + @param input The input buffer to offer + @throws IOException If an error occurs while decrypting or processing a record + + + Offer input from an arbitrary source. Only allowed in non-blocking mode.
    +
    + This method will decrypt and process all records that are fully available. + If only part of a record is available, the buffer will be retained until the + remainder of the record is offered.
    +
    + If any records containing application data were processed, the decrypted data + can be obtained using {@link #readInput(byte[], int, int)}. If any records + containing protocol data were processed, a response may have been generated. + You should always check to see if there is any available output after calling + this method by calling {@link #getAvailableOutputBytes()}. + @param input The input buffer to offer + @param inputOff The offset within the input buffer that input begins + @param inputLen The number of bytes of input being offered + @throws IOException If an error occurs while decrypting or processing a record +
    + + Gets the amount of received application data. A call to {@link #readInput(byte[], int, int)} + is guaranteed to be able to return at least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available application data +
    + + Retrieves received application data. Use {@link #getAvailableInputBytes()} to check + how much application data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the application data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Offer output from an arbitrary source. Only allowed in non-blocking mode.
    +
    + After this method returns, the specified section of the buffer will have been + processed. Use {@link #readOutput(byte[], int, int)} to get the bytes to + transmit to the other peer.
    +
    + This method must not be called until after the handshake is complete! Attempting + to call it before the handshake is complete will result in an exception. + @param buffer The buffer containing application data to encrypt + @param offset The offset at which to begin reading data + @param length The number of bytes of data to read + @throws IOException If an error occurs encrypting the data, or the handshake is not complete +
    + + Gets the amount of encrypted data available to be sent. A call to + {@link #readOutput(byte[], int, int)} is guaranteed to be able to return at + least this much data.
    +
    + Only allowed in non-blocking mode. + @return The number of bytes of available encrypted data +
    + + Retrieves encrypted data to be sent. Use {@link #getAvailableOutputBytes()} to check + how much encrypted data is currently available. This method functions similarly to + {@link InputStream#read(byte[], int, int)}, except that it never blocks. If no data + is available, nothing will be copied and zero will be returned.
    +
    + Only allowed in non-blocking mode. + @param buffer The buffer to hold the encrypted data + @param offset The start offset in the buffer at which the data is written + @param length The maximum number of bytes to read + @return The total number of bytes copied to the buffer. May be less than the + length specified if the length was greater than the amount of available data. +
    + + Closes this connection. + + @throws IOException If something goes wrong during closing. + + + Make sure the InputStream 'buf' now empty. Fail otherwise. + + @param buf The InputStream to check. + @throws IOException If 'buf' is not empty. + + + 'sender' only relevant to SSLv3 + + + Both streams can be the same object + + + (D)TLS PSK key exchange (RFC 4279). + + + (D)TLS and SSLv3 RSA key exchange. + + + + + + + + + + + + + + + + + + A (Int32 -> byte[]). Will never be null. + + + + + + + + + + + + + + Get the (optional) table of server extensions to be included in (extended) server hello. + + + A (Int32 -> byte[]). May be null. + + + + + + A (). May be null. + + + + + + + + + This method will be called (only) if the server included an extension of type + "status_request" with empty "extension_data" in the extended server hello. See RFC 3546 + 3.6. Certificate Status Request. If a non-null is returned, it + is sent to the client as a handshake message of type "certificate_status". + + A to be sent to the client (or null for none). + + + + + + + + + + () + + + + + Called by the protocol handler to report the client certificate, only if GetCertificateRequest + returned non-null. + + Note: this method is responsible for certificate verification and validation. + the effective client certificate (may be an empty chain). + + + + RFC 5077 3.3. NewSessionTicket Handshake Message. + + This method will be called (only) if a NewSessionTicket extension was sent by the server. See + RFC 5077 4. Recommended Ticket Construction for recommended format and protection. + + The ticket) + + + + Constructor for blocking mode. + @param stream The bi-directional stream of data to/from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for blocking mode. + @param input The stream of data from the client + @param output The stream of data to the client + @param secureRandom Random number generator for various cryptographic functions + + + Constructor for non-blocking mode.
    +
    + When data is received, use {@link #offerInput(java.nio.ByteBuffer)} to + provide the received ciphertext, then use + {@link #readInput(byte[], int, int)} to read the corresponding cleartext.
    +
    + Similarly, when data needs to be sent, use + {@link #offerOutput(byte[], int, int)} to provide the cleartext, then use + {@link #readOutput(byte[], int, int)} to get the corresponding + ciphertext. + + @param secureRandom + Random number generator for various cryptographic functions +
    + + Receives a TLS handshake in the role of server.
    +
    + In blocking mode, this will not return until the handshake is complete. + In non-blocking mode, use {@link TlsPeer#notifyHandshakeComplete()} to + receive a callback when the handshake is complete. + + @param tlsServer + @throws IOException If in blocking mode and handshake was not successful. +
    + + + + + Check whether the given SRP group parameters are acceptable for use. + + @param group the {@link SRP6GroupParameters} to check + @return true if (and only if) the specified group parameters are acceptable + + + Lookup the {@link TlsSRPLoginParameters} corresponding to the specified identity. + + NOTE: To avoid "identity probing", unknown identities SHOULD be handled as recommended in RFC + 5054 2.5.1.3. {@link SimulatedTlsSRPIdentityManager} is provided for this purpose. + + @param identity + the SRP identity sent by the connecting client + @return the {@link TlsSRPLoginParameters} for the specified identity, or else 'simulated' + parameters if the identity is not recognized. A null value is also allowed, but not + recommended. + + + (D)TLS SRP key exchange (RFC 5054). + + + RFC 5764 DTLS Extension to Establish Keys for SRTP. + + + + + + + + + + + + Some helper functions for MicroTLS. + + + Add a 'signature_algorithms' extension to existing extensions. + + @param extensions A {@link Hashtable} to add the extension to. + @param supportedSignatureAlgorithms {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + Get a 'signature_algorithms' extension from extensions. + + @param extensions A {@link Hashtable} to get the extension from, if it is present. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}, or null. + @throws IOException + + + Create a 'signature_algorithms' extension value. + + @param supportedSignatureAlgorithms A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @return A byte array suitable for use as an extension value. + @throws IOException + + + Read 'signature_algorithms' extension data. + + @param extensionData The extension data. + @return A {@link Vector} containing at least 1 {@link SignatureAndHashAlgorithm}. + @throws IOException + + + RFC 6066 5. + + + Encode this {@link UrlAndHash} to a {@link Stream}. + + @param output the {@link Stream} to encode to. + @throws IOException + + + Parse a {@link UrlAndHash} from a {@link Stream}. + + @param context + the {@link TlsContext} of the current connection. + @param input + the {@link Stream} to parse from. + @return a {@link UrlAndHash} object. + @throws IOException + + + RFC 4681 + + + RFC 5764 4.1.1 + + + @param protectionProfiles see {@link SrtpProtectionProfile} for valid constants. + @param mki valid lengths from 0 to 255. + + + @return see {@link SrtpProtectionProfile} for valid constants. + + + @return valid lengths from 0 to 255. + + + Create an AlgorithmIdentifier for the passed in encryption algorithm. + + @param encryptionOID OID for the encryption algorithm + @param keySize key size in bits (-1 if unknown) + @param random SecureRandom to use for parameter generation. + @return a full AlgorithmIdentifier including parameters + @throws IllegalArgumentException if encryptionOID cannot be matched + + + Create a key generator for the passed in Object Identifier. + + @param algorithm the Object Identifier indicating the algorithn the generator is for. + @param random a source of random to initialise the generator with. + @return an initialised CipherKeyGenerator. + @throws IllegalArgumentException if the algorithm cannot be identified. + + + return a = a + b - b preserved. + + + unsigned comparison on two arrays - note the arrays may + start with leading zeros. + + + return z = x / y - done in place (z value preserved, x contains the + remainder) + + + return whether or not a BigInteger is probably prime with a + probability of 1 - (1/2)**certainty. +

    From Knuth Vol 2, pg 395.

    +
    + + Calculate the numbers u1, u2, and u3 such that: + + u1 * a + u2 * b = u3 + + where u3 is the greatest common divider of a and b. + a and b using the extended Euclid algorithm (refer p. 323 + of The Art of Computer Programming vol 2, 2nd ed). + This also seems to have the side effect of calculating + some form of multiplicative inverse. + + @param a First number to calculate gcd for + @param b Second number to calculate gcd for + @param u1Out the return object for the u1 value + @return The greatest common divisor of a and b + + + return w with w = x * x - w is assumed to have enough space. + + + return x with x = y * z - x is assumed to have enough space. + + + Calculate mQuote = -m^(-1) mod b with b = 2^32 (32 = word size) + + + Montgomery multiplication: a = x * y * R^(-1) mod m +
    + Based algorithm 14.36 of Handbook of Applied Cryptography. +
    +
  • m, x, y should have length n
  • +
  • a should have length (n + 1)
  • +
  • b = 2^32, R = b^n
  • +
    + The result is put in x +
    + NOTE: the indices of x, y, m, a different in HAC and in Java +
    + + return x = x % y - done in place (y value preserved) + + + do a left shift - this returns a new array. + + + do a right shift - this does it in place. + + + do a right shift by one - this does it in place. + + + returns x = x - y - we assume x is >= y + + + Class representing a simple version of a big decimal. A + SimpleBigDecimal 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 scale of the SimpleBigDecimal. + Unlike in {@link java.math.BigDecimal BigDecimal}, the scale is not adjusted + automatically, but must be set manually. All SimpleBigDecimals + taking part in the same arithmetic operation must have equal scale. The + result of a multiplication of two SimpleBigDecimals returns a + SimpleBigDecimal with double scale. + + + Returns a SimpleBigDecimal representing the same numerical + value as value. + @param value The value of the SimpleBigDecimal to be + created. + @param scale The scale of the SimpleBigDecimal to be + created. + @return The such created SimpleBigDecimal. + + + Constructor for SimpleBigDecimal. The value of the + constructed SimpleBigDecimal Equals bigInt / + 2scale. + @param bigInt The bigInt value parameter. + @param scale The scale of the constructed SimpleBigDecimal. + + + Class holding methods for point multiplication based on the window + τ-adic nonadjacent form (WTNAF). The algorithms are based on the + paper "Improved Algorithms for Arithmetic on Anomalous Binary Curves" + by Jerome A. Solinas. The paper first appeared in the Proceedings of + Crypto 1997. + + + The window width of WTNAF. The standard value of 4 is slightly less + than optimal for running time, but keeps space requirements for + precomputation low. For typical curves, a value of 5 or 6 results in + a better running time. When changing this value, the + αu's must be computed differently, see + e.g. "Guide to Elliptic Curve Cryptography", Darrel Hankerson, + Alfred Menezes, Scott Vanstone, Springer-Verlag New York Inc., 2004, + p. 121-122 + + + 24 + + + The αu's for a=0 as an array + of ZTauElements. + + + The αu's for a=0 as an array + of TNAFs. + + + The αu's for a=1 as an array + of ZTauElements. + + + The αu's for a=1 as an array + of TNAFs. + + + Computes the norm of an element λ of + Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The norm of λ. + + + Computes the norm of an element λ of + R[τ], where λ = u + vτ + and u and u are real numbers (elements of + R). + @param mu The parameter μ of the elliptic curve. + @param u The real part of the element λ of + R[τ]. + @param v The τ-adic part of the element + λ of R[τ]. + @return The norm of λ. + + + Rounds an element λ of R[τ] + to an element of Z[τ], such that their difference + has minimal norm. λ is given as + λ = λ0 + λ1τ. + @param lambda0 The component λ0. + @param lambda1 The component λ1. + @param mu The parameter μ of the elliptic curve. Must + equal 1 or -1. + @return The rounded element of Z[τ]. + @throws ArgumentException if lambda0 and + lambda1 do not have same scale. + + + Approximate division by n. For an integer + k, the value λ = s k / n is + computed to c bits of accuracy. + @param k The parameter k. + @param s The curve parameter s0 or + s1. + @param vm The Lucas Sequence element Vm. + @param a The parameter a of the elliptic curve. + @param m The bit length of the finite field + Fm. + @param c The number of bits of accuracy, i.e. the scale of the returned + SimpleBigDecimal. + @return The value λ = s k / n computed to + c bits of accuracy. + + + Computes the τ-adic NAF (non-adjacent form) of an + element λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ]. + @return The τ-adic NAF of λ. + + + Applies the operation τ() to an + AbstractF2mPoint. + @param p The AbstractF2mPoint to which τ() is applied. + @return τ(p) + + + Returns the parameter μ of the elliptic curve. + @param curve The elliptic curve from which to obtain μ. + The curve must be a Koblitz curve, i.e. a Equals + 0 or 1 and b Equals + 1. + @return μ of the elliptic curve. + @throws ArgumentException if the given ECCurve is not a Koblitz + curve. + + + Calculates the Lucas Sequence elements Uk-1 and + Uk or Vk-1 and + Vk. + @param mu The parameter μ of the elliptic curve. + @param k The index of the second element of the Lucas Sequence to be + returned. + @param doV If set to true, computes Vk-1 and + Vk, otherwise Uk-1 and + Uk. + @return An array with 2 elements, containing Uk-1 + and Uk or Vk-1 + and Vk. + + + Computes the auxiliary value tw. If the width is + 4, then for mu = 1, tw = 6 and for + mu = -1, tw = 10 + @param mu The parameter μ of the elliptic curve. + @param w The window width of the WTNAF. + @return the auxiliary value tw + + + Computes the auxiliary values s0 and + s1 used for partial modular reduction. + @param curve The elliptic curve for which to compute + s0 and s1. + @throws ArgumentException if curve is not a + Koblitz curve (Anomalous Binary Curve, ABC). + + + Partial modular reduction modulo + m - 1)/(τ - 1). + @param k The integer to be reduced. + @param m The bitlength of the underlying finite field. + @param a The parameter a of the elliptic curve. + @param s The auxiliary values s0 and + s1. + @param mu The parameter μ of the elliptic curve. + @param c The precision (number of bits of accuracy) of the partial + modular reduction. + @return ρ := k partmod (τm - 1)/(τ - 1) + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by a BigInteger using the reduced τ-adic + NAF (RTNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param k The BigInteger by which to Multiply p. + @return k * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to Multiply. + @param lambda The element λ of + Z[τ]. + @return λ * p + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the τ-adic NAF (TNAF) method, given the TNAF + of λ. + @param p The AbstractF2mPoint to Multiply. + @param u The the TNAF of λ.. + @return λ * p + + + Computes the [τ]-adic window NAF of an element + λ of Z[τ]. + @param mu The parameter μ of the elliptic curve. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @param width The window width of the resulting WNAF. + @param pow2w 2width. + @param tw The auxiliary value tw. + @param alpha The αu's for the window width. + @return The [τ]-adic window NAF of + λ. + + + Does the precomputation for WTNAF multiplication. + @param p The ECPoint for which to do the precomputation. + @param a The parameter a of the elliptic curve. + @return The precomputation array for p. + + + Class representing an element of Z[τ]. Let + λ be an element of Z[τ]. Then + λ is given as λ = u + vτ. The + components u and v may be used directly, there + are no accessor methods. + Immutable class. + + + The "real" part of λ. + + + The "τ-adic" part of λ. + + + Constructor for an element λ of + Z[τ]. + @param u The "real" part of λ. + @param v The "τ-adic" part of + λ. + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(boolean)} + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.CreatePoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + return a sqrt root - the routine verifies that the calculation returns the right value - if + none exists it returns null. + + + Create a point which encodes with point compression. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + + @deprecated Use ECCurve.createPoint to construct points + + + Create a point that encodes with or without point compresion. + + @param curve + the curve to use + @param x + affine x co-ordinate + @param y + affine y co-ordinate + @param withCompression + if true encode with point compression + + @deprecated per-point compression property will be removed, refer + {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + @deprecated Use ECCurve.createPoint to construct points + + + @deprecated per-point compression property will be removed, refer {@link #getEncoded(bool)} + + + Simple shift-and-add multiplication. Serves as reference implementation to verify (possibly + faster) implementations, and for very small scalars. CAUTION: This implementation is NOT + constant-time in any way. It is only intended to be used for diagnostics. + + @param p + The point to multiply. + @param k + The multiplier. + @return The result of the point multiplication kP. + + + Base class for an elliptic curve. + + + Compute a PreCompInfo for a point on this curve, under a given name. Used by + ECMultipliers to save the precomputation for this ECPoint for use + by subsequent multiplication. + + @param point + The ECPoint to store precomputations for. + @param name + A String used to index precomputations of different types. + @param callback + Called to calculate the PreCompInfo. + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. Where more + than one point is to be normalized, this method will generally be more efficient than + normalizing each point separately. An (optional) z-scaling factor can be applied; effectively + each z coordinate is scaled by this value prior to normalization (but only one + actual multiplication is needed). + + @param points + An array of points that will be updated in place with their normalized versions, + where necessary + @param off + The start of the range of points to normalize + @param len + The length of the range of points to normalize + @param iso + The (optional) z-scaling factor - can be null + + + Create a cache-safe lookup table for the specified sequence of points. All the points MUST + belong to this ECCurve instance, and MUST already be normalized. + + + Sets the default ECMultiplier, unless already set. + + + Decode a point on this curve from its ASN.1 encoding. The different + encodings are taken account of, including point compression for + Fp (X9.62 s 4.2.1 pg 17). + @return The decoded point. + + + Elliptic curve over Fp + + + The auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Solves a quadratic equation z2 + z = beta(X9.62 + D.1.6) The other solution is z + 1. + + @param beta + The value to solve the quadratic equation for. + @return the solution for z2 + z = beta or + null if no solution exists. + + + @return the auxiliary values s0 and + s1 used for partial modular reduction for + Koblitz curves. + + + Returns true if this is a Koblitz curve (ABC curve). + @return true if this is a Koblitz curve (ABC curve), false otherwise + + + Elliptic curves over F2m. The Weierstrass equation is given by + y2 + xy = x3 + ax2 + b. + + + The exponent m of F2m. + + + TPB: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + PPB: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + TPB: Always set to 0
    + PPB: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + The point at infinity on this curve. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Trinomial Polynomial Basis (TPB). + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + + + Constructor for Pentanomial Polynomial Basis (PPB). + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param a The coefficient a in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param b The coefficient b in the Weierstrass equation + for non-supersingular elliptic curves over + F2m. + @param order The order of the main subgroup of the elliptic curve. + @param cofactor The cofactor of the elliptic curve, i.e. + #Ea(F2m) = h * n. + + + Return true if curve uses a Trinomial basis. + + @return true if curve Trinomial, false otherwise. + + + return the field name for this field. + + @return the string "Fp". + + + return a sqrt root - the routine verifies that the calculation + returns the right value - if none exists it returns null. + + + Class representing the Elements of the finite field + F2m in polynomial basis (PB) + representation. Both trinomial (Tpb) and pentanomial (Ppb) polynomial + basis representations are supported. Gaussian normal basis (GNB) + representation is not supported. + + + Indicates gaussian normal basis representation (GNB). Number chosen + according to X9.62. GNB is not implemented at present. + + + Indicates trinomial basis representation (Tpb). Number chosen + according to X9.62. + + + Indicates pentanomial basis representation (Ppb). Number chosen + according to X9.62. + + + Tpb or Ppb. + + + The exponent m of F2m. + + + The LongArray holding the bits. + + + Constructor for Ppb. + @param m The exponent m of + F2m. + @param k1 The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k2 The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param k3 The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Constructor for Tpb. + @param m The exponent m of + F2m. + @param k The integer k where xm + + xk + 1 represents the reduction + polynomial f(z). + @param x The BigInteger representing the value of the field element. + + + Checks, if the ECFieldElements a and b + are elements of the same field F2m + (having the same representation). + @param a field element. + @param b field element to be compared. + @throws ArgumentException if a and b + are not elements of the same field + F2m (having the same + representation). + + + @return the representation of the field + F2m, either of + {@link F2mFieldElement.Tpb} (trinomial + basis representation) or + {@link F2mFieldElement.Ppb} (pentanomial + basis representation). + + + @return the degree m of the reduction polynomial + f(z). + + + @return Tpb: The integer k where xm + + xk + 1 represents the reduction polynomial + f(z).
    + Ppb: The integer k1 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always returns 0
    + Ppb: The integer k2 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + @return Tpb: Always set to 0
    + Ppb: The integer k3 where xm + + xk3 + xk2 + xk1 + 1 + represents the reduction polynomial f(z).
    +
    + + base class for points on elliptic curves. + + + Returns the affine x-coordinate after checking that this point is normalized. + + @return The affine x-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the affine y-coordinate after checking that this point is normalized + + @return The affine y-coordinate of this point + @throws IllegalStateException if the point is not normalized + + + Returns the x-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineXCoord if you expect the point to already have been normalized. + + @return the x-coordinate of this point + + + Returns the y-coordinate. + + Caution: depending on the curve's coordinate system, this may not be the same value as in an + affine coordinate system; use Normalize() to get a point where the coordinates have their + affine values, or use AffineYCoord if you expect the point to already have been normalized. + + @return the y-coordinate of this point + + + Normalization ensures that any projective coordinate is 1, and therefore that the x, y + coordinates reflect those of the equivalent point in an affine coordinate system. + + @return a new ECPoint instance representing the same point, but with normalized coordinates + + + return the field element encoded with point compression. (S 4.3.6) + + + Multiplies this ECPoint by the given number. + @param k The multiplicator. + @return k * this. + + + Elliptic curve points over Fp + + + Create a point which encodes without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + + + Create a point that encodes with or without point compression. + + @param curve the curve to use + @param x affine x co-ordinate + @param y affine y co-ordinate + @param withCompression if true encode with point compression + + + Elliptic curve points over F2m + + + @param curve base curve + @param x x point + @param y y point + + + @param curve base curve + @param x x point + @param y y point + @param withCompression true if encode with point compression. + + + Joye's double-add algorithm. + + + Interface for classes encapsulating a point multiplication algorithm + for ECPoints. + + + Multiplies the ECPoint p by k, i.e. + p is added k times to itself. + @param p The ECPoint to be multiplied. + @param k The factor by which p is multiplied. + @return p multiplied by k. + + + Class holding precomputation data for fixed-point multiplications. + + + Lookup table for the precomputed ECPoints used for a fixed point multiplication. + + + The width used for the precomputation. If a larger width precomputation + is already available this may be larger than was requested, so calling + code should refer to the actual width. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left) using + mixed coordinates. + + + By default, addition will be done in Jacobian coordinates, and doubling will be done in + Modified Jacobian coordinates (independent of the original coordinate system of each point). + + + Montgomery ladder. + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (left-to-right). + + + Class implementing the NAF (Non-Adjacent Form) multiplication algorithm (right-to-left). + + + Interface for classes storing precomputation data for multiplication + algorithms. Used as a Memento (see GOF patterns) for + WNafMultiplier. + + + Class implementing the WNAF (Window Non-Adjacent Form) multiplication + algorithm. + + + Multiplies this by an integer k using the + Window NAF method. + @param k The integer by which this is multiplied. + @return A new ECPoint which equals this + multiplied by k. + + + Class holding precomputation data for the WNAF (Window Non-Adjacent Form) + algorithm. + + + Array holding the precomputed ECPoints used for a Window + NAF multiplication. + + + Array holding the negations of the precomputed ECPoints used + for a Window NAF multiplication. + + + Holds an ECPoint representing Twice(this). Used for the + Window NAF multiplication to create or extend the precomputed values. + + + Computes the Window NAF (non-adjacent Form) of an integer. + @param width The width w of the Window NAF. The width is + defined as the minimal number w, such that for any + w consecutive digits in the resulting representation, at + most one is non-zero. + @param k The integer of which the Window NAF is computed. + @return The Window NAF of the given width, such that the following holds: + k = &sum;i=0l-1 ki2i + , where the ki denote the elements of the + returned byte[]. + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param maxWidth the maximum window width to return + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @return the window size to use + + + Determine window width to use for a scalar multiplication of the given size. + + @param bits the bit-length of the scalar to multiply by + @param windowSizeCutoffs a monotonically increasing list of bit sizes at which to increment the window width + @param maxWidth the maximum window width to return + @return the window size to use + + + Class implementing the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by k using the reduced τ-adic NAF (RTNAF) + method. + @param p The AbstractF2mPoint to multiply. + @param k The integer by which to multiply k. + @return p multiplied by k. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] using + the τ-adic NAF (TNAF) method. + @param p The AbstractF2mPoint to multiply. + @param lambda The element λ of + Z[τ] of which to compute the + [τ]-adic NAF. + @return p multiplied by λ. + + + Multiplies a {@link org.bouncycastle.math.ec.AbstractF2mPoint AbstractF2mPoint} + by an element λ of Z[τ] + using the window τ-adic NAF (TNAF) method, given the + WTNAF of λ. + @param p The AbstractF2mPoint to multiply. + @param u The the WTNAF of λ.. + @return λ * p + + + Class holding precomputation data for the WTNAF (Window + τ-adic Non-Adjacent Form) algorithm. + + + Array holding the precomputed AbstractF2mPoints used for the + WTNAF multiplication in + {@link org.bouncycastle.math.ec.multiplier.WTauNafMultiplier.multiply() + WTauNafMultiplier.multiply()}. + + + 'Zeroless' Signed Digit Left-to-Right. + + + 'Zeroless' Signed Digit Right-to-Left. + + + Utility methods for generating primes and testing for primality. + + + Used to return the output from the + {@linkplain Primes#enhancedMRProbablePrimeTest(BigInteger, SecureRandom, int) Enhanced + Miller-Rabin Probabilistic Primality Test} + + + Used to return the output from the {@linkplain Primes#generateSTRandomPrime(Digest, int, byte[]) Shawe-Taylor Random_Prime Routine} + + + FIPS 186-4 C.6 Shawe-Taylor Random_Prime Routine + + Construct a provable prime number using a hash function. + + @param hash + the {@link Digest} instance to use (as "Hash()"). Cannot be null. + @param length + the length (in bits) of the prime to be generated. Must be at least 2. + @param inputSeed + the seed to be used for the generation of the requested prime. Cannot be null or + empty. + @return an {@link STOutput} instance containing the requested prime. + + + FIPS 186-4 C.3.2 Enhanced Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. This is an + alternative to {@link #isMRProbablePrime(BigInteger, SecureRandom, int)} that provides more + information about a composite candidate, which may be useful when generating or validating + RSA moduli. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return an {@link MROutput} instance that can be further queried for details. + + + A fast check for small divisors, up to some implementation-specific limit. + + @param candidate + the {@link BigInteger} instance to test for division by small factors. + + @return true if the candidate is found to have any small factors, + false otherwise. + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test + + Run several iterations of the Miller-Rabin algorithm with randomly-chosen bases. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param random + the source of randomness to use to choose bases. + @param iterations + the number of randomly-chosen bases to perform the test for. + @return false if any witness to compositeness is found amongst the chosen bases + (so candidate is definitely NOT prime), or else true + (indicating primality with some probability dependent on the number of iterations + that were performed). + + + FIPS 186-4 C.3.1 Miller-Rabin Probabilistic Primality Test (to a fixed base). + + Run a single iteration of the Miller-Rabin algorithm against the specified base. + + @param candidate + the {@link BigInteger} instance to test for primality. + @param baseValue + the base value to use for this iteration. + @return false if the specified base is a witness to compositeness (so + candidate is definitely NOT prime), or else true. + + + + + BasicOcspResponse ::= SEQUENCE { + tbsResponseData ResponseData, + signatureAlgorithm AlgorithmIdentifier, + signature BIT STRING, + certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL + } + + + + + The DER encoding of the tbsResponseData field. + In the event of an encoding error. + + + The certificates, if any, associated with the response. + In the event of an encoding error. + + + + Verify the signature against the tbsResponseData object we contain. + + + + The ASN.1 encoded representation of this object. + + + Generator for basic OCSP response objects. + + + basic constructor + + + construct with the responderID to be the SHA-1 keyHash of the passed in public key. + + + Add a response for a particular Certificate ID. + + @param certID certificate ID details + @param certStatus status of the certificate - null if okay + + + 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 + + + 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 + + + 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 + + + Set the extensions for the response. + + @param responseExtensions the extension object to carry. + + + + Generate the signed response using the passed in signature calculator. + + Implementation of signing calculator factory. + The certificate chain associated with the response signer. + "produced at" date. + + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + create from an issuer certificate and the serial number of the + certificate it signed. + @exception OcspException if any problems occur creating the id fields. + + + return the serial number for the certificate associated + with this request. + + + 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 + + +
    +             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 }
    +             
    +
    + + Return the DER encoding of the tbsRequest field. + @return DER encoding of tbsRequest + @throws OcspException in the event of an encoding error. + + + return the object identifier representing the signature algorithm + + + 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 + + + Return whether or not this request is signed. + + @return true if signed false otherwise. + + + Verify the signature against the TBSRequest object we contain. + + + return the ASN.1 encoded representation of this object. + + + Add a request for the given CertificateID. + + @param certId certificate ID of interest + + + Add a request with extensions + + @param certId certificate ID of interest + @param singleRequestExtensions the extensions to attach to the request + + + Set the requestor name to the passed in X509Principal + + @param requestorName a X509Principal representing the requestor name. + + + Generate an unsigned request + + @return the OcspReq + @throws OcspException + + + Return an IEnumerable of the signature names supported by the generator. + + @return an IEnumerable containing recognised names. + + + return the ASN.1 encoded representation of this object. + + + base generator for an OCSP response - at the moment this only supports the + generation of responses containing BasicOCSP responses. + + + note 4 is not used. + + + Carrier for a ResponderID. + + + wrapper for the RevokedInfo object + + + 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 + + + Return the status object for the response - null indicates good. + + @return the status object for the response, null if it is good. + + + return the NextUpdate value - note: this is an optional field so may + be returned as null. + + @return nextUpdate, or null if not present. + + + wrapper for the UnknownInfo object + + + + Utility class for creating IBasicAgreement objects from their names/Oids + + + + + Cipher Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Utility class for creating IDigest objects from their names/Oids + + + + + Returns a ObjectIdentifier for a given digest mechanism. + + A string representation of the digest meanism. + A DerObjectIdentifier, null if the Oid is not available. + + + + A class containing methods to interface the BouncyCastle world to the .NET Crypto world. + + + + + Create an System.Security.Cryptography.X509Certificate from an X509Certificate Structure. + + + A System.Security.Cryptography.X509Certificate. + + + + Utility class for creating HMac object from their names/Oids + + + + + + + + + + Returns a ObjectIdentifier for a give encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the Oid is not available. + + + + Create and auto-seed an instance based on the given algorithm. + + Equivalent to GetInstance(algorithm, true) + e.g. "SHA256PRNG" + + + + Create an instance based on the given algorithm, with optional auto-seeding + + e.g. "SHA256PRNG" + If true, the instance will be auto-seeded. + + + + To replicate existing predictable output, replace with GetInstance("SHA1PRNG", false), followed by SetSeed(seed) + + + + Use the specified instance of IRandomGenerator as random source. + + This constructor performs no seeding of either the IRandomGenerator or the + constructed SecureRandom. It is the responsibility of the client to provide + proper seed material as necessary/appropriate for the given IRandomGenerator + implementation. + + The source to generate all random bytes from. + + + base constructor. + + + create a SecurityUtilityException with the given message. + + @param message the message to be carried with the exception. + + + + Signer Utility class contains methods that can not be specifically grouped into other classes. + + + + + Returns an ObjectIdentifier for a given encoding. + + A string representation of the encoding. + A DerObjectIdentifier, null if the OID is not available. + + + + Utility class for creating IWrapper objects from their names/Oids + + + + PEM generator for the original set of PEM objects used in Open SSL. + + + Class for reading OpenSSL PEM encoded streams containing + X509 certificates, PKCS8 encoded keys and PKCS7 objects. +

    + In the case of PKCS7 objects the reader will return a CMS ContentInfo object. Keys and + Certificates will be returned using the appropriate java.security type.

    +
    + + Create a new PemReader + + @param reader the Reader + + + Create a new PemReader with a password finder + + @param reader the Reader + @param pFinder the password finder + + + Reads in a X509Certificate. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a X509CRL. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS10 certification request. + + @return the certificate request. + @throws IOException if an I/O error occured + + + Reads in a X509 Attribute Certificate. + + @return the X509 Attribute Certificate + @throws IOException if an I/O error occured + + + Reads in a PKCS7 object. This returns a ContentInfo object suitable for use with the CMS + API. + + @return the X509Certificate + @throws IOException if an I/O error occured + + + Read a Key Pair + + + General purpose writer for OpenSSL PEM objects. + + + The TextWriter object to write the output to. + + + Constructor for an unencrypted private key PEM object. + + @param key private key to be encoded. + + + 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 + + + + A class for verifying and creating Pkcs10 Certification requests. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Matching Private key for nominated (above) public key to be used to sign the request. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + Ignored. + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + The factory for signature calculators to sign the PKCS#10 request with. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + + + Get the public key. + + The public key. + + + + Verify Pkcs10 Cert Request is valid. + + true = valid. + + + + A class for creating and verifying Pkcs10 Certification requests (this is an extension on ). + The requests are made using delay signing. This is useful for situations where + the private key is in another environment and not directly accessible (e.g. HSM) + So the first step creates the request, then the signing is done outside this + object and the signature is then used to complete the request. + + + CertificationRequest ::= Sequence { + certificationRequestInfo CertificationRequestInfo, + signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, + signature BIT STRING + } + + 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.&id({IOSet}), + values Set SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{\@type}) + } + + see + + + + Instantiate a Pkcs10CertificationRequest object with the necessary credentials. + + Name of Sig Alg. + X509Name of subject eg OU="My unit." O="My Organisatioin" C="au" + Public Key to be included in cert reqest. + ASN1Set of Attributes. + + After the object is constructed use the and finally the + SignRequest methods to finalize the request. + + + + simply return the cert entry for the private key + + + Utility class for reencoding PKCS#12 files to definite length. + + + 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 + + + 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. + + + + A holding class for a PKCS#8 encrypted private key info object that allows for its decryption. + + + + + Base constructor from a PKCS#8 EncryptedPrivateKeyInfo object. + + A PKCS#8 EncryptedPrivateKeyInfo object. + + + + Base constructor from a BER encoding of a PKCS#8 EncryptedPrivateKeyInfo object. + + A BER encoding of a PKCS#8 EncryptedPrivateKeyInfo objects. + + + + Returns the underlying ASN.1 structure inside this object. + + Return the EncryptedPrivateKeyInfo structure in this object. + + + + Returns a copy of the encrypted data in this structure. + + Return a copy of the encrypted data in this object. + + + + Return a binary ASN.1 encoding of the EncryptedPrivateKeyInfo structure in this object. + + A byte array containing the encoded object. + + + + Get a decryptor from the passed in provider and decrypt the encrypted private key info, returning the result. + + A provider to query for decryptors for the object. + The decrypted private key info structure. + + + + Create the encrypted private key info using the passed in encryptor. + + The encryptor to use. + An encrypted private key info containing the original private key info. + + + + Base exception for PKCS related issues. + + + + + Base exception for parsing related issues in the PKCS namespace. + + + + Create a PrivateKeyInfo representation of a private key with attributes. + + @param privateKey the key to be encoded into the info object. + @param attributes the set of attributes to be included. + @return the appropriate PrivateKeyInfo + @throws java.io.IOException on an error encoding the key + + + + Returns the revocationDate. + + + + + Returns the certStatus. + + + + Returns an immutable Set of X.509 attribute certificate + extensions that this PkixAttrCertChecker supports or + null if no extensions are supported. +

    + Each element of the set is a String representing the + Object Identifier (OID) of the X.509 extension that is supported. +

    +

    + All X.509 attribute certificate extensions that a + PkixAttrCertChecker might possibly be able to process + should be included in the set. +

    + + @return an immutable Set of X.509 extension OIDs (in + String format) supported by this + PkixAttrCertChecker, or null if no + extensions are supported +
    + + Performs checks on the specified attribute certificate. Every handled + extension is rmeoved from the unresolvedCritExts + 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 Collection of OID strings + representing the current set of unresolved critical extensions + @throws CertPathValidatorException if the specified attribute certificate + does not pass the check. + + + Returns a clone of this object. + + @return a copy of this PkixAttrCertChecker + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + CertPathValidatorSpi implementation for X.509 Attribute Certificates la RFC 3281. + + @see org.bouncycastle.x509.ExtendedPkixParameters + + + Validates an attribute certificate with the given certificate path. + +

    + params must be an instance of + ExtendedPkixParameters. +

    + The target constraints in the params must be an + X509AttrCertStoreSelector with at least the attribute + certificate criterion set. Obey that also target informations may be + necessary to correctly validate this attribute certificate. +

    + The attribute certificate issuer must be added to the trusted attribute + issuers with {@link ExtendedPkixParameters#setTrustedACIssuers(Set)}. +

    + @param certPath The certificate path which belongs to the attribute + certificate issuer public key certificate. + @param params The PKIX parameters. + @return A PKIXCertPathValidatorResult of the result of + validating the certPath. + @throws InvalidAlgorithmParameterException if params is + inappropriate for this validator. + @throws CertPathValidatorException if the verification fails. +
    + + + Summary description for PkixBuilderParameters. + + + + Returns an instance of PkixBuilderParameters. +

    + This method can be used to get a copy from other + PKIXBuilderParameters, PKIXParameters, + and ExtendedPKIXParameters instances. +

    + + @param pkixParams The PKIX parameters to create a copy of. + @return An PkixBuilderParameters instance. +
    + + + Excluded certificates are not used for building a certification path. + + the excluded certificates. + + + + Sets the excluded certificates which are not used for building a + certification path. If the ISet is null an + empty set is assumed. + + + The given set is cloned to protect it against subsequent modifications. + + The excluded certificates to set. + + + Can alse handle ExtendedPKIXBuilderParameters and + PKIXBuilderParameters. + + @param params Parameters to set. + @see org.bouncycastle.x509.ExtendedPKIXParameters#setParams(java.security.cert.PKIXParameters) + + + Makes a copy of this PKIXParameters object. Changes to the + copy will not affect the original and vice versa. + + @return a copy of this PKIXParameters object + + + An immutable sequence of certificates (a certification path).
    +
    + This is an abstract class that defines the methods common to all CertPaths. + Subclasses can handle different kinds of certificates (X.509, PGP, etc.).
    +
    + All CertPath objects have a type, a list of Certificates, and one or more + supported encodings. Because the CertPath class is immutable, a CertPath + cannot change in any externally visible way after being constructed. This + stipulation applies to all public fields and methods of this class and any + added or overridden by subclasses.
    +
    + The type is a string that identifies the type of Certificates in the + certification path. For each certificate cert in a certification path + certPath, cert.getType().equals(certPath.getType()) must be true.
    +
    + The list of Certificates is an ordered List of zero or more Certificates. + This List and all of the Certificates contained in it must be immutable.
    +
    + Each CertPath object must support one or more encodings so that the object + can be translated into a byte array for storage or transmission to other + parties. Preferably, these encodings should be well-documented standards + (such as PKCS#7). One of the encodings supported by a CertPath is considered + the default encoding. This encoding is used if no encoding is explicitly + requested (for the {@link #getEncoded()} method, for instance).
    +
    + All CertPath objects are also Serializable. CertPath objects are resolved + into an alternate {@link CertPathRep} object during serialization. This + allows a CertPath object to be serialized into an equivalent representation + regardless of its underlying implementation.
    +
    + CertPath objects can be created with a CertificateFactory or they can be + returned by other classes, such as a CertPathBuilder.
    +
    + By convention, X.509 CertPaths (consisting of X509Certificates), are ordered + starting with the target certificate and ending with a certificate issued by + the trust anchor. That is, the issuer of one certificate is the subject of + the following one. The certificate representing the + {@link TrustAnchor TrustAnchor} should not be included in the certification + path. Unvalidated X.509 CertPaths may not follow these conventions. PKIX + CertPathValidators will detect any departure from these conventions that + cause the certification path to be invalid and throw a + CertPathValidatorException.
    +
    + Concurrent Access
    +
    + All CertPath objects must be thread-safe. That is, multiple threads may + concurrently invoke the methods defined in this class on a single CertPath + object (or more than one) with no ill effects. This is also true for the List + returned by CertPath.getCertificates.
    +
    + Requiring CertPath objects to be immutable and thread-safe allows them to be + passed around to various pieces of code without worrying about coordinating + access. Providing this thread-safety is generally not difficult, since the + CertPath and List objects in question are immutable. + + @see CertificateFactory + @see CertPathBuilder + + CertPath implementation for X.509 certificates. + +
    + + @param certs + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + @param type the standard name of the type of Certificatesin this path + + + + Creates a CertPath of the specified type. + This constructor is protected because most users should use + a CertificateFactory to create CertPaths. + + @param type the standard name of the type of Certificatesin this path + + + + Returns an iteration of the encodings supported by this + certification path, with the default encoding + first. Attempts to modify the returned Iterator via its + remove method result in an UnsupportedOperationException. + + @return an Iterator over the names of the supported encodings (as Strings) + + + + Compares this certification path for equality with the specified object. + Two CertPaths are equal if and only if their types are equal and their + certificate Lists (and by implication the Certificates in those Lists) + are equal. A CertPath is never equal to an object that is not a CertPath.
    +
    + This algorithm is implemented by this method. If it is overridden, the + behavior specified here must be maintained. + + @param other + the object to test for equality with this certification path + + @return true if the specified object is equal to this certification path, + false otherwise + + @see Object#hashCode() Object.hashCode() +
    + + Returns the encoded form of this certification path, using + the default encoding. + + @return the encoded bytes + @exception CertificateEncodingException if an encoding error occurs + + + + Returns the encoded form of this certification path, using + the specified encoding. + + @param encoding the name of the encoding to use + @return the encoded bytes + @exception CertificateEncodingException if an encoding error + occurs or the encoding requested is not supported + + + + + Returns the list of certificates in this certification + path. + + + + Return a DERObject containing the encoded certificate. + + @param cert the X509Certificate object to be encoded + + @return the DERObject + + + + Implements the PKIX CertPathBuilding algorithm for BouncyCastle. + + @see CertPathBuilderSpi + + + Build and validate a CertPath using the given parameter. + + @param params PKIXBuilderParameters object containing all information to + build the CertPath + + + + Summary description for PkixCertPathBuilderException. + + + + + Summary description for PkixCertPathBuilderResult. + + + + * Initializes the internal state of this PKIXCertPathChecker. + *

    + * The forward flag specifies the order that certificates + * will be passed to the {@link #check check} method (forward or reverse). A + * PKIXCertPathChecker must support reverse checking + * and may support forward checking. + *

    + * + * @param forward + * the order that certificates are presented to the + * check method. If true, + * certificates are presented from target to most-trusted CA + * (forward); if false, from most-trusted CA to + * target (reverse). + * @exception CertPathValidatorException + * if this PKIXCertPathChecker 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 +
    + + Indicates if forward checking is supported. Forward checking refers to + the ability of the PKIXCertPathChecker to perform its + checks when certificates are presented to the check method + in the forward direction (from target to most-trusted CA). + + @return true if forward checking is supported, + false otherwise + + + * Returns an immutable Set of X.509 certificate extensions + * that this PKIXCertPathChecker supports (i.e. recognizes, + * is able to process), or null if no extensions are + * supported. + *

    + * Each element of the set is a String 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. + *

    + * All X.509 certificate extensions that a PKIXCertPathChecker + * might possibly be able to process should be included in the set. + *

    + * + * @return an immutable Set of X.509 extension OIDs (in + * String format) supported by this + * PKIXCertPathChecker, or null if no + * extensions are supported +
    + + 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 init method. + + @param cert + the Certificate to be checked + @param unresolvedCritExts + a Collection of OID strings representing the + current set of unresolved critical extensions + @exception CertPathValidatorException + if the specified certificate does not pass the check + + + Returns a clone of this object. Calls the Object.clone() + method. All subclasses which maintain state must support and override + this method, if necessary. + + @return a copy of this PKIXCertPathChecker + + + The Service Provider Interface (SPI) + for the {@link CertPathValidator CertPathValidator} class. All + CertPathValidator implementations must include a class (the + SPI class) that extends this class (CertPathValidatorSpi) + and implements all of its methods. In general, instances of this class + should only be accessed through the CertPathValidator class. + For details, see the Java Cryptography Architecture.
    +
    + Concurrent Access
    +
    + Instances of this class need not be protected against concurrent + access from multiple threads. Threads that need to access a single + CertPathValidatorSpi instance concurrently should synchronize + amongst themselves and provide the necessary locking before calling the + wrapping CertPathValidator object.
    +
    + However, implementations of CertPathValidatorSpi may still + encounter concurrency issues, since multiple threads each + manipulating a different CertPathValidatorSpi instance need not + synchronize. + + CertPathValidatorSpi implementation for X.509 Certificate validation a la RFC + 3280. + +
    + + An exception indicating one of a variety of problems encountered when + validating a certification path.
    +
    + A CertPathValidatorException provides support for wrapping + exceptions. The {@link #getCause getCause} method returns the throwable, + if any, that caused this exception to be thrown.
    +
    + A CertPathValidatorException may also include the + certification path that was being validated when the exception was thrown + and the index of the certificate in the certification path that caused the + exception to be thrown. Use the {@link #getCertPath getCertPath} and + {@link #getIndex getIndex} methods to retrieve this information.
    +
    + Concurrent Access
    +
    + Unless otherwise specified, the methods defined in this class are not + thread-safe. Multiple threads that need to access a single + object concurrently should synchronize amongst themselves and + provide the necessary locking. Multiple threads each manipulating + separate objects need not synchronize. + + @see CertPathValidator + +
    + + + Creates a PkixCertPathValidatorException with the given detail + message. A detail message is a String that describes this + particular exception. + + the detail message + + + + Creates a PkixCertPathValidatorException with the specified + detail message and cause. + + the detail message + the cause (which is saved for later retrieval by the + {@link #getCause getCause()} method). (A null + value is permitted, and indicates that the cause is + nonexistent or unknown.) + + + + Creates a PkixCertPathValidatorException with the specified + detail message, cause, certification path, and index. + + the detail message (or null if none) + the cause (or null if none) + the certification path that was in the process of being + validated when the error was encountered + the index of the certificate in the certification path that * + + + + Returns the detail message for this CertPathValidatorException. + + the detail message, or null if neither the message nor cause were specified + + + Returns the certification path that was being validated when the + exception was thrown. + + @return the CertPath that was being validated when the + exception was thrown (or null if not specified) + + + Returns the index of the certificate in the certification path that + caused the exception to be thrown. Note that the list of certificates in + a CertPath is zero based. If no index has been set, -1 is + returned. + + @return the index that has been set, or -1 if none has been set + + + + Summary description for PkixCertPathValidatorResult. + + + + + Summary description for PkixCertPathValidatorUtilities. + + + + + key usage bits + + + + + Search the given Set of TrustAnchor's for one that is the + issuer of the given X509 certificate. + + the X509 certificate + a Set of TrustAnchor's + the TrustAnchor object if found or + null if not. + + @exception + + + + Returns the issuer of an attribute certificate or certificate. + + The attribute certificate or certificate. + The issuer as X500Principal. + + + Return the next working key inheriting DSA parameters if necessary. +

    + This methods inherits DSA parameters from the indexed certificate or + previous certificates in the certificate chain to the returned + PublicKey. The list is searched upwards, meaning the end + certificate is at position 0 and previous certificates are following. +

    +

    + If the indexed certificate does not contain a DSA key this method simply + returns the public key. If the DSA key already contains DSA parameters + the key is also only returned. +

    + + @param certs The certification path. + @param index The index of the certificate which contains the public key + which should be extended with DSA parameters. + @return The public key of the certificate in list position + index extended with DSA parameters if applicable. + @throws Exception if DSA parameters cannot be inherited. +
    + + + Return a Collection of all certificates or attribute certificates found + in the X509Store's that are matching the certSelect criteriums. + + a {@link Selector} object that will be used to select + the certificates + a List containing only X509Store objects. These + are used to search for certificates. + a Collection of all found or + objects. + May be empty but never null. + + + + Add the CRL issuers from the cRLIssuer field of the distribution point or + from the certificate if not given to the issuer criterion of the + selector. +

    + The issuerPrincipals are a collection with a single + X500Principal for X509Certificates. For + {@link X509AttributeCertificate}s the issuer may contain more than one + X500Principal. +

    + + @param dp The distribution point. + @param issuerPrincipals The issuers of the certificate or attribute + certificate which contains the distribution point. + @param selector The CRL selector. + @param pkixParams The PKIX parameters containing the cert stores. + @throws Exception if an exception occurs while processing. + @throws ClassCastException if issuerPrincipals does not + contain only X500Principals. +
    + + Fetches complete CRLs according to RFC 3280. + + @param dp The distribution point for which the complete CRL + @param cert The X509Certificate or + {@link org.bouncycastle.x509.X509AttributeCertificate} for + which the CRL should be searched. + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @return A Set of X509CRLs with complete + CRLs. + @throws Exception if an exception occurs while picking the CRLs + or no CRLs are found. + + + Fetches delta CRLs according to RFC 3280 section 5.2.4. + + @param currentDate The date for which the delta CRLs must be valid. + @param paramsPKIX The extended PKIX parameters. + @param completeCRL The complete CRL the delta CRL is for. + @return A Set of X509CRLs with delta CRLs. + @throws Exception if an exception occurs while picking the delta + CRLs. + + + Find the issuer certificates of a given certificate. + + @param cert + The certificate for which an issuer should be found. + @param pkixParams + @return A Collection object containing the issuer + X509Certificates. Never null. + + @exception Exception + if an error occurs. + + + + Extract the value of the given extension, if it exists. + + The extension object. + The object identifier to obtain. + Asn1Object + if the extension cannot be read. + + + + crl checking + Return a Collection of all CRLs found in the X509Store's that are + matching the crlSelect criteriums. + + a {@link X509CRLStoreSelector} object that will be used + to select the CRLs + a List containing only {@link org.bouncycastle.x509.X509Store + X509Store} objects. These are used to search for CRLs + a Collection of all found {@link X509CRL X509CRL} objects. May be + empty but never null. + + + + Returns the intersection of the permitted IP ranges in + permitted with ip. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ips The IP address with its subnet mask. + @return The Set of permitted IP ranges intersected with + ip. + + + Returns the union of the excluded IP ranges in excluded + with ip. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address with its subnet mask. + @return The Set of excluded IP ranges unified with + ip as byte arrays. + + + 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 Set with the union of both addresses. + + + 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 Set with the single IP address with its subnet + mask as a byte array or an empty Set. + + + 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. + + + 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. + + + 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. + + + Checks if the IP ip is included in the permitted ISet + permitted. + + @param permitted A Set of permitted IP addresses with + their subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is not permitted. + + + Checks if the IP ip is included in the excluded ISet + excluded. + + @param excluded A Set of excluded IP addresses with their + subnet mask as byte arrays. + @param ip The IP address. + @throws PkixNameConstraintValidatorException + if the IP is excluded. + + + Checks if the IP address ip is constrained by + constraint. + + @param ip The IP address. + @param constraint The constraint. This is an IP address concatenated with + its subnetmask. + @return true if constrained, false + otherwise. + + + The common part of email1 and email2 is + added to the union union. If email1 and + email2 have nothing in common they are added both. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param union The union. + + + The most restricting part from email1 and + email2 is added to the intersection intersect. + + @param email1 Email address constraint 1. + @param email2 Email address constraint 2. + @param intersect The intersection. + + + Checks if the given GeneralName is in the permitted ISet. + + @param name The GeneralName + @throws PkixNameConstraintValidatorException + If the name + + + Check if the given GeneralName is contained in the excluded ISet. + + @param name The GeneralName. + @throws PkixNameConstraintValidatorException + If the name is + excluded. + + + Updates the permitted ISet of these name constraints with the intersection + with the given subtree. + + @param permitted The permitted subtrees + + + Adds a subtree to the excluded ISet of these name constraints. + + @param subtree A subtree with an excluded GeneralName. + + + Returns the maximum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The maximum IP address. + + + Returns the minimum IP address. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The minimum IP address. + + + Compares IP address ip1 with ip2. 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. + + + Returns the logical OR of the IP addresses ip1 and + ip2. + + @param ip1 The first IP address. + @param ip2 The second IP address. + @return The OR of ip1 and ip2. + + + Stringifies an IPv4 or v6 address with subnet mask. + + @param ip The IP with subnet mask. + @return The stringified IP address. + + + + Summary description for PkixParameters. + + + + 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 all certificates must have been + valid. + + + 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 end certificate must have been valid.

    It is used e.g. + in the German signature law. + + + Creates an instance of PKIXParameters with the specified Set of + most-trusted CAs. Each element of the set is a TrustAnchor.
    +
    + 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 + (trustAnchors.isEmpty() == true) + @exception NullPointerException + if the specified Set is null + @exception ClassCastException + if any of the elements in the Set are not of type + java.security.cert.TrustAnchor +
    + + Returns the required constraints on the target certificate. The + constraints are returned as an instance of CertSelector. If + null, no constraints are defined.
    +
    + Note that the CertSelector returned is cloned to protect against + subsequent modifications. + + @return a CertSelector specifying the constraints on the target + certificate (or null) + + @see #setTargetCertConstraints(CertSelector) +
    + + Sets the required constraints on the target certificate. The constraints + are specified as an instance of CertSelector. If null, no constraints are + defined.
    +
    + Note that the CertSelector specified is cloned to protect against + subsequent modifications. + + @param selector + a CertSelector specifying the constraints on the target + certificate (or null) + + @see #getTargetCertConstraints() +
    + + 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 Set, which is + interpreted as meaning that any policy would be acceptable. + + @return an immutable Set of initial policy OIDs in String + format, or an empty Set (implying any policy is + acceptable). Never returns null. + + @see #setInitialPolicies(java.util.Set) + + + Sets the 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. 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 Set (or + null).
    +
    + Note that the Set is copied to protect against subsequent modifications.
    +
    + + @param initialPolicies + a Set of initial policy OIDs in String format (or + null) + + @exception ClassCastException + if any of the elements in the set are not of type String + + @see #getInitialPolicies() +
    + + Sets a List of additional certification path checkers. If + the specified List contains an object that is not a PKIXCertPathChecker, + it is ignored.
    +
    + Each PKIXCertPathChecker specified implements additional + checks on a certificate. Typically, these are checks to process and + verify private extensions contained in certificates. Each + PKIXCertPathChecker should be instantiated with any + initialization parameters needed to execute the check.
    +
    + This method allows sophisticated applications to extend a PKIX + CertPathValidator or CertPathBuilder. Each + of the specified PKIXCertPathCheckers will be called, in turn, by a PKIX + CertPathValidator or CertPathBuilder for + each certificate processed or validated.
    +
    + Regardless of whether these additional PKIXCertPathCheckers are set, a + PKIX CertPathValidator or CertPathBuilder + 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).
    +
    + 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 + java.security.cert.PKIXCertPathChecker + @see #getCertPathCheckers() +
    + + 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 + null) + + @see #setCertPathCheckers(java.util.List) + + + Adds a PKIXCertPathChecker to the list of certification + path checkers. See the {@link #setCertPathCheckers setCertPathCheckers} + method for more details. +

    + Note that the PKIXCertPathChecker is cloned to protect + against subsequent modifications.

    + + @param checker a PKIXCertPathChecker to add to the list of + checks. If null, the checker is ignored (not added to list). +
    + + Method to support Clone() under J2ME. + super.Clone() does not exist and fields are not copied. + + @param params Parameters to set. If this are + ExtendedPkixParameters they are copied to. + + + Whether delta CRLs should be used for checking the revocation status. + Defaults to false. + + + The validity model. + @see #CHAIN_VALIDITY_MODEL + @see #PKIX_VALIDITY_MODEL + + + Sets the Bouncy Castle Stores for finding CRLs, certificates, attribute + certificates or cross certificates. +

    + The IList is cloned. +

    + + @param stores A list of stores to use. + @see #getStores + @throws ClassCastException if an element of stores is not + a {@link Store}. +
    + + Adds a Bouncy Castle {@link Store} to find CRLs, certificates, attribute + certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores +
    + + Adds an additional Bouncy Castle {@link Store} to find CRLs, certificates, + attribute certificates or cross certificates. +

    + 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. +

    + If store is null it is ignored. +

    + + @param store The store to add. + @see #getStores() +
    + + Returns an IList of additional Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of additional Bouncy Castle + Stores. Never null. + + @see #addAddionalStore(Store) + + + Returns an IList of Bouncy Castle + Stores used for finding CRLs, certificates, attribute + certificates or cross certificates. + + @return an immutable IList of Bouncy Castle + Stores. Never null. + + @see #setStores(IList) + + + Returns if additional {@link X509Store}s for locations like LDAP found + in certificates or CRLs should be used. + + @return Returns true if additional stores are used. + + + Sets if additional {@link X509Store}s for locations like LDAP found in + certificates or CRLs should be used. + + @param enabled true if additional stores are used. + + + Returns the required constraints on the target certificate or attribute + certificate. The constraints are returned as an instance of + IX509Selector. If null, no constraints are + defined. + +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector returned is cloned to protect + against subsequent modifications. +

    + @return a IX509Selector specifying the constraints on the + target certificate or attribute certificate (or null) + @see #setTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Sets the required constraints on the target certificate or attribute + certificate. The constraints are specified as an instance of + IX509Selector. If null, no constraints are + defined. +

    + The target certificate in a PKIX path may be a certificate or an + attribute certificate. +

    + Note that the IX509Selector specified is cloned to protect + against subsequent modifications. +

    + + @param selector a IX509Selector specifying the constraints on + the target certificate or attribute certificate (or + null) + @see #getTargetConstraints + @see X509CertStoreSelector + @see X509AttributeCertStoreSelector +
    + + Returns the trusted attribute certificate issuers. If attribute + certificates is verified the trusted AC issuers must be set. +

    + The returned ISet consists of TrustAnchors. +

    + The returned ISet is immutable. Never null +

    + + @return Returns an immutable set of the trusted AC issuers. +
    + + Sets the trusted attribute certificate issuers. If attribute certificates + is verified the trusted AC issuers must be set. +

    + The trustedACIssuers must be a ISet of + TrustAnchor +

    + The given set is cloned. +

    + + @param trustedACIssuers The trusted AC issuers to set. Is never + null. + @throws ClassCastException if an element of stores is not + a TrustAnchor. +
    + + Returns the necessary attributes which must be contained in an attribute + certificate. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the necessary AC attributes. +
    + + Sets the necessary which must be contained in an attribute certificate. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param necessaryACAttributes The necessary AC attributes to set. + @throws ClassCastException if an element of + necessaryACAttributes is not a + String. +
    + + Returns the attribute certificates which are not allowed. +

    + The returned ISet is immutable and contains + Strings with the OIDs. +

    + + @return Returns the prohibited AC attributes. Is never null. +
    + + Sets the attribute certificates which are not allowed. +

    + The ISet must contain Strings with the + OIDs. +

    + The set is cloned. +

    + + @param prohibitedACAttributes The prohibited AC attributes to set. + @throws ClassCastException if an element of + prohibitedACAttributes is not a + String. +
    + + Returns the attribute certificate checker. The returned set contains + {@link PKIXAttrCertChecker}s and is immutable. + + @return Returns the attribute certificate checker. Is never + null. + + + Sets the attribute certificate checkers. +

    + All elements in the ISet must a {@link PKIXAttrCertChecker}. +

    +

    + The given set is cloned. +

    + + @param attrCertCheckers The attribute certificate checkers to set. Is + never null. + @throws ClassCastException if an element of attrCertCheckers + is not a PKIXAttrCertChecker. +
    + + + Summary description for PkixPolicyNode. + + + + Constructors + + + + This class helps to handle CRL revocation reasons mask. Each CRL handles a + certain set of revocation reasons. + + + + + Constructs are reason mask with the reasons. + + The reasons. + + + + A reason mask with no reason. + + + + + A mask with all revocation reasons. + + + + Adds all reasons from the reasons mask to this mask. + + @param mask The reasons mask to add. + + + + Returns true if this reasons mask contains all possible + reasons. + + true if this reasons mask contains all possible reasons. + + + + + Intersects this mask with the given reasons mask. + + mask The mask to intersect with. + The intersection of this and teh given mask. + + + + Returns true if the passed reasons mask has new reasons. + + The reasons mask which should be tested for new reasons. + true if the passed reasons mask has new reasons. + + + + Returns the reasons in this mask. + + + + If the complete CRL includes an issuing distribution point (IDP) CRL + extension check the following: +

    + (i) If the distribution point name is present in the IDP CRL extension + and the distribution field is present in the DP, then verify that one of + the names in the IDP matches one of the names in the DP. If the + distribution point name is present in the IDP CRL extension and the + distribution field is omitted from the DP, then verify that one of the + names in the IDP matches one of the names in the cRLIssuer field of the + DP. +

    +

    + (ii) If the onlyContainsUserCerts boolean is asserted in the IDP CRL + extension, verify that the certificate does not include the basic + constraints extension with the cA boolean asserted. +

    +

    + (iii) If the onlyContainsCACerts boolean is asserted in the IDP CRL + extension, verify that the certificate includes the basic constraints + extension with the cA boolean asserted. +

    +

    + (iv) Verify that the onlyContainsAttributeCerts boolean is not asserted. +

    + + @param dp The distribution point. + @param cert The certificate. + @param crl The CRL. + @throws AnnotatedException if one of the conditions is not met or an error occurs. +
    + + If the DP includes cRLIssuer, then verify that the issuer field in the + complete CRL matches cRLIssuer in the DP and that the complete CRL + contains an + g distribution point extension with the indirectCRL + boolean asserted. Otherwise, verify that the CRL issuer matches the + certificate issuer. + + @param dp The distribution point. + @param cert The certificate ot attribute certificate. + @param crl The CRL for cert. + @throws AnnotatedException if one of the above conditions does not apply or an error + occurs. + + + Obtain and validate the certification path for the complete CRL issuer. + If a key usage extension is present in the CRL issuer's certificate, + verify that the cRLSign bit is set. + + @param crl CRL which contains revocation information for the certificate + cert. + @param cert The attribute certificate or certificate to check if it is + revoked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param paramsPKIX paramsPKIX PKIX parameters. + @param certPathCerts The certificates on the certification path. + @return A Set with all keys of possible CRL issuer + certificates. + @throws AnnotatedException if the CRL is not valid or the status cannot be checked or + some error occurs. + + + Checks a distribution point for revocation information for the + certificate cert. + + @param dp The distribution point to consider. + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param defaultCRLSignCert The issuer certificate of the certificate cert. + @param defaultCRLSignKey The public key of the issuer certificate + defaultCRLSignCert. + @param certStatus The current certificate revocation status. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + Checks a certificate if it is revoked. + + @param paramsPKIX PKIX parameters. + @param cert Certificate to check if it is revoked. + @param validDate The date when the certificate revocation status should be + checked. + @param sign The issuer certificate of the certificate cert. + @param workingPublicKey The public key of the issuer certificate sign. + @param certPathCerts The certificates of the certification path. + @throws AnnotatedException if the certificate is revoked or the status cannot be checked + or some error occurs. + + + If use-deltas is set, verify the issuer and scope of the delta CRL. + + @param deltaCRL The delta CRL. + @param completeCRL The complete CRL. + @param pkixParams The PKIX paramaters. + @throws AnnotatedException if an exception occurs. + + + Checks if an attribute certificate is revoked. + + @param attrCert Attribute certificate to check if it is revoked. + @param paramsPKIX PKIX parameters. + @param issuerCert The issuer certificate of the attribute certificate + attrCert. + @param validDate The date when the certificate revocation status should + be checked. + @param certPathCerts The certificates of the certification path to be + checked. + + @throws CertPathValidatorException if the certificate is revoked or the + status cannot be checked or some error occurs. + + + Searches for a holder public key certificate and verifies its + certification path. + + @param attrCert the attribute certificate. + @param pkixParams The PKIX parameters. + @return The certificate path of the holder certificate. + @throws Exception if +
      +
    • no public key certificate can be found although holder + information is given by an entity name or a base certificate + ID
    • +
    • support classes cannot be created
    • +
    • no certification path for the public key certificate can + be built
    • +
    +
    + + + Checks a distribution point for revocation information for the + certificate attrCert. + + @param dp The distribution point to consider. + @param attrCert The attribute certificate which should be checked. + @param paramsPKIX PKIX parameters. + @param validDate The date when the certificate revocation status should + be checked. + @param issuerCert Certificate to check if it is revoked. + @param reasonMask The reasons mask which is already checked. + @param certPathCerts The certificates of the certification path to be + checked. + @throws Exception if the certificate is revoked or the status + cannot be checked or some error occurs. + + + + 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. + + + + + 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. + +
    +            	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}
    +            	
    + + Note that the name constraints byte array supplied is cloned to protect + against subsequent modifications. +
    + a trusted X509Certificate + 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. + if the specified X509Certificate is null +
    + + + Creates an instance of TrustAnchor where the + most-trusted CA is specified as an X500Principal 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. +

    + 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. +

    + Note that the name constraints byte array supplied here is cloned to + protect against subsequent modifications. +

    +
    + the name of the most-trusted CA as X509Name + the public key of the most-trusted CA + + 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. + + + if caPrincipal or pubKey is null + +
    + + + Creates an instance of TrustAnchor 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. +
    + 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 X.500 distinguished name of the most-trusted CA in RFC + 2253 string format + the public key of the most-trusted CA + 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. + throws NullPointerException, IllegalArgumentException +
    + + + Returns the most-trusted CA certificate. + + + + + Returns the name of the most-trusted CA as an X509Name. + + + + + Returns the name of the most-trusted CA in RFC 2253 string format. + + + + + Returns the public key of the most-trusted CA. + + + + + Decode the name constraints and clone them if not null. + + + + + Returns a formatted string describing the TrustAnchor. + + a formatted string describing the TrustAnchor + + + Base class for an RFC 3161 Time Stamp Request. + + + Create a TimeStampRequest from the past in byte array. + + @param req byte array containing the request. + @throws IOException if the request is malformed. + + + Create a TimeStampRequest from the past in input stream. + + @param in input stream containing the request. + @throws IOException if the request is malformed. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Request objects. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + add a given extension field for the standard extensions tag (tag 3) + @throws IOException + + + add a given extension field for the standard extensions tag + The value parameter becomes the contents of the octet string associated + with the extension. + + + Base class for an RFC 3161 Time Stamp Response object. + + + 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. + + + 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. + + + 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. + + + return the ASN.1 encoded representation of this object. + + + Generator for RFC 3161 Time Stamp Responses. + + + Return an appropriate TimeStampResponse. +

    + 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 +

    +
    + + 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 + + + Validate the time stamp token. +

    + 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. +

    +

    + A successful call to validate means all the above are true. +

    +
    + + Return the underlying CmsSignedData object. + + @return the underlying CMS structure. + + + Return a ASN.1 encoded byte stream representing the encoded object. + + @throws IOException if encoding fails. + + + return the ASN.1 encoded representation of this object using the specified encoding. + + @param encoding the ASN.1 encoding format to use ("BER" or "DER"). + + + basic creation - only the default attributes will be included here. + + + create with a signer with extra signed/unsigned attributes. + + + @return the nonce value, null if there isn't one. + + + Recognised hash algorithms for the time stamp protocol. + + + 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 + + + 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. + + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Exception thrown if a TSP request or response fails to validate. +

    + If a failure code is associated with the exception it can be retrieved using + the getFailureCode() method.

    +
    + + Return the failure code associated with this exception - if one is set. + + @return the failure code if set, -1 otherwise. + + + General array utilities. + + + + Are two arrays equal. + + Left side. + Right side. + True if equal. + + + + A constant time equals comparison - does not terminate early if + test will fail. + + first array + second array + true if arrays equal, false otherwise. + + + Make a copy of a range of bytes from the passed in data array. The range can + extend beyond the end of the input array, in which case the return array will + be padded with zeroes. + + @param data the array from which the data is to be copied. + @param from the start index at which the copying should take place. + @param to the final index of the range (exclusive). + + @return a new byte array containing the range given. + + + BigInteger utilities. + + + Return the passed in value as an unsigned byte array. + + @param value value to be converted. + @return a byte array without a leading zero byte if present in the signed encoding. + + + Return the passed in value as an unsigned byte array of specified length, zero-extended as necessary. + + @param length desired length of result array. + @param n value to be converted. + @return a byte array of specified length, with leading zeroes as necessary given the size of n. + + + + Creates a Random BigInteger from the secure random of a given bit length. + + + + + + + Return a random BigInteger not less than 'min' and not greater than 'max' + + @param min the least value that may be generated + @param max the greatest value that may be generated + @param random the source of randomness + @return a random BigInteger value in the range [min,max] + + + + Return the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC) for a given DateTime value. + + A UTC DateTime value not before epoch. + Number of whole milliseconds after epoch. + 'dateTime' is before epoch. + + + + Create a DateTime value from the number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + Number of milliseconds since the epoch. + A UTC DateTime value + + + + Return the current number of milliseconds since the Unix epoch (1 Jan., 1970 UTC). + + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + encode the input data producing a base 64 encoded byte array. + + @return a byte array containing the base 64 encoded data. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + Encode the byte data to base 64 writing it to the given output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + encode the input data producing a base 64 output stream. + + @return the number of bytes produced. + + + decode the base 64 encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the base 64 encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A buffering class to allow translation from one format to another to + be done in discrete chunks. + + + + + Create a buffered Decoder. + + The translater to use. + The size of the buffer. + + + + Process one byte of data. + + Data in. + Byte array for the output. + The offset in the output byte array to start writing from. + The amount of output bytes. + + + + Process data from a byte array. + + The input data. + Start position within input data array. + Amount of data to process from input data array. + Array to store output. + Position in output array to start writing from. + The amount of output bytes. + + + + A class that allows encoding of data using a specific encoder to be processed in chunks. + + + + + Create. + + The translator to use. + Size of the chunks. + + + + Process one byte of data. + + The byte. + An array to store output in. + Offset within output array to start writing from. + + + + + Process data from a byte array. + + Input data Byte array containing data to be processed. + Start position within input data array. + Amount of input data to be processed. + Output data array. + Offset within output data array to start writing to. + The amount of data written. + + + + Class to decode and encode Hex. + + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + encode the input data producing a Hex encoded byte array. + + @return a byte array containing the Hex encoded data. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Hex encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + decode the Hex encoded input data. It is assumed the input data is valid. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + Decode the hexadecimal-encoded string strictly i.e. any non-hexadecimal characters will be + considered an error. + + @return a byte array representing the decoded data. + + + encode the input data producing a Hex output stream. + + @return the number of bytes produced. + + + decode the Hex encoded byte data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + decode the Hex encoded string data writing it to the given output stream, + whitespace characters will be ignored. + + @return the number of bytes produced. + + + + A hex translator. + + + + + Return encoded block size. + + 2 + + + + Encode some data. + + Input data array. + Start position within input data array. + The amount of data to process. + The output data array. + The offset within the output data array to start writing from. + Amount of data encoded. + + + + Returns the decoded block size. + + 1 + + + + Decode data from a byte array. + + The input data array. + Start position within input data array. + The amounty of data to process. + The output data array. + The position within the output data array to start writing from. + The amount of data written. + + + Encode and decode byte arrays (typically from binary to 7-bit ASCII + encodings). + + + + Translator interface. + + + + 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 "/". +

    + 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. +

    +
    + + 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. + + + Encode the byte data writing it to the given output stream. + + @return the number of bytes produced. + + + Decode the URL safe base 64 encoded input data - white space will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + decode the URL safe base 64 encoded string data - whitespace will be ignored. + + @return a byte array representing the decoded data. + + + 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. + + + 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 "/". +

    + 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. +

    +
    + + + Produce a copy of this object with its configuration and in its current state. + + + The returned object may be used simply to store the state, or may be used as a similar object + starting from the copied state. + + + + + Restore a copied object state into this object. + + + Implementations of this method should try to avoid or minimise memory allocation to perform the reset. + + an object originally {@link #copy() copied} from an object of the same type as this instance. + if the provided object is not of the correct type. + if the other parameter is in some other way invalid. + + + + A + + + + + + A + + + A + + + + + + A + + + + + A generic PEM writer, based on RFC 1421 + + + Base constructor. + + @param out output stream to use. + + + 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 + + + + Pipe all bytes from inStr to outStr, throwing StreamFlowException if greater + than limit bytes in inStr. + + + A + + + A + + + A + + The number of bytes actually transferred, if not greater than limit + + + + + + + + + + Exception to be thrown on a failure to reset an object implementing Memoable. +

    + The exception extends InvalidCastException to enable users to have a single handling case, + only introducing specific handling of this one if required. +

    +
    + + Basic Constructor. + + @param msg message to be associated with this exception. + + + Validate the given IPv4 or IPv6 address. + + @param address the IP address as a string. + + @return true if a valid address, false otherwise + + + 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 + + + Validate the given IPv4 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + Validate the given IPv6 address. + + @param address the IP address as a string. + + @return true if a valid IPv4 address, false otherwise + + + General string utilities. + + + + Summary description for DeflaterOutputStream. + + + + + Summary description for DeflaterOutputStream. + + + + + The Holder object. +
    +            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
    +            }
    +            
    +
    +
    + + Constructs a holder for v2 attribute certificates with a hash value for + some type of object. +

    + digestedObjectType can be one of the following: +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    +

    This cannot be used if a v1 attribute certificate is used.

    + + @param digestedObjectType The digest object type. + @param digestAlgorithm The algorithm identifier for the hash. + @param otherObjectTypeID The object type ID if + digestedObjectType is + otherObjectDigest. + @param objectDigest The hash value. +
    + + Returns the digest object type if an object digest info is used. +

    +

      +
    • 0 - publicKey - A hash of the public key of the holder must be + passed.
    • +
    • 1 - publicKeyCert - A hash of the public key certificate of the + holder must be passed.
    • +
    • 2 - otherObjectDigest - A hash of some other object type must be + passed. otherObjectTypeID must not be empty.
    • +
    +

    + + @return The digest object type or -1 if no object digest info is set. +
    + + Returns the other object type ID if an object digest info is used. + + @return The other object type ID or null if no object + digest info is set. + + + Returns the hash if an object digest info is used. + + @return The hash or null if no object digest info is set. + + + Returns the digest algorithm ID if an object digest info is used. + + @return The digest algorithm ID or null if no object + digest info is set. + + + 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. + + + Return the principals associated with the issuer attached to this holder + + @return an array of principals, null if no BaseCertificateID is set. + + + Return the serial number associated with the issuer attached to this holder. + + @return the certificate serial number, null if no BaseCertificateID is set. + + + Carrying class for an attribute certificate issuer. + + + Set the issuer directly with the ASN.1 structure. + + @param issuer The issuer + + + Return any principal objects inside the attribute certificate issuer object. + An array of IPrincipal objects (usually X509Principal). + + + A high level authority key identifier. + + + 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. + + + 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 + + + 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. + + + A high level subject key identifier. + + + 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. + + + Interface for an X.509 Attribute Certificate. + + + The version number for the certificate. + + + The serial number for the certificate. + + + The UTC DateTime before which the certificate is not valid. + + + The UTC DateTime after which the certificate is not valid. + + + The holder of the certificate. + + + The issuer details for the certificate. + + + Return the attributes contained in the attribute block in the certificate. + An array of attributes. + + + Return the attributes with the same type as the passed in oid. + The object identifier we wish to match. + An array of matched attributes, null if there is no match. + + + Return an ASN.1 encoded byte array representing the attribute certificate. + An ASN.1 encoded byte array. + If the certificate cannot be encoded. + + + + Get all critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + Get all non-critical extension values, by oid + + IDictionary with string (OID) keys and Asn1OctetString values + + + + A utility class that will extract X509Principal objects from X.509 certificates. +

    + 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.

    +
    +
    + + Return the issuer of the given cert as an X509Principal. + + + Return the subject of the given cert as an X509Principal. + + + Return the issuer of the given CRL as an X509Principal. + + + This class is an Selector like implementation to select + attribute certificates from a given set of criteria. + + @see org.bouncycastle.x509.X509AttributeCertificate + @see org.bouncycastle.x509.X509Store + + + + Decides if the given attribute certificate should be selected. + + The attribute certificate to be checked. + true if the object matches this selector. + + + The attribute certificate which must be matched. + If null is given, any will do. + + + The criteria for validity + If null is given any will do. + + + The holder. + If null is given any will do. + + + The issuer. + If null is given any will do. + + + The serial number. + If null is given any will do. + + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name The name as a GeneralName (not null) +
    + + Adds a target name criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target names. +

    + 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. +

    + + @param name a byte array containing the name in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target names criteria. If null is + given any will do. +

    + The collection consists of either GeneralName objects or byte[] arrays representing + DER encoded GeneralName structures. +

    + + @param names A collection of target names. + @throws IOException if a parsing error occurs. + @see #AddTargetName(byte[]) + @see #AddTargetName(GeneralName) +
    + + Gets the target names. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target names + @see #setTargetNames(Collection) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param group The group as GeneralName form (not null) +
    + + Adds a target group criterion for the attribute certificate to the target + information extension criteria. The X509AttributeCertificate + must contain at least one of the specified target groups. +

    + 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. +

    + + @param name a byte array containing the group in ASN.1 DER encoded form of a GeneralName + @throws IOException if a parsing error occurs. +
    + + Adds a collection with target groups criteria. If null is + given any will do. +

    + The collection consists of GeneralName objects or byte[] + representing DER encoded GeneralNames. +

    + + @param names A collection of target groups. + @throws IOException if a parsing error occurs. + @see #AddTargetGroup(byte[]) + @see #AddTargetGroup(GeneralName) +
    + + Gets the target groups. The collection consists of Lists + made up of an Integer in the first entry and a DER encoded + byte array or a String in the second entry. +

    The returned collection is immutable.

    + + @return The collection of target groups. + @see #setTargetGroups(Collection) +
    + + + This class is an IX509Selector implementation to select + certificate pairs, which are e.g. used for cross certificates. The set of + criteria is given from two X509CertStoreSelector objects, + each of which, if present, must match the respective component of a pair. + + + + The certificate pair which is used for testing on equality. + + + The certificate selector for the forward part. + + + The certificate selector for the reverse part. + + + + Decides if the given certificate pair should be selected. If + obj is not a X509CertificatePair, this method + returns false. + + The X509CertificatePair to be tested. + true if the object matches this selector. + + + + An ISet of DerObjectIdentifier objects. + + + + A simple collection backed store. + + + Basic constructor. + + @param collection - initial contents for the store, this is copied. + + + 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. + + + This class contains a collection for collection based X509Stores. + + + + Constructor. +

    + The collection is copied. +

    +
    + The collection containing X.509 object types. + If collection is null. +
    + + Returns a copy of the ICollection. + + + Returns a formatted string describing the parameters. + + + + An ICollection of X509Name objects + + + + 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 null is specified, then no such + optional information is provided. + + @param attrCert the IX509AttributeCertificate being checked (or + null) + @see #getAttrCertificateChecking() + + + If true only complete CRLs are returned. Defaults to + false. + + @return true if only complete CRLs are returned. + + + Returns if this selector must match CRLs with the delta CRL indicator + extension set. Defaults to false. + + @return Returns true if only CRLs with the delta CRL + indicator extension are selected. + + + The issuing distribution point. +

    + 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.

    +

    + The byte array is cloned to protect against subsequent modifications.

    +

    + You must also enable or disable this criteria with + {@link #setIssuingDistributionPointEnabled(bool)}.

    + + @param issuingDistributionPoint The issuing distribution point to set. + This is the DER encoded OCTET STRING extension value. + @see #getIssuingDistributionPoint() +
    + + Whether the issuing distribution point criteria should be applied. + Defaults to false. +

    + You may also set the issuing distribution point criteria if not a missing + issuing distribution point should be assumed.

    + + @return Returns if the issuing distribution point check is enabled. +
    + + The maximum base CRL number. Defaults to null. + + @return Returns the maximum base CRL number. + @see #setMaxBaseCRLNumber(BigInteger) + + + + A factory to produce Public Key Info Objects. + + + + + Create a Subject Public Key Info object for a given public key. + + One of ElGammalPublicKeyParameters, DSAPublicKeyParameter, DHPublicKeyParameters, RsaKeyParameters or ECPublicKeyParameters + A subject public key info object. + Throw exception if object provided is not one of the above. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + Class for carrying the values in an X.509 Attribute. + + + @param at an object representing an attribute. + + + 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. + + + 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. + + + + An Object representing an X509 Certificate. + Has static methods for loading Certificates encoded in many forms that return X509Certificate Objects. + + + + + Return true if the current time is within the start and end times nominated on the certificate. + + true id certificate is valid for the current time. + + + + Return true if the nominated time is within the start and end times nominated on the certificate. + + The time to test validity against. + True if certificate is valid for nominated time. + + + + Checks if the current date is within certificate's validity period. + + + + + Checks if the given date is within certificate's validity period. + + if the certificate is expired by given date + if the certificate is not yet valid on given date + + + + Return the certificate's version. + + An integer whose value Equals the version of the cerficate. + + + + Return a BigInteger containing the serial number. + + The Serial number. + + + + Get the Issuer Distinguished Name. (Who signed the certificate.) + + And X509Object containing name and value pairs. + + + + Get the subject of this certificate. + + An X509Name object containing name and value pairs. + + + + The time that this certificate is valid from. + + A DateTime object representing that time in the local time zone. + + + + The time that this certificate is valid up to. + + A DateTime object representing that time in the local time zone. + + + + Return the Der encoded TbsCertificate data. + This is the certificate component less the signature. + To Get the whole certificate call the GetEncoded() member. + + A byte array containing the Der encoded Certificate component. + + + + The signature. + + A byte array containg the signature of the certificate. + + + + A meaningful version of the Signature Algorithm. (EG SHA1WITHRSA) + + A sting representing the signature algorithm. + + + + Get the Signature Algorithms Object ID. + + A string containg a '.' separated object id. + + + + Get the signature algorithms parameters. (EG DSA Parameters) + + A byte array containing the Der encoded version of the parameters or null if there are none. + + + + Get the issuers UID. + + A DerBitString. + + + + Get the subjects UID. + + A DerBitString. + + + + Get a key usage guidlines. + + + + + Get the public key of the subject of the certificate. + + The public key parameters. + + + + Return a Der encoded version of this certificate. + + A byte array. + + + + Verify the certificate's signature using the nominated public key. + + An appropriate public key parameter object, RsaPublicKeyParameters, DsaPublicKeyParameters or ECDsaPublicKeyParameters + True if the signature is valid. + If key submitted is not of the above nominated types. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + + 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. + + + + Constructor + Certificate from the other CA to this CA. + Certificate from this CA to the other CA. + + + Constructor from a ASN.1 CertificatePair structure. + The CertificatePair ASN.1 object. + + + Returns the certificate from the other CA to this CA. + + + Returns the certificate from this CA to the other CA. + + + class for dealing with X509 certificates. +

    + 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.

    +
    + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate object and initializes it with the data + read from the input stream inStream. + + + Returns a (possibly empty) collection view of the certificates + read from the given input stream inStream. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + 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) + + + + Verify the CRL's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the CRL's signature. + True if the signature is valid. + If verifier provider is not appropriate or the CRL algorithm is invalid. + + + Returns a string representation of this CRL. + + @return a string representation of this CRL. + + + 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. + + + The following extensions are listed in RFC 2459 as relevant to CRL Entries + + ReasonCode Hode Instruction Code Invalidity Date Certificate Issuer + (critical) + + + Constructor for CRLEntries of indirect CRLs. If isIndirect + is false {@link #getCertificateIssuer()} will always + return null, previousCertificateIssuer is + ignored. If this isIndirect is specified and this CrlEntry + has no certificate issuer CRL entry extension + previousCertificateIssuer is returned by + {@link #getCertificateIssuer()}. + + @param c + TbsCertificateList.CrlEntry object. + @param isIndirect + true if the corresponding CRL is a indirect + CRL. + @param previousCertificateIssuer + Certificate issuer of the previous CrlEntry. + + + + Create loading data from byte array. + + + + + + Create loading data from byte array. + + + + + Generates a certificate revocation list (CRL) object and initializes + it with the data read from the input stream inStream. + + + 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. + + + + Get non critical extensions. + + A set of non critical extension oids. + + + + Get any critical extensions. + + A sorted list of critical entension. + + + + Get the value of a given extension. + + The object ID of the extension. + An Asn1OctetString object if that extension is found or null if not. + + + A holding class for constructing an X509 Key Usage extension. + +
    +                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) }
    +             
    +
    + + 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) + + + Return the digest algorithm using one of the standard JCA string + representations rather than the algorithm identifier (if possible). + + + + Class to Generate X509V1 Certificates. + + + + + Default Constructor. + + + + + Reset the generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the issuer distinguished name. + The issuer is the entity whose private key is used to sign the certificate. + + The issuers DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the subject distinguished name. + The subject describes the entity associated with the public key. + + + + + + Set the public key that this certificate identifies. + + + + + + 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. + + string representation of the algorithm name + + + + Generate a new X509Certificate. + + The private key of the issuer used to sign this certificate. + An X509Certificate. + + + + Generate a new X509Certificate specifying a SecureRandom instance that you would like to use. + + The private key of the issuer used to sign this certificate. + The Secure Random you want to use. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + An implementation of a version 2 X.509 Attribute Certificate. + + + + Verify the certificate's signature using a verifier created using the passed in verifier provider. + + An appropriate provider for verifying the certificate's signature. + True if the signature is valid. + If verifier provider is not appropriate or the certificate algorithm is invalid. + + + Class to produce an X.509 Version 2 AttributeCertificate. + + + Reset the generator + + + Set the Holder of this Attribute Certificate. + + + Set the issuer. + + + Set the serial number for the certificate. + + + + Set the signature algorithm. This can be either a name or an OID, names + are treated as case insensitive. + + The algorithm name. + + + Add an attribute. + + + Add a given extension field for the standard extensions tag. + + + + Add a given extension field for the standard extensions tag. + The value parameter becomes the contents of the octet string associated + with the extension. + + + + + Generate an X509 certificate, based on the current issuer and subject. + + + + + Generate an X509 certificate, based on the current issuer and subject, + using the supplied source of randomness, if required. + + + + + Generate a new X.509 Attribute Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An IX509AttributeCertificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + class to produce an X.509 Version 2 CRL. + + + reset the generator + + + Set the issuer distinguished name - the issuer is the entity whose private key is used to sign the + certificate. + + + Reason being as indicated by CrlReason, i.e. CrlReason.KeyCompromise + or 0 if CrlReason is not to be used + + + + 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 + + + + Add a CRL entry with extensions. + + + + Add the CRLEntry objects contained in a previous CRL. + + @param other the X509Crl to source the other entries from. + + + + Set the signature algorithm that will be used to sign this CRL. + + + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + add a given extension field for the standard extensions tag (tag 0) + + + + Generate an X.509 CRL, based on the current issuer and subject. + + The private key of the issuer that is signing this certificate. + An X509Crl. + + + + Generate an X.509 CRL, based on the current issuer and subject using the specified secure random. + + The private key of the issuer that is signing this certificate. + Your Secure Random instance. + An X509Crl. + + + + Generate a new X509Crl using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Crl. + + + + Allows enumeration of the signature names supported by the generator. + + + + + A class to Generate Version 3 X509Certificates. + + + + + Reset the Generator. + + + + + Set the certificate's serial number. + + 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. + The serial number. + + + + Set the distinguished name of the issuer. + The issuer is the entity which is signing the certificate. + + The issuer's DN. + + + + Set the date that this certificate is to be valid from. + + + + + + Set the date after which this certificate will no longer be valid. + + + + + + Set the DN of the entity that this certificate is about. + + + + + + Set the public key that this certificate identifies. + + + + + + Set the signature algorithm that will be used to sign this certificate. + + + + + + Set the subject unique ID - note: it is very rare that it is correct to do this. + + + + + + Set the issuer unique ID - note: it is very rare that it is correct to do this. + + + + + + Add a given extension field for the standard extensions tag (tag 3). + + string containing a dotted decimal Object Identifier. + Is it critical. + The value. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + The value. + + + + Add an extension using a string with a dotted decimal OID. + + string containing a dotted decimal Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add an extension to this certificate. + + Its Object Identifier. + Is it critical. + byte[] containing the value of this extension. + + + + Add a given extension field for the standard extensions tag (tag 3), + copying the extension value from another certificate. + + + + 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. + + + + Generate an X509Certificate. + + The private key of the issuer that is signing this certificate. + An X509Certificate. + + + + Generate an X509Certificate using your own SecureRandom. + + The private key of the issuer that is signing this certificate. + You Secure Random instance. + An X509Certificate. + + + + Generate a new X509Certificate using the passed in SignatureCalculator. + + A signature calculator factory with the necessary algorithm details. + An X509Certificate. + + + + Allows enumeration of the signature names supported by the generator. + + + + + Return a salted hash based on PBKDF2 for the UTF-8 encoding of the argument text. + + Provided key text + Base64 encoded string representing the salt + + + + diff --git a/EM_Libraries/EM_Statistics/Classes/ErrorCollector.cs b/EM_Libraries/EM_Statistics/Classes/ErrorCollector.cs index 3f75bc8..42cbd58 100644 --- a/EM_Libraries/EM_Statistics/Classes/ErrorCollector.cs +++ b/EM_Libraries/EM_Statistics/Classes/ErrorCollector.cs @@ -38,12 +38,12 @@ internal bool XEleGetBool(XElement xe, XElement xeParent, string nameParent = nu internal double XEleGetDouble(XElement xe, XElement xeParent, string nameParent = null) { - if (double.TryParse(xe.Value, out double d)) return d; AddXmlTryParseError(xe, xeParent, nameParent); return 0.0; + if (double.TryParse(xe.Value, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out double d)) return d; AddXmlTryParseError(xe, xeParent, nameParent); return 0.0; } internal int XEleGetInt(XElement xe, XElement xeParent, string nameParent = null) { - if (int.TryParse(xe.Value, out int i)) return i; AddXmlTryParseError(xe, xeParent, nameParent); return 0; + if (int.TryParse(xe.Value, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out int i)) return i; AddXmlTryParseError(xe, xeParent, nameParent); return 0; } internal T XEleGetEnum(XElement xe, XElement xeParent, string nameParent = null) diff --git a/EM_Libraries/EM_Statistics/Classes/ExportHandling.cs b/EM_Libraries/EM_Statistics/Classes/ExportHandling.cs index adb18c2..0925faf 100644 --- a/EM_Libraries/EM_Statistics/Classes/ExportHandling.cs +++ b/EM_Libraries/EM_Statistics/Classes/ExportHandling.cs @@ -26,15 +26,15 @@ private class ExportPage internal List Tables = new List(); } + private class ExportTable { internal string TableName { get; set; } internal string Caption { get; set; } internal string SubCaption { get; set; } internal string description { get; set; } - internal List ColHeaders { get; set; } - internal List RowHeaders { get; set; } - internal List RowBold { get; set; } + internal List Columns { get; set; } + internal List Rows { get; set; } internal DataTable Content { get; set; } internal List> NumberFormats = new List>(); internal DisplayResults.DisplayPage.DisplayTable.DisplayGraph Graph { get; set; } @@ -67,6 +67,16 @@ public static bool ExportMultiPackages(List allDisplayResults, o return Export(allDisplayResults, false, out errMsg, out excelStream); } + static string GetColumnName(int index) + { + const string letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + var value = ""; + if (index >= letters.Length) + value += letters[index / letters.Length - 1]; + value += letters[index % letters.Length]; + return value; + } + private static bool Export(List allDisplayResults, bool splitPackageIntoSheets, out string errMsg, out MemoryStream excelStream) { @@ -121,6 +131,8 @@ private static bool Export(List allDisplayResults, bool splitPac var workSheet = excel.Workbook.Worksheets.Add(sheetName); if (!sheetContent.TabColor.Equals(Color.Empty)) workSheet.TabColor = sheetContent.TabColor; int chartCount = 0; + string tableAdress = string.Empty; + List colWidths = new List(); int rPos = 1; workSheet.Cells[rPos, 1].Style.Font.Bold = true; @@ -168,24 +180,45 @@ private static bool Export(List allDisplayResults, bool splitPac workSheet.Cells[rPos, 1].Style.Font.Bold = true; workSheet.Cells[rPos++, 1].Value = ReplaceBr(EM_Helpers.StripHTMLSpecialCharacters(exportTable.SubCaption)); } - for (int ch = 0; ch < exportTable.ColHeaders.Count; ++ch) + // first give a border to the top-left corner + workSheet.Cells[rPos, 1].Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + workSheet.Cells[rPos, 1].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + + tableAdress = "A" + rPos + ":" + GetColumnName(exportTable.Columns.Count + 1) + (rPos + exportTable.Rows.Count); + + // then do the columns + for (int ch = 0; ch < exportTable.Columns.Count; ++ch) { - workSheet.Cells[rPos, ch + 2].Style.Font.Italic = true; - workSheet.Cells[rPos, ch + 2].Style.Font.Bold = true; - workSheet.DefaultColWidth = 40; - workSheet.Cells[rPos, ch + 2].Value = ReplaceBr(EM_Helpers.StripHTMLSpecialCharacters(exportTable.ColHeaders[ch])); - + //if (exportTable.Columns[ch].strong) + workSheet.Cells[rPos, ch + 2].Style.Font.Bold = true; + workSheet.Cells[rPos, ch + 2].Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + workSheet.Cells[rPos, ch + 2].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + if (ch == 0 || exportTable.Columns[ch].hasSeparatorBefore) + workSheet.Cells[rPos, ch + 2].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + if (ch == exportTable.Columns.Count - 1) + workSheet.Cells[rPos, ch + 2].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + else if (exportTable.Columns[ch].hasSeparatorAfter) + workSheet.Cells[rPos, ch + 2].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + // right-align all column headers + workSheet.Cells[rPos, ch + 2].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right; + workSheet.Cells[rPos, ch + 2].Value = ReplaceBr(EM_Helpers.StripHTMLSpecialCharacters(exportTable.Columns[ch].title)); } - for (int rh = 1; rh <= exportTable.RowHeaders.Count; ++rh) + // then the rows + for (int rh = 1; rh <= exportTable.Rows.Count; ++rh) { - workSheet.Cells[rPos + rh, 1].Style.Font.Italic = true; - - if (exportTable.RowBold[rh - 1]) - { + if (exportTable.Rows[rh - 1].strong) workSheet.Cells[rPos + rh, 1].Style.Font.Bold = true; - } - workSheet.Cells[rPos + rh, 1].Value = exportTable.RowHeaders[rh - 1]; + if (rh == 1 || exportTable.Rows[rh - 1].hasSeparatorBefore) + workSheet.Cells[rPos + rh, 1].Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + if (rh == exportTable.Rows.Count) + workSheet.Cells[rPos + rh, 1].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + else if (exportTable.Rows[rh - 1].hasSeparatorAfter) + workSheet.Cells[rPos + rh, 1].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + workSheet.Cells[rPos + rh, 1].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + workSheet.Cells[rPos + rh, 1].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + workSheet.Cells[rPos + rh, 1].Value = ReplaceBr(EM_Helpers.StripHTMLSpecialCharacters(exportTable.Rows[rh - 1].title)); } + // and finally the cells ExcelRangeBase pastedTable = workSheet.Cells[++rPos, 2].LoadFromDataTable(exportTable.Content, false); if (pastedTable != null) // may be null if for example Content does not have any rows (just column-headers) { @@ -199,10 +232,26 @@ private static bool Export(List allDisplayResults, bool splitPac workSheet.Cells[r, c].Style.Numberformat.Format = nf[r - pastedTable.Start.Row]; else workSheet.Cells[r, c].Value = sv[r - pastedTable.Start.Row]; - if (exportTable.RowBold[r - pastedTable.Start.Row]) - { + if (exportTable.Rows[r - pastedTable.Start.Row].strong || exportTable.Columns[c - pastedTable.Start.Column].strong) workSheet.Cells[r, c].Style.Font.Bold = true; - } + // top border + if (exportTable.Rows[r - pastedTable.Start.Row].hasSeparatorBefore) + workSheet.Cells[r, c].Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + // bottom border + if (r == pastedTable.End.Row) + workSheet.Cells[r, c].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + else if(exportTable.Rows[r - pastedTable.Start.Row].hasSeparatorAfter) + workSheet.Cells[r, c].Style.Border.Bottom.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + // left border + if (exportTable.Columns[c - pastedTable.Start.Column].hasSeparatorBefore) + workSheet.Cells[r, c].Style.Border.Left.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + // right border + if (c == pastedTable.End.Column) + workSheet.Cells[r, c].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Medium; + else if (exportTable.Columns[c - pastedTable.Start.Column].hasSeparatorAfter) + workSheet.Cells[r, c].Style.Border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; + // right-align all values + workSheet.Cells[r, c].Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Right; } @@ -214,9 +263,9 @@ private static bool Export(List allDisplayResults, bool splitPac ExcelChart baseChart = (ExcelChart)workSheet.Drawings.AddChart("myChart" + (++chartCount), chartTypes[0]); Dictionary allAreas = new Dictionary - { - { chartTypes[0], baseChart } - }; + { + { chartTypes[0], baseChart } + }; for (int i = 1; i < chartTypes.Count; i++) allAreas.Add(chartTypes[i], baseChart.PlotArea.ChartTypes.Add(chartTypes[i])); baseChart.SetSize(900, 500); baseChart.SetPosition(pastedTable.Start.Row, 0, pastedTable.End.Column, 50); @@ -263,18 +312,29 @@ private static bool Export(List allDisplayResults, bool splitPac } } } - rPos += exportTable.RowHeaders.Count; + // Find the best fit for this table, and save the column widths + workSheet.Cells[tableAdress].AutoFitColumns(); + for (int i=0; i<=exportTable.Columns.Count; i++) + { + if (colWidths.Count <= i) colWidths.Add(workSheet.Column(i+1).Width); + else colWidths[i] = Math.Min(Math.Max(colWidths[i], workSheet.Column(i+1).Width), 140); + } + + rPos += exportTable.Rows.Count; if (descriptionMode == HardDefinitions.ExportDescriptionMode.InSheets) InsertDescription(workSheet, ref rPos, exportTable.description); rPos++; // Keep a space between tables } } + // Aplpy the max required width considering all tables of this sheet + for (int i = 0; i < colWidths.Count; i++) + workSheet.Column(i + 1).Width = colWidths[i]; if (descriptionMode == HardDefinitions.ExportDescriptionMode.InSheets) InsertDescription(workSheet, ref rPos, exportPage.description); rPos++; // Keep an extra space between pages } } AddDescriptionPage(excel, allDisplayResults[0], descriptionMode); - + // todo: not yet clear whether the file-selection should be in the presenter or the library excelStream = new MemoryStream(); System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); @@ -333,12 +393,12 @@ private static void InsertDescription(ExcelWorksheet workSheet, ref int rPos, st if (string.IsNullOrEmpty(description)) return; workSheet.Cells[rPos, 1].Style.Font.Bold = true; workSheet.Cells[rPos++, 1].Value = header; - - foreach (string p in Regex.Split(description, "

    ")) // todo: improve ... + string des = description.Replace("

    ", "
    ").Replace("
    ", "
    ").Replace("
    ", "
    ").Replace("
  • ", "
    "); // here use "

    " because "

    " can be "

    " and is much more difficult to capture + foreach (string p in Regex.Split(des, "
    ")) { string para = p.Replace("\n", " ") // for e.g. "... income from\nother sources ..." - .Replace(" ", " "); - para = Regex.Replace(para, "<[^>]*>", " "); // removes and (at least I think so) + .Replace(" ", " "); + para = Regex.Replace(para, "<[^>]+>", ""); // removes and (at least I think so) while (para.Contains(" ")) para = para.Replace(" ", " "); // gets rid of multiple blanks while (para.Contains("\n\n")) para = para.Replace("\n\n", "\n"); // gets rid of multiple blank lines para = para.Trim(); @@ -413,9 +473,9 @@ private static eMarkerStyle GetMarkerStyle(DisplayResults.DisplayPage.DisplayTab private static string VerifyUniqueSheetName(ExcelWorksheets excelWorksheets, string sheetName) { if (sheetName.Length > 30) sheetName = sheetName.Substring(0, 30); // Excel does not allow for names with more than 30 characters - List sheetNames = new List(); sheetName = sheetName.ToLower(); int i = 0; - foreach (ExcelWorksheet s in excelWorksheets) sheetNames.Add(s.Name.ToLower()); - while(sheetNames.Contains(sheetName)) sheetName = (++i).ToString() + sheetName.Substring(i.ToString().Length); + List sheetNames = new List(); int i = 0; + foreach (ExcelWorksheet s in excelWorksheets) sheetNames.Add(s.Name); + while (sheetNames.Contains(sheetName, true)) { i++; sheetName = sheetName.Substring(0, sheetName.Length - (i.ToString().Length + 3)) + " (" + (i).ToString() + ")"; } return sheetName; } @@ -474,17 +534,15 @@ private static ExportTable GetTableContent(DisplayResults.DisplayPage.DisplayTab exportTable.TableName = tableName; exportTable.Content = new DataTable(); - exportTable.ColHeaders = new List(); - exportTable.RowHeaders = new List(); - exportTable.RowBold = new List(); + exportTable.Columns = new List(); + exportTable.Rows = new List(); exportTable.NumberFormats.Clear(); exportTable.StringValues.Clear(); foreach (DisplayResults.DisplayPage.DisplayTable.DisplayColumn col in displayTable.columns) { - string colHeader = ReplaceBr(col.title); - exportTable.ColHeaders.Add(colHeader); + exportTable.Columns.Add(col); exportTable.Content.Columns.Add(displayTable.columns.IndexOf(col).ToString(), typeof(double)); exportTable.NumberFormats.Add(new List()); exportTable.StringValues.Add(new List()); @@ -493,9 +551,7 @@ private static ExportTable GetTableContent(DisplayResults.DisplayPage.DisplayTab for (int r = 0; r < displayTable.rows.Count; r++) { DisplayResults.DisplayPage.DisplayTable.DisplayRow row = displayTable.rows[r]; - string rowHeader = ReplaceBr(row.title); - exportTable.RowHeaders.Add(rowHeader); - exportTable.RowBold.Add(row.strong); + exportTable.Rows.Add(row); object[] cellValues = new object[exportTable.Content.Columns.Count]; int c = 0; foreach (DisplayResults.DisplayPage.DisplayTable.DisplayCell cell in displayTable.cells[r]) diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo.cs index e55fae8..b37c781 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo.cs @@ -6,6 +6,8 @@ private class PrettyInfo { protected virtual string ident { get; } + internal virtual string getId() { return ident; } + internal virtual string ReplaceText(string origText, PrettyInfoResources resources) { return origText; } internal virtual string ReplaceHtml(string origHtml, PrettyInfoResources resources) { return origHtml; } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Definitions.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Definitions.cs index 62b648c..6223af4 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Definitions.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Definitions.cs @@ -13,11 +13,13 @@ public class PackageLabels public static List labels = null; // can be set by api (SetLabels) to replace system-names public const string PRETTY_INFO_BASE_COUNTRY = "[baseCountry]"; // alias of [country] for downwards-compatibility + public const string PRETTY_INFO_BASE_COUNTRY_SHORT = "[baseCountryShort]"; // allows for keeping the short country name only public const string PRETTY_INFO_BASE_TAX_SYS_PRETTY = "[baseTaxSysPretty]"; public const string PRETTY_INFO_REFORM_TAX_SYS_PRETTY = "[reformTaxSysPretty]"; public const string PRETTY_INFO_BASE_SYS = "[baseSys]"; public const string PRETTY_INFO_BASE_SYS_PRETTY = "[baseSysPretty]"; + public const string PRETTY_INFO_BASE_SYS_LIST = "[baseSysList]"; public const string PRETTY_INFO_BASE_SYS_LABEL = "[baseSysLabel]"; public const string PRETTY_INFO_BASE_FILENAME = "[baseFileName]"; public const string PRETTY_INFO_BASE_DATASET = "[baseDataset]"; @@ -47,11 +49,15 @@ public class PackageLabels public const string PRETTY_INFO_REF_SYS_LIST = "[refSysList]"; public const string PRETTY_INFO_REF_FILE_LIST = "[refFileList]"; + public const string PRETTY_INFO_USER_VAR = "[@"; + private static List allPrettyInfos = new List() { new PrettyInfo_BaseCountry(), + new PrettyInfo_BaseCountryShort(), new PrettyInfo_BaseSys(), new PrettyInfo_BaseSysPretty(), + new PrettyInfo_BaseSysList(), new PrettyInfo_BaseSysLabel(), new PrettyInfo_BaseTaxSysPretty(), new PrettyInfo_RefTaxSysPretty(), diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Functions.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Functions.cs index 3c23a30..319d8d5 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Functions.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoProvider_Functions.cs @@ -6,17 +6,17 @@ namespace EM_Statistics public static partial class PrettyInfoProvider { internal static string GetPrettyText(Template.TemplateInfo templateInfo, string origText, - SystemInfo baseSystem, List reformSystems = null, + List baseSystems, List reformSystems = null, string packageKey = null, int refNo = -1) { try { if (string.IsNullOrEmpty(origText)) return string.Empty; - PrettyInfoResources resources = new PrettyInfoResources(templateInfo, baseSystem, reformSystems, packageKey, refNo); + PrettyInfoResources resources = new PrettyInfoResources(templateInfo, baseSystems, reformSystems, packageKey, refNo); string newText = origText; - foreach (PrettyInfo pi in allPrettyInfos) newText = pi.ReplaceText(newText, resources); + foreach (PrettyInfo pi in allPrettyInfos) if (newText.Contains(pi.getId())) newText = pi.ReplaceText(newText, resources); return newText; } catch { return origText; } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoResources.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoResources.cs index c71ed94..bac7e2e 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoResources.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfoResources.cs @@ -7,15 +7,15 @@ public static partial class PrettyInfoProvider private class PrettyInfoResources { internal PrettyInfoResources(Template.TemplateInfo _templateInfo, - SystemInfo _baseSystem, List _reformSystems, + List _baseSystems, List _reformSystems, string _packageKey, int _refNo) { templateInfo = _templateInfo; - baseSystem = _baseSystem; reformSystems = _reformSystems; + baseSystems = _baseSystems; reformSystems = _reformSystems; packageKey = _packageKey; refNo = _refNo; } internal readonly Template.TemplateInfo templateInfo = null; - internal readonly SystemInfo baseSystem = null; + internal readonly List baseSystems = null; internal readonly List reformSystems = null; internal readonly string packageKey = null; internal readonly int refNo = -1; diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountry.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountry.cs index 5288de6..c34fa5a 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountry.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountry.cs @@ -10,8 +10,8 @@ private class PrettyInfo_BaseCountry : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return origText.Replace(ident, EM_Helpers.ShortCountryToFullCountry(resources.baseSystem.GetSystemName().Length >= 2 - ? resources.baseSystem.GetSystemName().Substring(0, 2).ToUpper() : string.Empty)); + return origText.Replace(ident, EM_Helpers.ShortCountryToFullCountry(resources.baseSystems[0].GetSystemName().Contains("_") + ? resources.baseSystems[0].GetSystemName().Split('_')[0].ToUpper() : string.Empty)); } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountryShort.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountryShort.cs new file mode 100644 index 0000000..103d0cb --- /dev/null +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseCountryShort.cs @@ -0,0 +1,18 @@ +using EM_Common; + +namespace EM_Statistics +{ + public static partial class PrettyInfoProvider + { + private class PrettyInfo_BaseCountryShort : PrettyInfo + { + protected override string ident { get => PRETTY_INFO_BASE_COUNTRY_SHORT; } + + internal override string ReplaceText(string origText, PrettyInfoResources resources) + { + return origText.Replace(ident, resources.baseSystems[0].GetSystemName().Contains("_") + ? resources.baseSystems[0].GetSystemName().Split('_')[0].ToUpper() : string.Empty); + } + } + } +} diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseDataset.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseDataset.cs index 4aca8b5..6f36d6b 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseDataset.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseDataset.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseDataset : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) - ? origText.Replace(ident, fileGenesis.runInfo.databaseName) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) + ? origText.Replace(ident, fileGenesis.runInfo.databaseName) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseFileName.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseFileName.cs index 1e54b0e..3e89a65 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseFileName.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseFileName.cs @@ -8,7 +8,7 @@ private class PrettyInfo_BaseFileName : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return origText.Replace(ident, resources.baseSystem.GetFileName()); + return origText.Replace(ident, resources.baseSystems[0].GetFileName()); } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunAddons.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunAddons.cs index 9f77bc6..50aae97 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunAddons.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunAddons.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunAddons : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunAddons(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunAddons(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunDuration.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunDuration.cs index cbc2d59..9f0e5fb 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunDuration.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunDuration.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunDuration : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunDuration(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunDuration(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunEndTime.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunEndTime.cs index b60d96e..3749c2e 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunEndTime.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunEndTime.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunEndTime : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunEndTime(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunEndTime(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunExtensionSwitches.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunExtensionSwitches.cs index 25dcc58..958d5fa 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunExtensionSwitches.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunExtensionSwitches.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunExtensionSwitches : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunExtensionSwitches(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunExtensionSwitches(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLog.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLog.cs index cc3c9ba..7360d3f 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLog.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLog.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunLog : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunLog(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunLog(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLogExtended.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLogExtended.cs index 5db7f59..7dddcd1 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLogExtended.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunLogExtended.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunLogExtended : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunLogExtended(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunLogExtended(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunStartTime.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunStartTime.cs index fe1c10a..fa5206b 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunStartTime.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunStartTime.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunStartTime : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunStartTime(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunStartTime(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunWarnings.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunWarnings.cs index a44d588..4b5ca58 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunWarnings.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseRunWarnings.cs @@ -10,8 +10,9 @@ private class PrettyInfo_BaseRunWarnings : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return resources.baseSystem.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? - origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyErrLog(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA); + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + (resources.baseSystems[0].GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) ? + origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyErrLog(fileGenesis)) : origText.Replace(ident, DefPar.Value.NA)) : origText; } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSys.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSys.cs index 5fd2739..dde958a 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSys.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSys.cs @@ -8,7 +8,7 @@ private class PrettyInfo_BaseSys : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return origText.Replace(ident, resources.baseSystem.GetSystemName()); + return origText.Replace(ident, resources.baseSystems[0].GetSystemName()); } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysLabel.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysLabel.cs index 358da65..1383cb2 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysLabel.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysLabel.cs @@ -12,7 +12,7 @@ private class PrettyInfo_BaseSysLabel : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { string label = labels == null ? null : (from l in labels where l.packageKey == resources.packageKey select l.baseSystemLabel).FirstOrDefault(); - string replacement = string.IsNullOrEmpty(label) ? EM_Helpers.OutputNameToPretty(resources.baseSystem.GetFileName()) : label; + string replacement = string.IsNullOrEmpty(label) ? EM_Helpers.OutputNameToPretty(resources.baseSystems[0].GetFileName()) : label; return origText.Replace(ident, replacement); } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysList.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysList.cs new file mode 100644 index 0000000..dc2aac8 --- /dev/null +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysList.cs @@ -0,0 +1,19 @@ +using System.Linq; + +namespace EM_Statistics +{ + public static partial class PrettyInfoProvider + { + private class PrettyInfo_BaseSysList : PrettyInfo + { + protected override string ident { get => PRETTY_INFO_BASE_SYS_LIST; } + + internal override string ReplaceText(string origText, PrettyInfoResources resources) + { + return resources.baseSystems != null && resources.baseSystems.Count > 0 ? + origText.Replace(ident, string.Join(", ", from r in resources.baseSystems select r.GetSystemName())) + : origText; + } + } + } +} diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysPretty.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysPretty.cs index 922512a..be2551c 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysPretty.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseSysPretty.cs @@ -10,7 +10,7 @@ private class PrettyInfo_BaseSysPretty : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return origText.Replace(ident, EM_Helpers.OutputNameToPretty(resources.baseSystem.GetSystemName())); + return origText.Replace(ident, EM_Helpers.OutputNameToPretty(resources.baseSystems[0].GetSystemName())); } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseTaxSysPretty.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseTaxSysPretty.cs index 61c02d5..57b9ff8 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseTaxSysPretty.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_BaseTaxSysPretty.cs @@ -10,7 +10,7 @@ private class PrettyInfo_BaseTaxSysPretty : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return origText.Replace(ident, EM_Helpers.OutputNameToTaxPretty(resources.baseSystem.GetFileName())); + return origText.Replace(ident, EM_Helpers.OutputNameToTaxPretty(resources.baseSystems[0].GetFileName())); } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_RefRunExtensionSwitches.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_RefRunExtensionSwitches.cs index a8d36b1..1b6d68f 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_RefRunExtensionSwitches.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_RefRunExtensionSwitches.cs @@ -1,4 +1,5 @@ using EM_Common; +using System.Collections.Generic; namespace EM_Statistics { @@ -10,11 +11,26 @@ private class PrettyInfo_RefRunExtensionSwitches : PrettyInfo internal override string ReplaceText(string origText, PrettyInfoResources resources) { - return GetRefSys(out SystemInfo refSys, resources) - ? refSys.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) - ? origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunExtensionSwitches(fileGenesis)) - : origText.Replace(ident, DefPar.Value.NA) - : origText; + // if no specific ref, try gettijng all refs + if (resources.refNo < 0) + { + List allRefs = new List(); + foreach (SystemInfo refSys in resources.reformSystems) + { + allRefs.Add(refSys.GetSystemName() + ": " + (refSys.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) + ? origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunExtensionSwitches(fileGenesis)) + : origText.Replace(ident, DefPar.Value.NA))); + } + return string.Join(",", allRefs); + } + else // else get the specific ref + { + return GetRefSys(out SystemInfo refSys, resources) + ? refSys.GetFileGenesis(out SystemInfo.FileGenesis fileGenesis) + ? origText.Replace(ident, PrettyInfoFileGenesis.GetPrettyRunExtensionSwitches(fileGenesis)) + : origText.Replace(ident, DefPar.Value.NA) + : origText; + } } } } diff --git a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_UserVar.cs b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_UserVar.cs index c9e5344..9675441 100644 --- a/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_UserVar.cs +++ b/EM_Libraries/EM_Statistics/Classes/PrettyInfo/PrettyInfo_UserVar.cs @@ -4,6 +4,8 @@ public static partial class PrettyInfoProvider { private class PrettyInfo_UserVar: PrettyInfo { + protected override string ident { get => PRETTY_INFO_USER_VAR; } + internal override string ReplaceText(string origText, PrettyInfoResources resources) { string newText = origText; diff --git a/EM_Libraries/EM_Statistics/Classes/Template.cs b/EM_Libraries/EM_Statistics/Classes/Template.cs index 2091ce9..0d7fe0f 100644 --- a/EM_Libraries/EM_Statistics/Classes/Template.cs +++ b/EM_Libraries/EM_Statistics/Classes/Template.cs @@ -51,6 +51,7 @@ public class TemplateInfo public List userVariables = new List(); public HardDefinitions.ExportDescriptionMode exportDescriptionMode = HardDefinitions.ExportDescriptionMode.InSheets; internal bool endUserFriendlyActionErrorMode = false; + internal bool doMultiColumns = true; public class CalculationLevel { @@ -298,7 +299,8 @@ internal TemplateInfo Clone() sdcMinObsDefault = this.sdcMinObsDefault, sdcHideZeroObs = this.sdcHideZeroObs, exportDescriptionMode = this.exportDescriptionMode, - endUserFriendlyActionErrorMode = this.endUserFriendlyActionErrorMode + endUserFriendlyActionErrorMode = this.endUserFriendlyActionErrorMode, + doMultiColumns = this.doMultiColumns }; foreach (CalculationLevel x in this.calculationLevels) inf.calculationLevels.Add(x.Clone()); foreach (RequiredVariable x in this.requiredVariables) inf.requiredVariables.Add(x.Clone()); @@ -381,6 +383,7 @@ public Filter(Filter copyFilter, int refNo = -1) if (copyFilter == null) return; if (!string.IsNullOrEmpty(copyFilter.name)) name = copyFilter.name + (refNo >= 0 ? HardDefinitions.Reform + refNo : string.Empty); + reform = copyFilter.reform; formulaString = copyFilter.formulaString; parameters = new List(); foreach (Parameter p in copyFilter.parameters) @@ -444,6 +447,7 @@ public class Action public bool? _reform = null; public bool? _saveResult = null; public bool? _blendParameters = null; // this could be enum (overwrite, blend, add) instead of bool - or is this a parameter attribute? + public bool? _important = null; // this could be enum (overwrite, blend, add) instead of bool - or is this a parameter attribute? internal Func, double> func; internal double result = double.NaN; public LocalMap localMap = null; @@ -452,6 +456,7 @@ public class Action public bool Reform { get { return !_reform.HasValue || _reform.Value; } } // default is true public bool SaveResult { get { return !_saveResult.HasValue || _saveResult.Value; } } // default is true public bool BlendParameters { get { return !_blendParameters.HasValue || _blendParameters.Value; } } // default is true + public bool Important { get { return _important.HasValue && _important.Value; } } // default is false public Action() { } internal Action(LocalMap _localMap) { localMap = _localMap; } @@ -473,6 +478,7 @@ public Action(Action copyAction, int refNo = -1) filter = new Filter(copyAction.filter, refNo); _reform = refNo == -1 ? copyAction._reform : false; // is this already a reform? if so, it should not be re-reformed! ;) _blendParameters = copyAction._blendParameters; + _important = copyAction._important; _saveResult = copyAction._saveResult; localMap = copyAction.localMap; } @@ -558,6 +564,7 @@ internal bool ApiMerge(Action apiAction, bool keep, ErrorCollector errorCollecto TemplateApi.Merge(ref _reform, apiAction._reform, keep, errorCollector); TemplateApi.Merge(ref _saveResult, apiAction._saveResult, keep, errorCollector); TemplateApi.Merge(ref _blendParameters, apiAction._blendParameters, keep, errorCollector); + TemplateApi.Merge(ref _important, apiAction._important, keep, errorCollector); TemplateApi.Merge(ref formulaString, apiAction.formulaString, keep, errorCollector); TemplateApi.MergeParameters(ref parameters, apiAction.parameters, keep, errorCollector); return true; @@ -735,7 +742,7 @@ public Table() { } public class TableElement : VisualElement { public string stringFormat = null; - internal Action cellAction = null; + public Action cellAction = null; internal SDCDefinition sdcDefinition = new SDCDefinition(); internal virtual bool ApiMerge(TableElement apiElement, bool keep, ErrorCollector errorCollector) @@ -806,6 +813,7 @@ public class Column : TableElement public bool hasSeparatorBefore = false; public bool hasSeparatorAfter = false; public string tiesWith = null; // this is used to visually tie a reform column to a base column + public string multiNo = null; private void Copy(Column c) { @@ -814,6 +822,7 @@ private void Copy(Column c) hasSeparatorAfter = c.hasSeparatorAfter; hasSeparatorBefore = c.hasSeparatorBefore; tiesWith = c.tiesWith; + multiNo = c.multiNo; } public new Column Clone() { @@ -830,6 +839,7 @@ internal override bool ApiMerge(TableElement apiElement, bool keep, ErrorCollect TemplateApi.Merge(ref hasSeparatorBefore, apiColumn.hasSeparatorBefore, false, keep, errorCollector); TemplateApi.Merge(ref hasSeparatorAfter, apiColumn.hasSeparatorAfter, false, keep, errorCollector); TemplateApi.Merge(ref tiesWith, apiColumn.tiesWith, keep, errorCollector); + TemplateApi.Merge(ref multiNo, apiColumn.multiNo, keep, errorCollector); return base.ApiMerge(apiColumn, keep, errorCollector); } @@ -877,7 +887,7 @@ internal void Copy(Row r) forEachDataRow = r.forEachDataRow; forEachValueOf = r.forEachValueOf; forEachValueMaxCount = r.forEachValueMaxCount; - foreach (var d in r.forEachValueDescriptions) forEachValueDescriptions.Add(d.Key, d.Value); + if (r.forEachValueDescriptions != null) foreach(var d in r.forEachValueDescriptions) forEachValueDescriptions.Add(d.Key, d.Value); } public new Row Clone() { @@ -1150,7 +1160,7 @@ internal static List GetDirectRefParameters(string formula, List -1) { int startpos = pos + XXX_VAR.Length + 1; // +1 to take "@" into account diff --git a/EM_Libraries/EM_Statistics/Classes/TemplateApi.cs b/EM_Libraries/EM_Statistics/Classes/TemplateApi.cs index 9c9700e..273adf7 100644 --- a/EM_Libraries/EM_Statistics/Classes/TemplateApi.cs +++ b/EM_Libraries/EM_Statistics/Classes/TemplateApi.cs @@ -13,7 +13,7 @@ public partial class TemplateApi private readonly Template template; private readonly ErrorCollector errorCollector; - public enum ModifyMode { AddNew, AddOrKeep, AddOrReplace, MergeKeep, MergeReplace } + public enum ModifyMode { AddNew, AddOrKeep, AddOrReplace, MergeKeep, MergeReplace, Delete } public enum AddWhere { Tail, Head, After, Before, Appropriate } public TemplateApi(Template _template, ErrorCollector _errorCollector) { template = _template; errorCollector = _errorCollector; } @@ -234,61 +234,117 @@ public bool ModifyUserVariables(Template.TemplateInfo.UserVariable modUserVariab catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return false; } } - ///

    - /// allows adding or changing an element of a list, for example an action of the global-actions-list, or a row of the rows of a certain table - /// - /// - /// can be Action, Filter, Row, Column, Cell, OptionalVariable, RequiredVariable, etc. - /// the type must provide the field 'name' (see 'modElement' below) - /// the type must provide a function 'ApiMerge' (see 'funcApiMerge' and 'modifyMode' below) - /// - /// - /// the element to add, respectively the values which should be changed - /// if the function attempts to change an element, the field 'name' is used to identify this element - /// - /// - /// the list of elements, i.e. the container of the element to add or change - /// - /// - /// a function that accomplishes the changes if 'modifyMode' is set to 'MergeKeep/Replace' (see below) - /// - /// - /// AddNew: 'modElement' is added, if 'elementsList' already contains an element with the same 'name' an error is issued - /// AddOrKeep: 'modElement' is added, if 'elementsList' does not contain an element with the same 'name' - /// AddOrReplace: 'modElement' is added, if 'elementsList' does not contain an element with the same 'name', - /// otherwise 'modElement' replaces the existing element - /// MergeKeep: 'modElement' is combined with an existing element in 'elementsList' with the same 'name' - /// the merging is accomplished by function 'funcApiMerge', with parameter 'keep' set to true - /// 'keep' has in priniciple has the following meaning: - /// keep = true: the existing element's values are prioritised, i.e. only properties with default-values in the existing element and non-default values in 'modElement' are changed - /// keep = false: 'modElements' values are prioritised - /// if 'elementsList' does not contain an element with the same 'name' an error is issued - /// MergeReplace: same as above, but parameter 'keep' set to false - /// - /// - /// - adding (AddNew, AddOrKeep/Replace with not existing 'modElement'): 'modElement' is added XXX (see below) - /// - replacing (AddOrKeep/Replace with existing 'modElement'): 'modElement' is moved XXX (see below) - /// - merging (AddMergeKeep/Replace): parameter 'addWhere' is ignored - /// XXX: Tail: at/to the end of 'elementList' - /// Head: at/to the top of 'elementList' - /// After: after the 'elementList's element with 'name'='nextToElementName' (must exist, otherwise an error is issued) - /// Before: before the 'elementList's element with 'name'='nextToElementName' (must exist, otherwise an error is issued) - /// if set to 'Appropriate', 'addWhere' is changed to 'Tail' on adding, otherwise the parameter is ignored - /// - /// - /// used in combination with 'addWhere' set to 'After' or 'Before' (see above) - /// - /// - /// used internally, i.e. not provided by API-user (only relevant for error-messages) - /// - /// - /// optional and used internally, i.e. not provided by API-user (only relevant for Actions and Filters) - /// - /// - /// true for success - /// false for non-success: error is added to errorCollector - /// - private bool ModifyListElements(T modElement, List elementsList, Func funcApiMerge, ModifyMode modifyMode, AddWhere addWhere, string nextToElementName, string callingFun, LocalMap localMap = null) + public Template.Page.Table.Row GetRow(string pageName, string tableName, string rowName) + { + string callingFun = "GetRow"; + try + { + if (!GetTable(out Template.Page.Table table, pageName, tableName, callingFun)) return null; + return table.rows.FirstOrDefault(r => r.name == rowName); + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return null; } + } + + public Template.Page.Table.Column GetColumn(string pageName, string tableName, string colName) + { + string callingFun = "GetColumn"; + try + { + if (!GetTable(out Template.Page.Table table, pageName, tableName, callingFun)) return null; + return table.columns.FirstOrDefault(c => c.name == colName); + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return null; } + } + + public Template.Page.Table.Cell GetCell(string pageName, string tableName, string cellName) + { + string callingFun = "GetCell"; + try + { + if (!GetTable(out Template.Page.Table table, pageName, tableName, callingFun)) return null; + return table.cells.FirstOrDefault(c => c.name == cellName); + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return null; } + } + + public Template.Page.Table GetTable(string pageName, string tableName) + { + string callingFun = "GetTable"; + try + { + if (!GetTable(out Template.Page.Table table, pageName, tableName, callingFun)) return null; + return table; + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return null; } + } + + public List GetCells(string pageName, string tableName, string columnName = "") + { + string callingFun = "GetCells"; + try + { + if (!GetTable(out Template.Page.Table table, pageName, tableName, callingFun)) return null; + if (string.IsNullOrEmpty(columnName)) return table.cells; + else return table.cells.FindAll(x => x.colName == columnName); + + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return null; } + } + /// + /// allows adding or changing an element of a list, for example an action of the global-actions-list, or a row of the rows of a certain table + /// + /// + /// can be Action, Filter, Row, Column, Cell, OptionalVariable, RequiredVariable, etc. + /// the type must provide the field 'name' (see 'modElement' below) + /// the type must provide a function 'ApiMerge' (see 'funcApiMerge' and 'modifyMode' below) + /// + /// + /// the element to add, respectively the values which should be changed + /// if the function attempts to change an element, the field 'name' is used to identify this element + /// + /// + /// the list of elements, i.e. the container of the element to add or change + /// + /// + /// a function that accomplishes the changes if 'modifyMode' is set to 'MergeKeep/Replace' (see below) + /// + /// + /// AddNew: 'modElement' is added, if 'elementsList' already contains an element with the same 'name' an error is issued + /// AddOrKeep: 'modElement' is added, if 'elementsList' does not contain an element with the same 'name' + /// AddOrReplace: 'modElement' is added, if 'elementsList' does not contain an element with the same 'name', + /// otherwise 'modElement' replaces the existing element + /// MergeKeep: 'modElement' is combined with an existing element in 'elementsList' with the same 'name' + /// the merging is accomplished by function 'funcApiMerge', with parameter 'keep' set to true + /// 'keep' has in priniciple has the following meaning: + /// keep = true: the existing element's values are prioritised, i.e. only properties with default-values in the existing element and non-default values in 'modElement' are changed + /// keep = false: 'modElements' values are prioritised + /// if 'elementsList' does not contain an element with the same 'name' an error is issued + /// MergeReplace: same as above, but parameter 'keep' set to false + /// + /// + /// - adding (AddNew, AddOrKeep/Replace with not existing 'modElement'): 'modElement' is added XXX (see below) + /// - replacing (AddOrKeep/Replace with existing 'modElement'): 'modElement' is moved XXX (see below) + /// - merging (AddMergeKeep/Replace): parameter 'addWhere' is ignored + /// XXX: Tail: at/to the end of 'elementList' + /// Head: at/to the top of 'elementList' + /// After: after the 'elementList's element with 'name'='nextToElementName' (must exist, otherwise an error is issued) + /// Before: before the 'elementList's element with 'name'='nextToElementName' (must exist, otherwise an error is issued) + /// if set to 'Appropriate', 'addWhere' is changed to 'Tail' on adding, otherwise the parameter is ignored + /// + /// + /// used in combination with 'addWhere' set to 'After' or 'Before' (see above) + /// + /// + /// used internally, i.e. not provided by API-user (only relevant for error-messages) + /// + /// + /// optional and used internally, i.e. not provided by API-user (only relevant for Actions and Filters) + /// + /// + /// true for success + /// false for non-success: error is added to errorCollector + /// + private bool ModifyListElements(T modElement, List elementsList, Func funcApiMerge, ModifyMode modifyMode, AddWhere addWhere, string nextToElementName, string callingFun, LocalMap localMap = null) { if (modElement == null) { AddError("Modify element must not be null.", callingFun); return false; } @@ -307,7 +363,7 @@ private bool ModifyListElements(T modElement, List elementsList, Func { return o.Clone(); }, callingFun); + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return false; } + } + + public bool CopyCell(string pageName, string tableName, Template.Page.Table.Cell origElement, string copyCellName, bool reform = false) + { + string callingFun = "CopyCell"; + try + { + if (!GetTable(out Template.Page.Table table, pageName, tableName, callingFun)) return false; + return CopyListElement(origElement, copyCellName, reform ? table.reformCells : table.cells, AddWhere.After, null, o => { return o.Clone(); }, callingFun); + } + catch (Exception exception) { AddError($"Unexpected error: {exception.Message}", callingFun); return false; } + } + + // This function finds an element by name and duplicates it private bool CopyListElement(string origName, string copyName, List elementList, AddWhere addWhere, string nextToName, Func funcClone, string callingFun) + { + if (!GetListElement(out T origElement, origName, elementList, true, callingFun)) return false; + return CopyListElement(origElement, copyName, elementList, addWhere, nextToName, funcClone, callingFun); + } + + // This function duplicates a given element + private bool CopyListElement(T origElement, string copyName, List elementList, AddWhere addWhere, string nextToName, Func funcClone, string callingFun) { FieldInfo fieldInfoName = typeof(T).GetField("name"); if (fieldInfoName == null) @@ -678,8 +766,6 @@ private bool CopyListElement(string origName, string copyName, List elemen return false; } - if (!GetListElement(out T origElement, origName, elementList, true, callingFun)) return false; - int indexNextTo = -1; if (addWhere == AddWhere.After || addWhere == AddWhere.Before) { diff --git a/EM_Libraries/EM_Statistics/EM_Statistics.csproj b/EM_Libraries/EM_Statistics/EM_Statistics.csproj index fd6358e..00953ae 100644 --- a/EM_Libraries/EM_Statistics/EM_Statistics.csproj +++ b/EM_Libraries/EM_Statistics/EM_Statistics.csproj @@ -212,6 +212,7 @@ ..\..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + @@ -219,7 +220,9 @@ + + @@ -260,6 +263,56 @@ + + + + + + + Form + + + SelectBaselinesReforms.cs + + + + Form + + + CategoryDescriptionsForm.cs + + + + + + + + Form + + + InDepthAnalysisForm.cs + + + + + Form + + + SettingsDistributional.cs + + + Form + + + SettingsFiscal.cs + + + Form + + + SettingsInequalityAndPoverty.cs + + True True @@ -278,17 +331,69 @@ + + Form + + + PresenterForm.cs + + + Form + + + SelectBaseAltsForm.cs + + + Form + + + SelectDefaultTemplateComboForm.cs + + + Form + + + SelectFilesForm.cs + + + Form + + + SelectPackagesForm.cs + + + Form + + + ShowInfoForm.cs + + + + Form + + + TakeUserInput.cs + + + + {7432577b-7f7f-4e06-b222-29d834a42dbe} + EM_Transformer + {5127e346-709c-4760-ad9c-81fc4859a3ef} EM_BackEnd + + {9cfaccaa-f897-480f-b05f-c6087c3ef15f} + EM_Common_Win + {b6e0e449-682d-4e76-b41b-ce98b106fd7c} EM_Common @@ -297,19 +402,71 @@ {a9d06cc2-8c4b-4ef8-be54-95b1ba58f189} EM_Crypt + + {5f32054e-282a-48d7-b1a9-8588f9ee3475} + EM_XmlHandler + + + SelectBaselinesReforms.cs + + + CategoryDescriptionsForm.cs + + + InDepthAnalysisForm.cs + + + SettingsDistributional.cs + + + SettingsFiscal.cs + + + SettingsInequalityAndPoverty.cs + - ResXFileCodeGenerator + PublicResXFileCodeGenerator Designer Resources.Designer.cs + + PresenterForm.cs + + + SelectBaseAltsForm.cs + + + SelectDefaultTemplateComboForm.cs + + + SelectFilesForm.cs + + + SelectPackagesForm.cs + + + ShowInfoForm.cs + + + TakeUserInput.cs + + + + + + + + + + @@ -324,6 +481,7 @@ + diff --git a/EM_Libraries/EM_Statistics/EM_TemplateCalculator.cs b/EM_Libraries/EM_Statistics/EM_TemplateCalculator.cs index df33c92..6a66a7a 100644 --- a/EM_Libraries/EM_Statistics/EM_TemplateCalculator.cs +++ b/EM_Libraries/EM_Statistics/EM_TemplateCalculator.cs @@ -89,9 +89,9 @@ public bool Prepare(List allFilenames, out ErrorCollector _errorCollecto break; } // prepare the display info - displayResults.info.title = PrettyInfoProvider.GetPrettyText(template.info, template.info.title, baselineSystemInfos[0], reformSystemInfos, packageKey); - displayResults.info.subtitle = PrettyInfoProvider.GetPrettyText(template.info, template.info.subtitle, baselineSystemInfos[0], reformSystemInfos, packageKey); - displayResults.info.button = PrettyInfoProvider.GetPrettyText(template.info, template.info.button, baselineSystemInfos[0], reformSystemInfos, packageKey); + displayResults.info.title = PrettyInfoProvider.GetPrettyText(template.info, template.info.title, baselineSystemInfos, reformSystemInfos, packageKey); + displayResults.info.subtitle = PrettyInfoProvider.GetPrettyText(template.info, template.info.subtitle, baselineSystemInfos, reformSystemInfos, packageKey); + displayResults.info.button = PrettyInfoProvider.GetPrettyText(template.info, template.info.button, baselineSystemInfos, reformSystemInfos, packageKey); displayResults.info.description = template.info.generalDescription; displayResults.info.exportDescriptionMode = template.info.exportDescriptionMode; @@ -212,7 +212,7 @@ private bool ReadData(out Dictionary _dataAndStats, Err // first read header line to get the column-indices of the variables to read List headers = dataRows.First().ToLower().Split('\t').ToList(); - Dictionary varColumnIndices = new Dictionary(); + List varColumnIndices = new List(); List missingVars = new List(); foreach (Template.TemplateInfo.RequiredVariable v in templateInfo.requiredVariables) { @@ -220,7 +220,7 @@ private bool ReadData(out Dictionary _dataAndStats, Err _dataAndStats[IND].AddVar(v.name, v.monetary, null); int index = headers.IndexOf(v.readVar.ToLower()); if (index < 0) missingVars.Add($"'{v.readVar}'"); - varColumnIndices.Add(v.name, index); + varColumnIndices.Add(new VarInfo() { name = v.name, index = index }); } if (missingVars.Any()) { @@ -232,13 +232,15 @@ private bool ReadData(out Dictionary _dataAndStats, Err foreach (Template.TemplateInfo.OptionalVariable v in templateInfo.optionalVariables) { if (_dataAndStats[IND].HasVariable(v.name, null)) continue; - _dataAndStats[IND].AddVar(v.name, v.monetary, null); varColumnIndices.Add(v.name, headers.IndexOf(v.readVar.ToLower())); + _dataAndStats[IND].AddVar(v.name, v.monetary, null); + varColumnIndices.Add(new VarInfo() { name = v.name, index = headers.IndexOf(v.readVar.ToLower()), defaultValue = v.defaultValue }); } if (templateInfo.userVariables != null) foreach (Template.TemplateInfo.UserVariable v in templateInfo.userVariables.Where(x => x.inputType == HardDefinitions.UserInputType.VariableName)) { if (_dataAndStats[IND].HasVariable(v.value, null)) continue; - _dataAndStats[IND].AddVar(v.value, v.monetary, null); varColumnIndices.Add(v.value, headers.IndexOf(v.value)); + _dataAndStats[IND].AddVar(v.value, v.monetary, null); + varColumnIndices.Add(new VarInfo() { name = v.name, index = headers.IndexOf(v.value.ToLower()) }); } _dataAndStats[IND].ConfirmKey(); @@ -248,25 +250,24 @@ private bool ReadData(out Dictionary _dataAndStats, Err string[] splitInputLine = inputLine.Replace(',', '.').Split('\t'); if (splitInputLine.Length != headers.Count) { - errorCollector.AddError($"Mismatch between headers and data columns {baseSystemInfo.GetFileName()}."); + errorCollector.AddError($"Mismatch between headers and data columns {baseSystemInfo.GetFileName()}."); return false; } List onePersonsVariablesDouble = new List(); - foreach (var varColumnIndex in varColumnIndices) + foreach (VarInfo vi in varColumnIndices) { - if (varColumnIndex.Value < 0) + if (vi.index < 0) { - // if it is a missing Optional Variable, then use its default value - if (templateInfo.optionalVariables.Exists(x => x.name == varColumnIndex.Key)) - onePersonsVariablesDouble.Add(templateInfo.optionalVariables.Find(x => x.name == varColumnIndex.Key).defaultValue); - // else the variable should be there! - else + if (vi.defaultValue == null) { - errorCollector.AddError($"Variable {varColumnIndex.Key} not found in base file {baseSystemInfo.GetFileName()}."); return false; + errorCollector.AddError($"Variable {vi.name} not found in base file {baseSystemInfo.GetFileName()}."); + return false; } + else + onePersonsVariablesDouble.Add(vi.defaultValue.Value); } - else onePersonsVariablesDouble.Add(double.Parse(splitInputLine.ElementAt(varColumnIndex.Value), CultureInfo.InvariantCulture)); + else onePersonsVariablesDouble.Add(double.Parse(splitInputLine.ElementAt(vi.index), CultureInfo.InvariantCulture)); } _dataAndStats[IND].AddObs(onePersonsVariablesDouble); } @@ -310,7 +311,7 @@ group person by person[keyIndex] into HH // first read header line to get the column-indices of the variables to read headers = dataRows.First().ToLower().Split('\t').ToList(); - varColumnIndices = new Dictionary(); + varColumnIndices = new List(); foreach (Template.TemplateInfo.RequiredVariable v in templateInfo.requiredVariables) { string refVar = v.name + HardDefinitions.Reform + refNo; @@ -322,19 +323,21 @@ group person by person[keyIndex] into HH errorCollector.AddError($"File {reformSystemInfo.GetFileName()} does not contain required variable '{v.readVar}'."); if (HardDefinitions.alwaysRequiredVariables.ContainsKey(v.name)) return false; } - varColumnIndices.Add(refVar, index); + varColumnIndices.Add(new VarInfo() { name = refVar, index = index }); } foreach (Template.TemplateInfo.OptionalVariable v in templateInfo.optionalVariables) { string refVar = v.name + HardDefinitions.Reform + refNo; if (_dataAndStats[IND].HasVariable(refVar, null)) continue; - _dataAndStats[IND].AddVar(refVar, v.monetary, null); varColumnIndices.Add(refVar, headers.IndexOf(v.readVar.ToLower())); + _dataAndStats[IND].AddVar(refVar, v.monetary, null); + varColumnIndices.Add(new VarInfo() { name = refVar, index = headers.IndexOf(v.readVar.ToLower()), defaultValue = v.defaultValue }); } foreach (Template.TemplateInfo.UserVariable v in templateInfo.userVariables.Where(x => x.inputType == HardDefinitions.UserInputType.VariableName)) { string refVar = v.value + HardDefinitions.Reform + refNo; if (_dataAndStats[IND].HasVariable(refVar, null)) continue; - _dataAndStats[IND].AddVar(refVar, v.monetary, null); varColumnIndices.Add(refVar, headers.IndexOf(v.value)); + _dataAndStats[IND].AddVar(refVar, v.monetary, null); + varColumnIndices.Add(new VarInfo() { name = refVar, index = headers.IndexOf(v.value) }); } // now read the data-lines, but only add the necessary variables int idPersonIndex = _dataAndStats[IND].GetVarIndex(HardDefinitions.idPerson, null); @@ -342,20 +345,19 @@ group person by person[keyIndex] into HH { string[] splitInputLine = inputLine.Replace(',', '.').Split('\t'); List onePersonsVariablesDouble = new List(); - foreach (var varColumnIndex in varColumnIndices) + foreach (VarInfo vi in varColumnIndices) { - if (varColumnIndex.Value < 0) + if (vi.index < 0) { - // if it is a missing Optional Variable, then use its default value - if (templateInfo.optionalVariables.Exists(x => x.name == GetBaseVarName(varColumnIndex.Key, refNo))) - onePersonsVariablesDouble.Add(templateInfo.optionalVariables.Find(x => x.name == GetBaseVarName(varColumnIndex.Key, refNo)).defaultValue); - // else the variable should be there! - else + if (vi.defaultValue == null) { - errorCollector.AddError($"Variable {GetBaseVarName(varColumnIndex.Key, refNo)} not found in reform file {reformSystemInfo.GetFileName()}."); return false; + errorCollector.AddError($"Variable {vi.name} not found in base file {baseSystemInfo.GetFileName()}."); + return false; } + else + onePersonsVariablesDouble.Add(vi.defaultValue.Value); } - else onePersonsVariablesDouble.Add(double.Parse(splitInputLine.ElementAt(varColumnIndex.Value), CultureInfo.InvariantCulture)); + else onePersonsVariablesDouble.Add(double.Parse(splitInputLine.ElementAt(vi.index), CultureInfo.InvariantCulture)); } if (!_dataAndStats[IND].HasObs(onePersonsVariablesDouble[idPersonIndex])) { @@ -370,6 +372,13 @@ group person by person[keyIndex] into HH return true; } + private class VarInfo + { + internal string name; + internal int index = -1; + internal double? defaultValue = null; + } + public string GetErrorMessage() { return errorCollector.GetErrorMessage(); @@ -835,17 +844,26 @@ internal bool CreateDisplayTable(out DisplayResults.DisplayPage.DisplayTable dis break; case HardDefinitions.TemplateType.Multi: - if (table.columnGrouping == HardDefinitions.ColumnGrouping.SystemFirst) // Col1/Sys1 .. ColX/Sys1 .... Col1/SysY .. ColX/SysY + if (template.info.doMultiColumns) { - for (int dasNo = 0; dasNo < dataAndStats.Count; dasNo++) - for (int colNo = 0; colNo < table.columns.Count; colNo++) - CreateBaseColAndCell(displayTable, colNo, dasNo); + if (table.columnGrouping == HardDefinitions.ColumnGrouping.SystemFirst) // Col1/Sys1 .. ColX/Sys1 .... Col1/SysY .. ColX/SysY + { + for (int dasNo = 0; dasNo < dataAndStats.Count; dasNo++) + for (int colNo = 0; colNo < table.columns.Count; colNo++) + CreateBaseColAndCell(displayTable, colNo, dasNo); + } + else if (table.columnGrouping == HardDefinitions.ColumnGrouping.ColumnFirst) // Col1/Sys1 .. Col1/SysY .... ColX/Sys1 .. ColX/SysY + { + for (int c = 0; c < table.columns.Count; c++) + for (int dasNo = 0; dasNo < dataAndStats.Count; dasNo++) + CreateBaseColAndCell(displayTable, c, dasNo); + } } - else if (table.columnGrouping == HardDefinitions.ColumnGrouping.ColumnFirst) // Col1/Sys1 .. Col1/SysY .... ColX/Sys1 .. ColX/SysY + else { - for (int c = 0; c < table.columns.Count; c++) - for (int dasNo = 0; dasNo < dataAndStats.Count; dasNo++) - CreateBaseColAndCell(displayTable, c, dasNo); + for (int colNo = 0; colNo < table.columns.Count; colNo++) + CreateBaseColAndCell(displayTable, colNo, string.IsNullOrEmpty(table.columns[colNo].multiNo) ? 0 : int.Parse(table.columns[colNo].multiNo)); + break; } break; @@ -1026,7 +1044,7 @@ private bool HandleForEachRow(string calculationLevel, Template.Page.Table table { listFilters.Add(new Template.Filter(localMap) { - formulaString = $"{(origFilter == null ? string.Empty : $"({origFilter.formulaString}) && ")}DATA_VAR[@valof_var] == {valofValue}", + formulaString = $"{(origFilter == null ? string.Empty : $"({origFilter.formulaString}) && ")}DATA_VAR[@valof_var] == {valofValue.ToString(CultureInfo.InvariantCulture)}", name = ReplaceValuePlaceholder(rowTitle, valofValue), // (mis)use the name to transfer the new title of the row parameters = new List() { @@ -1126,7 +1144,7 @@ private DisplayResults.DisplayPage.DisplayTable.DisplayCell CalculateCellValue( { int dasNo = template.info.templateType == HardDefinitions.TemplateType.Multi ? dataAndStats.IndexOf(data) : 0; displayCell.displayValue = PrettyInfoProvider.GetPrettyText(template.info, cell.cellAction.formulaString, - baselineSystemInfos[dasNo], reformSystemInfos, packageKey, refNo); + new List() { baselineSystemInfos[dasNo] }, reformSystemInfos, packageKey, refNo); displayCell.isStringValue = true; } else @@ -1141,7 +1159,7 @@ private DisplayResults.DisplayPage.DisplayTable.DisplayCell CalculateCellValue( displayCell.stringFormat = cell.stringFormat; // ... though applied here, required for exporting to Excel displayCell.secondarySdcGroups = cell.secondarySdcGroups; // ... required for secondary SDC-check - displayCell.displayValue = displayCell.value.ToString(cell.stringFormat, CultureInfo.InvariantCulture); + displayCell.displayValue = displayCell.value == double.PositiveInfinity ? "N/A" : displayCell.value.ToString(cell.stringFormat, CultureInfo.InvariantCulture); PrimarySDCCheck(displayCell, cell.sdcDefinition); // check for cells which need to be hidden because they are based on too few observations } @@ -1178,8 +1196,8 @@ private DisplayResults.DisplayPage PrepareDisplayPage(Template.Page page, int re DisplayResults.DisplayPage displayPage = new DisplayResults.DisplayPage() { name = page.name, - title = PrettyInfoProvider.GetPrettyText(template.info, page.title, baselineSystemInfos[0], reformSystemInfos, packageKey, refNo_PerReform), - subtitle = PrettyInfoProvider.GetPrettyText(template.info, page.subtitle, baselineSystemInfos[0], reformSystemInfos, packageKey, refNo_PerReform), + title = PrettyInfoProvider.GetPrettyText(template.info, page.title, baselineSystemInfos, reformSystemInfos, packageKey, refNo_PerReform), + subtitle = PrettyInfoProvider.GetPrettyText(template.info, page.subtitle, baselineSystemInfos, reformSystemInfos, packageKey, refNo_PerReform), button = new DisplayResults.DisplayPage.VisualDisplayElement() { backgroundColour = page.button.backgroundColour, @@ -1187,7 +1205,7 @@ private DisplayResults.DisplayPage PrepareDisplayPage(Template.Page page, int re textAlign = page.button.textAlign, strong = page.button.strong ?? false, tooltip = page.button.tooltip, - title = PrettyInfoProvider.GetPrettyText(template.info, page.button.title, baselineSystemInfos[0], reformSystemInfos, packageKey, refNo_PerReform) + title = PrettyInfoProvider.GetPrettyText(template.info, page.button.title, baselineSystemInfos, reformSystemInfos, packageKey, refNo_PerReform) }, html = page.html, description = page.description, @@ -1202,8 +1220,8 @@ private DisplayResults.DisplayPage.DisplayTable PrepareDisplayTable(Template.Pag return new DisplayResults.DisplayPage.DisplayTable() { name = table.name, - title = PrettyInfoProvider.GetPrettyText(template.info, table.title, baselineSystemInfos[0], reformSystemInfos, packageKey, refNo_PerReform), - subtitle = PrettyInfoProvider.GetPrettyText(template.info, table.subtitle, baselineSystemInfos[0], reformSystemInfos, packageKey, refNo_PerReform), + title = PrettyInfoProvider.GetPrettyText(template.info, table.title, baselineSystemInfos, reformSystemInfos, packageKey, refNo_PerReform), + subtitle = PrettyInfoProvider.GetPrettyText(template.info, table.subtitle, baselineSystemInfos, reformSystemInfos, packageKey, refNo_PerReform), //button = SystemInfo.GetCaptionText(template.info, table.button, baselineSystem[0], reformSystems), // table does not have a button description = table.description, stringFormat = table.stringFormat, @@ -1253,7 +1271,7 @@ private DisplayResults.DisplayPage.DisplayTable.DisplayColumn PrepareDisplayColu } return new DisplayResults.DisplayPage.DisplayTable.DisplayColumn() { - title = PrettyInfoProvider.GetPrettyText(template.info, column.title, baselineSystemInfos[dasNo], reformSystemInfos, packageKey, refNo), + title = PrettyInfoProvider.GetPrettyText(template.info, column.title, new List() { baselineSystemInfos[dasNo] }, reformSystemInfos, packageKey, refNo), stringFormat = column.stringFormat, tooltip = column.tooltip, hasSeparatorAfter = column.hasSeparatorAfter && (columnGrouping != HardDefinitions.ColumnGrouping.ColumnFirst || isLastSys), @@ -1385,13 +1403,14 @@ void Merge(Template.Page.Table.SDCDefinition parentSDCDefinition) private void BlendAction(Template.Action newAction, Template.Action oldAction) { - if (string.IsNullOrEmpty(newAction.formulaString) && !string.IsNullOrEmpty(oldAction.formulaString)) newAction.formulaString = oldAction.formulaString; - if (string.IsNullOrEmpty(newAction._calculationLevel) && !string.IsNullOrEmpty(oldAction._calculationLevel)) newAction._calculationLevel = oldAction._calculationLevel; - if (newAction.calculationType == HardDefinitions.CalculationType.NA && oldAction.calculationType != HardDefinitions.CalculationType.NA) newAction.calculationType = oldAction.calculationType; - if (string.IsNullOrEmpty(newAction.outputVar) && !string.IsNullOrEmpty(oldAction.outputVar)) newAction.outputVar = oldAction.outputVar; - if (newAction._reform == null && oldAction._reform != null) newAction._reform = oldAction._reform; - if (newAction._saveResult == null && oldAction._saveResult != null) newAction._saveResult = oldAction._saveResult; - if (newAction._blendParameters == null && oldAction._blendParameters != null) newAction._blendParameters = oldAction._blendParameters; + if ((string.IsNullOrEmpty(newAction.formulaString) && !string.IsNullOrEmpty(oldAction.formulaString)) || (oldAction.Important && !string.IsNullOrEmpty(oldAction.formulaString))) newAction.formulaString = oldAction.formulaString; + if ((string.IsNullOrEmpty(newAction._calculationLevel) && !string.IsNullOrEmpty(oldAction._calculationLevel)) || (oldAction.Important && !string.IsNullOrEmpty(oldAction._calculationLevel))) newAction._calculationLevel = oldAction._calculationLevel; + if ((newAction.calculationType == HardDefinitions.CalculationType.NA && oldAction.calculationType != HardDefinitions.CalculationType.NA) || (oldAction.Important && oldAction.calculationType != HardDefinitions.CalculationType.NA)) newAction.calculationType = oldAction.calculationType; + if ((string.IsNullOrEmpty(newAction.outputVar) && !string.IsNullOrEmpty(oldAction.outputVar)) || (oldAction.Important && !string.IsNullOrEmpty(oldAction.outputVar))) newAction.outputVar = oldAction.outputVar; + if ((newAction._reform == null && oldAction._reform != null) || (oldAction.Important && oldAction._reform != null)) newAction._reform = oldAction._reform; + if ((newAction._saveResult == null && oldAction._saveResult != null) || (oldAction.Important && oldAction._saveResult != null)) newAction._saveResult = oldAction._saveResult; + if ((newAction._blendParameters == null && oldAction._blendParameters != null) || (oldAction.Important && oldAction._blendParameters != null)) newAction._blendParameters = oldAction._blendParameters; + if (!newAction.Important && oldAction.Important) newAction._important = oldAction._important; if (oldAction.filter != null) { diff --git a/EM_Libraries/EM_Statistics/EM_TemplateCalculator_Actions.cs b/EM_Libraries/EM_Statistics/EM_TemplateCalculator_Actions.cs index 37680af..e3496f2 100644 --- a/EM_Libraries/EM_Statistics/EM_TemplateCalculator_Actions.cs +++ b/EM_Libraries/EM_Statistics/EM_TemplateCalculator_Actions.cs @@ -80,6 +80,7 @@ private bool CreateFlag(Dictionary data, Template.Actio if (data[action.CalculationLevel].HasVariable(action.outputVar, action.localMap)) return true; bool monetary = true; if (action.HasParameter(PAR_MONETARY)) GetBoolParameterValue(PAR_MONETARY, action, out monetary); + bool copyToIndividuals = true; if (action.HasParameter(PAR_COPY_TO_INDIVIDUALS)) GetBoolParameterValue(PAR_COPY_TO_INDIVIDUALS, action, out copyToIndividuals); data[action.CalculationLevel].AddVar(action.outputVar, monetary, action.localMap); data[action.CalculationLevel].GetData().ForEach(x => x.Add(action.filter.GetFunc(data[action.CalculationLevel])(x) ? 1 : 0)); return true; @@ -567,13 +568,14 @@ internal bool CreateGroupValue(Dictionary data, Templat if (action.HasParameter(PAR_SUMVAR) && !GetVarParameterInfo(PAR_SUMVAR, data, action, out _, out var, null, true)) return ActionErrorBool(action, "No summing variable defined"); GetBoolParameterValue(PAR_COPY_TO_INDIVIDUALS, action, out bool copyToIndDataset); bool? takeFromHead = null; if(action.HasParameter(PAR_COPY_TO_GROUP) && GetBoolParameterValue(PAR_COPY_TO_GROUP, action, out bool b)) takeFromHead = b; + Func, bool> filter = action.filter?.GetFunc(data[action.CalculationLevel]); - CreateGroupValue(data, action.CalculationLevel, var, action.outputVar, action.localMap, takeFromHead, copyToIndDataset); + CreateGroupValue(data, action.CalculationLevel, var, action.outputVar, action.localMap, takeFromHead, copyToIndDataset, filter); return true; } private void CreateGroupValue(Dictionary data, string calculationLevel, string var, - string outputVar = null, LocalMap localMap = null, bool? takeFromHead = null, bool copyToIndDataset = false) + string outputVar = null, LocalMap localMap = null, bool? takeFromHead = null, bool copyToIndDataset = false, Func, bool> filter = null) { if (outputVar == null) outputVar = var; bool outVarExists_group = data[calculationLevel].HasVariable(outputVar, localMap); @@ -590,7 +592,7 @@ private void CreateGroupValue(Dictionary data, string c int indexOutVar_group = data[calculationLevel].GetVarIndex(outputVar, localMap); int indexGroupingVar = data[IND].GetVarIndex(template.info.GetCalculationLevelVar(calculationLevel), localMap); int indexIdPerson = data[IND].GetKeyIndex(); - + foreach (var grp in from person in data[IND].GetData() group person by person[indexGroupingVar] into GRP select GRP) @@ -902,7 +904,7 @@ bool GetRangeNum(out int rn) int refNo = ExtractRefFromVarName(msgSwitchVar, out _); errorCollector.AddError(PrettyInfoProvider.GetPrettyText(template.info, refNo == -1 ? message.Replace("[ref", "[base") : message, // this allows for using e.g. [refSys] in Global/Page/Table-Actions to address both, base- and reform-systems (also see comment in function-header, all not very clean and could be improved) - baselineSystemInfos[0], reformSystemInfos, packageKey, refNo)); + baselineSystemInfos, reformSystemInfos, packageKey, refNo)); } private string GetVarNameCutOff(string outputVarName, double cutOffNumber) diff --git a/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatistic.cs b/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatistic.cs new file mode 100644 index 0000000..96693a0 --- /dev/null +++ b/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatistic.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EM_Statistics.ExternalStatistics +{ + public class ExternalStatistic + { + Dictionary aggregate; + Dictionary distributional; + List years; + + public ExternalStatistic() + { + Aggregate = new Dictionary(); + Distributional = new Dictionary(); + Years = new List(); + } + + public List Years { get => years; set => years = value; } + public Dictionary Aggregate { get => aggregate; set => aggregate = value; } + public Dictionary Distributional { get => distributional; set => distributional = value; } + } +} diff --git a/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticAggregate.cs b/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticAggregate.cs new file mode 100644 index 0000000..62a0360 --- /dev/null +++ b/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticAggregate.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EM_Statistics.ExternalStatistics +{ + public class ExternalStatisticAggregate + { + internal string name; + internal string incomeList; + internal string description; + internal string destination; + internal string source; + private string comment; + private bool canBeDeleted; + private Dictionary yearValues; + + public ExternalStatisticAggregate() { + name = string.Empty; + incomeList = string.Empty; + description = string.Empty; + destination = string.Empty; + source = string.Empty; + YearValues = new Dictionary(); + canBeDeleted = true; + comment = string.Empty; + } + + public ExternalStatisticAggregate(string incomeList, string name, string description, string source, string comment, string destination) + { + this.name = name; + this.IncomeList = incomeList; + this.Description = description; + this.Source = source; + this.Comment = comment; + this.Destination = destination; + } + + public string Name { get => name; set => name = value; } + public string IncomeList { get => incomeList; set => incomeList = value; } + public string Description { get => description; set => description = value; } + public string Destination { get => destination; set => destination = value; } + public string Source { get => source; set => source = value; } + public bool CanBeDeleted { get => canBeDeleted; set => canBeDeleted = value; } + public Dictionary YearValues { get => yearValues; set => yearValues = value; } + public string Comment { get => comment; set => comment = value; } + } + + public class ExternalStatisticAggregateValues + { + internal string amount = string.Empty; + internal string beneficiares = string.Empty; + internal string level = string.Empty; + + public ExternalStatisticAggregateValues() { } + public string Amount { get => amount; set => amount = value; } + public string Beneficiares { get => beneficiares; set => beneficiares = value; } + public string Level { get => level; set => level = value; } + + } + +} diff --git a/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticDistributional.cs b/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticDistributional.cs new file mode 100644 index 0000000..b24fef0 --- /dev/null +++ b/EM_Libraries/EM_Statistics/ExternalStatistics/ExternalStatisticDistributional.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EM_Statistics.ExternalStatistics +{ + public class ExternalStatisticDistributional + { + private string name; + private string tableName; + private string description; + private string source; + private string comment; + private Dictionary yearValues; + + public string Name { get => name; set => name = value; } + public string Description { get => description; set => description = value; } + public string Source { get => source; set => source = value; } + public string Comment { get => comment; set => comment = value; } + public Dictionary YearValues { get => yearValues; set => yearValues = value; } + public string TableName { get => tableName; set => tableName = value; } + + public ExternalStatisticDistributional() + { + Name = string.Empty; + Description = string.Empty; + Source = string.Empty; + YearValues = new Dictionary(); + Comment = string.Empty; + } + + public ExternalStatisticDistributional(string tableName, string name, string description, string source, string comment) + { + this.TableName = tableName; + this.Name = name; + this.Description = description; + this.Source = source; + this.Comment = comment; + this.YearValues = new Dictionary(); + } + } +} diff --git a/EM_Libraries/EM_Statistics/ExternalStatistics/IlVarInfo.cs b/EM_Libraries/EM_Statistics/ExternalStatistics/IlVarInfo.cs new file mode 100644 index 0000000..63398c6 --- /dev/null +++ b/EM_Libraries/EM_Statistics/ExternalStatistics/IlVarInfo.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EM_Statistics.ExternalStatistics +{ + public class IlVarInfo + { + public string name = string.Empty; + public string incomeList = string.Empty; + public string description = string.Empty; + public bool subtract = false; + } +} diff --git a/EM_Plugins/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs similarity index 86% rename from EM_Plugins/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs index 8ed04c9..c7d99e7 100644 --- a/EM_Plugins/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/BaselineReformPackage.cs @@ -6,9 +6,9 @@ using System.Xml; using System.Xml.Linq; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { - internal class BaselineReformPackage + public class BaselineReformPackage { internal class BaselineOrReform { @@ -25,8 +25,8 @@ internal class BaselineOrReform private const string XMLTAG_FILE_PATH = "FilePath"; private const string XMLTAG_LABEL = "Label"; - private BaselineReformPackage() { } - internal BaselineReformPackage(FilePackageContent filePackage) + public BaselineReformPackage() { } + public BaselineReformPackage(FilePackageContent filePackage) { baseline = new BaselineOrReform() { filePath = filePackage.PathBase }; foreach (string pathReform in filePackage.PathsAlt) reforms.Add(new BaselineOrReform() { filePath = pathReform }); @@ -118,10 +118,24 @@ internal bool GetFilePackageContent(out FilePackageContent fpc, out List return !string.IsNullOrEmpty(fpc.PathBase) && fpc.PathsAlt.Any(); } + internal bool GetFilePackageContentMacrovalidation(out FilePackageContent fpc, out List errors) + { + errors = new List(); fpc = new FilePackageContent(); + + foreach (BaselineOrReform reform in reforms) + { + if (File.Exists(reform.filePath)) fpc.PathsAlt.Add(reform.filePath); + else errors.Add($"Reform file {reform.filePath} does not exist."); + } + if (!fpc.PathsAlt.Any()) + errors.Add($"No existing reform files found."); + return fpc.PathsAlt.Any(); + } + internal void UpdateSystemInfo(Settings settings, out List errors) { errors = new List(); - if (baseline != null) + if (baseline != null && !string.IsNullOrEmpty(baseline.filePath)) { baseline.systemInfo = SystemInfo.Get(settings, baseline.filePath, out string wb); if (!string.IsNullOrEmpty(wb)) errors.Add(wb); diff --git a/EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs index bd79dab..4bc5438 100644 --- a/EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.Designer.cs @@ -1,4 +1,4 @@ -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { partial class SelectBaselinesReforms { diff --git a/EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs similarity index 89% rename from EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs index f5bd2b4..e8ef68b 100644 --- a/EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.cs @@ -6,9 +6,9 @@ using System.Linq; using System.Windows.Forms; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { - internal partial class SelectBaselinesReforms : Form + public partial class SelectBaselinesReforms : Form { readonly List requiredVariables = new List(); readonly List selectedIndices = new List(); // store the order of selection for reforms @@ -53,6 +53,7 @@ private void SelectPath(bool reforms) { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); folderBrowserDialog.SelectedPath = reforms ? txtReformsPath.Text : txtBaselinesPath.Text; + if (Path.GetFileName(folderBrowserDialog.SelectedPath).Contains("*") || Path.GetFileName(folderBrowserDialog.SelectedPath).Contains("?")) folderBrowserDialog.SelectedPath = Path.GetDirectoryName(folderBrowserDialog.SelectedPath); folderBrowserDialog.Description = $"Please select the folder containing the {(reforms ? "reform file(s)" : "baseline file(s)")}."; if (folderBrowserDialog.ShowDialog() == DialogResult.OK) if (reforms) txtReformsPath.Text = folderBrowserDialog.SelectedPath; else txtBaselinesPath.Text = folderBrowserDialog.SelectedPath; @@ -66,6 +67,11 @@ private void FillFileList(bool reforms) ListBox box = reforms ? listReforms : listBaselines; string filePattern = "*.txt"; string path = reforms ? txtReformsPath.Text : txtBaselinesPath.Text; + if (Path.GetFileName(path).Contains("*") || Path.GetFileName(path).Contains("?")) + { + filePattern = Path.GetFileName(path) + ".txt"; + path = Path.GetDirectoryName(path); + } box.Items.Clear(); if (Directory.Exists(path)) @@ -79,9 +85,13 @@ private void btnOK_Click(object sender, EventArgs e) filePackages = new List(); List errors = new List(); Dictionary blPrefixes = new Dictionary(StringComparer.OrdinalIgnoreCase); + string basePath = txtBaselinesPath.Text; + if (Path.GetFileName(basePath).Contains("*") || Path.GetFileName(basePath).Contains("?")) basePath = Path.GetDirectoryName(basePath); + string reformPath = txtReformsPath.Text; + if (Path.GetFileName(reformPath).StartsWith("*") || Path.GetFileName(reformPath).StartsWith("?")) reformPath = Path.GetDirectoryName(reformPath); foreach (string baseline in listBaselines.SelectedItems) { - FilePackageContent fpc = new FilePackageContent() { PathBase = Path.Combine(txtBaselinesPath.Text, baseline) }; + FilePackageContent fpc = new FilePackageContent() { PathBase = Path.Combine(basePath, baseline) }; if (!GetCountryPrefix(baseline, out string blPrefix)) continue; if (blPrefixes.ContainsKey(blPrefix)) { @@ -92,7 +102,7 @@ private void btnOK_Click(object sender, EventArgs e) { blPrefixes.Add(blPrefix, baseline); foreach (string reform in selectedIndices.Select(i => listReforms.Items[i])) // get alt selections in order - if (reform.StartsWith(blPrefix, true, null)) fpc.PathsAlt.Add(Path.Combine(txtReformsPath.Text, reform)); + if (reform.StartsWith(blPrefix, true, null)) fpc.PathsAlt.Add(Path.Combine(reformPath, reform)); if (!fpc.PathsAlt.Any()) { errors.Add($"Baseline {baseline}: no compatible reforms (starting with {blPrefix}) found."); diff --git a/EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.resx b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.resx similarity index 100% rename from EM_Plugins/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.resx rename to EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SelectBaselinesReforms.resx diff --git a/EM_Plugins/InDepthAnalysis/BaselineReform/SystemInfo.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SystemInfo.cs similarity index 85% rename from EM_Plugins/InDepthAnalysis/BaselineReform/SystemInfo.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SystemInfo.cs index 9258269..3421b89 100644 --- a/EM_Plugins/InDepthAnalysis/BaselineReform/SystemInfo.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/BaselineReform/SystemInfo.cs @@ -6,41 +6,33 @@ using System.IO; using System.Linq; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal class SystemInfo { - internal const string ILS_ORIGY = "ils_origy"; - internal const string ILS_DISPY = "ils_dispy"; - internal const string ILS_EARNS = "ils_earns"; - internal const string ILS_TAX = "ils_tax"; - internal const string ILS_SICDY = "ils_sicdy"; - internal const string ILS_SICER = "ils_sicer"; - internal const string ILS_SICCT = "ils_sicct"; - internal const string ILS_SICDYERCT = "ils_sic"; - internal const string ILS_PEN = "ils_pen"; - internal const string ILS_BEN = "ils_ben"; - internal const string ILS_BENMT = "ils_benmt"; - internal const string ILS_BENNT = "ils_bennt"; - internal static string[] ILS_SICDYERCT_LIST = new string[] { ILS_SICDY, ILS_SICER, ILS_SICCT }; - - internal List contentFile = new List(); + internal List contentFile = new List(); internal List modGenVarInfos = new List(); internal string systemName = null; internal Dictionary> fiscalIls = new Dictionary>(StringComparer.OrdinalIgnoreCase) { - { ILS_EARNS, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_TAX, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_SICDY, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_SICER, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_SICCT, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_PEN, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_BENMT, new Dictionary(StringComparer.OrdinalIgnoreCase) }, - { ILS_BENNT, new Dictionary(StringComparer.OrdinalIgnoreCase) } + { InDepthDefinitions.ILS_EARNS, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_TAX, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_SICDY, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_SICER, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_SICCT, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_PEN, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_BENMT, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_BENNT, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_ORIGY, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_SICEE, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_SICSE, new Dictionary(StringComparer.OrdinalIgnoreCase) }, + { InDepthDefinitions.ILS_EXTSTAT_OTHER, new Dictionary(StringComparer.OrdinalIgnoreCase) } }; + bool isMacrovalidation = true; + internal class IlVarInfo { internal string description = string.Empty; @@ -109,12 +101,18 @@ internal static SystemInfo Get(Settings settings, string outputFilePath, out str foreach (string key in systemInfo.fiscalIls.Keys) { - // if this is "ils_sic" use the hard-coded list here! - if (key.Equals(ILS_SICDYERCT)) - foreach (string k in ILS_SICDYERCT_LIST) + + if (key.Equals(InDepthDefinitions.ILS_ORIGY) && !systemInfo.isMacrovalidation) + { + continue; + } + // if this is "ils_sic" use the hard-coded list here! + if (key.Equals(InDepthDefinitions.ILS_SICDYERCT)) + foreach (string k in InDepthDefinitions.ILS_SICDYERCT_LIST) GetContentIL(k, systemInfo.fiscalIls[key]); // else, return the incomelist GetContentIL(key, systemInfo.fiscalIls[key]); + } void GetContentIL(string ilNames, Dictionary contentIL) @@ -122,7 +120,7 @@ void GetContentIL(string ilNames, Dictionary contentIL) foreach (string ilName in ilNames.Split(',')) { if (!contentILs.ContainsKey(ilName)) return; - foreach (var v in GetFlatIl(contentILs[ilName])) + foreach (var v in GetFlatIl(contentILs[ilName], ilName)) { string varName = v.Key; IlVarInfo varInfo = v.Value; if (!contentIL.ContainsKey(varName)) @@ -132,19 +130,19 @@ void GetContentIL(string ilNames, Dictionary contentIL) } } - Dictionary GetFlatIl(Dictionary il, bool substract = false) + Dictionary GetFlatIl(Dictionary il, string il_name, bool substract = false) { Dictionary flatIl = new Dictionary(); foreach (var entry in il) { - string entryName = entry.Key; IlVarInfo entryVarInfo = entry.Value; entryVarInfo.substract ^= substract; - if (!contentILs.ContainsKey(entryName)) // variable + string entryName = entry.Key; IlVarInfo entryVarInfo = entry.Value; + if (il_name.Equals(InDepthDefinitions.ILS_EXTSTAT_OTHER) || !contentILs.ContainsKey(entryName)) // variable { if (!flatIl.ContainsKey(entryName)) flatIl.Add(entryName, entryVarInfo); } else // another incomelist { - foreach (var subIlEntry in GetFlatIl(contentILs[entryName], entryVarInfo.substract)) + foreach (var subIlEntry in GetFlatIl(contentILs[entryName], entryName)) { string subIlEntryName = subIlEntry.Key; IlVarInfo subILEntryVarInfo = subIlEntry.Value; if (!flatIl.ContainsKey(subIlEntryName)) flatIl.Add(subIlEntryName, subILEntryVarInfo); diff --git a/EM_Libraries/EM_Statistics/InDepthAnalysis/Help.chm b/EM_Libraries/EM_Statistics/InDepthAnalysis/Help.chm new file mode 100644 index 0000000000000000000000000000000000000000..c2482ef10de44f5df3c54d9ebf6cfff9c7675818 GIT binary patch literal 44739 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
  • NP62L6=zwLbS_|>gQKW(K@rUefkueVZVc0T~fASFlux!hmHmmIZkBK0l$(f z<~5_JcviI%jT9riCqC%T@}~NU5u6~diQGX!B^P#*1tUC$b}@Lb@34*Vi*v7*3M9q_ z<}7St7>tT%qm$|3-s^2~o;ieOD~t{bAQ&eNxq7AtYO8IEbhQ;mt9A8FwW5enY43{) z>Z^S@jN<90#Jq!U@oohX!`N5u>$4%0s(}dQ#cH(jGBwpf#o8f}GF+@!LB7wDCTzC? zaQ0qY5|j>R7#VO^avYh_SMA#?0}}Ql?xf&IWkYD?t-6#d%C*%I6$UoS3dWP+tOM1L z9z-zDuo)=2_^o*5pI023JI1SvVml)z87{+<7AXDK$K=i2LybnYV!`FY(8?8bRjUg3 zF|;(fQ{@oviK%)6SX>+Md>Hmi3SstrGeycU=Z7zNnaWyqm}b&I^3P^8@bKe7Bj0F$#a=ETDytu+GjX?#sr9;_!D1P*Mn)w)CRkfEAO4;h$Ma> ze*9Gz0KfpQM+^Yy0+yeNOQSxm&y7TgX=BUN1f|x_hMY-Mm6zw2maoW-p9ioQy|(82iCoXKy&{&m@x^HB+E#w5 zaEAJAgLON*i>+1cBkPL+|9)rk*+Lx;aI)Yik6WCCrkN+5FOrb(W||O#P@ka04uQ1W zI|F>hPZ|j22#k;ur8Kc^i5(PXr8nz8e!UAY0j&y)0-Qg;d$PGQIo8u?(k`csEUUqY zd`FigR>O=#0z!!J16+iGhKaesgaOE2a&fm#37YV9d^A>Ri01-in^2kjD zD{nbUQicFy1vgco^>~|$86PT8$$ynV#)4{}o39q2szk27L=g}Rm@-btzkF)V?L(Z^ zYAuZWQEos6T*{Gh5+U&!vEP1fqUJC_6(~5I((S3NtZ%3dSx{nRuIF|zv9%3&c4mqm zeSZIY(F|;}&o|8Fa|w?Z31p0sxa!P8$o)(+&~c{haMs(YRde)pwH>GoRmV8c8+ygVktB6ibQ+fQpOZsEgm~6 zTbu#!=;+*bXt-j#tW6N`&57I8 z$RY~tYVoJ_R!QS$@blNJktsFN@>$2`b?7H_lyo*9%d#qh>N>VH1SY!$G{#8OG%35$ zy%5bv;e!j6E2^2i3#X{t#!^yH<+kecej;|`Z}trN(S>*4lwRlRx$fCyj4Tf@&wedw zu-al1KX~9(8YcvWqC%F4-(p^i!N3L8Mn~yIp89z^WdLvSF@m=Zh7iq?*R6u z#)=Nxped|(3ahPC6awI#+XS1NH6-lL(6zqXc+ly7&3r+Hit zN%oNEP7MePmF)-wQ-X$^&VxZBE7r4z|9+?|h}IwppOKzNjUD~)?*sRV;UTd9RaR`}ACs3))Nw-b*6>S!_h$a z=^xCPK!vkCC2`n-8SO))s8+uzf$i+OTL3dIY3%H~H7coDj5AoGCPZ&tl+@~hdXa)!Gz%qNSwUIto`RUVS(MIaVcV);oIW26X}XH4QFX(pIFK#u zqh3B73MF^mi*~43Odm%OVI)26($>l8a#Zt{bTFuCin`Ibc0m+y@y$nM&SC z{fCYzLUAx7Zwn=|Brz|bPQm^k_UbZ0RyvhPbTs?yuW?1se z``rOWJlZPLQxH>C3NVP9%a$M>4%evw-}$Fieo+%u$5pp+31xcc;S2{n4=bcAVKg3qv$w*c#K7R z4>)@o08`O_dR?S9ga!usHm7=mqnmNXvyUO{KhHC2(pzD4DA0EDj#}`;cka{1^*$aG zJD*VE)ZmHqyKV4(E?#s$qZ|Hv`>Ez&VBtW@Zr^PBP4r{` znmV+#P@~9{r(h1j0+Hap+rA?+9v2CnlfYhF28nGHkc$zYu5U^gJAIC*m#VG){n+d4BO z;S)Mtbw_P>>|zc6Ku1&>rK8C1qsi-zFNl&}Hgg$V0ryw6oi3o?88`45X1xq8bxtwk zgr$?!p?G8^(}(vIIo#H(wSK{QM)jUAd({{8$P}G^JTE}cTaZYf6xX!iA?wU)Z6?Px+*~4fyzYTaz@!V*0McZ0y%6xZ;kfEk= zV~F27>J$osbP6xIzQqe|vBF!dL2};bK_Vhl8G07Ds`2U55SPSZIeij@eR!gb5q;)A z3+S?v^?%wzffe}HR>mxuT%~q9bus_g+|hSJAaZQ^hEqCOADJ3^G?~7TXu2m<@bUxnXP5J#tOnf1});%Pb)G>0o$-X@W znkBm1i&i}GdkB7fjXDvoQbAW+hv`Ip(b;gai%q~Q)DEYFrb*omlQHPM;@Wrm5G^OBqIZXXXLaLBSL9b2HMF7?}c4Zng#`Kv`i%YrJI%j~mGy+YIM zJjwyip37u@rrg*$0d;@G(qPn0z#Jcov$xm}7qF{j2KN)FJ@wG)5)wCVTS3Es%edr@ zOi$l$GV4_?$qUY}a)_Y)o!R{RmvzV(9nf!KZQaE7QV(OS%P;C3EUcVwTT2S)Dcwc zsva@sR_A0WMeIL6drMlS)tm<32EJYE+J&VF_nBtWjlC6naHAR`?iw}hrV0a4Bq*sDkgbN6Fc{;)174> z<`d{QJt^evTgXQfbEk#!80BUBWujGnU1@Nmz+g9V=`KF1d>_ z1sj;+j3d4yUsZU=e@>am^1hwIxxnJl6%%~b=7=>Mb5hQ)3Yqahz1WkM#)@2JPzykJQpJB_JPuQMX!9j zv?moO)5fZg=Bi1r8NP~C4mdK>t%SkJaAV=UkNmn{o++TU5Z+h21QkU!7(_p;dLt@? zj6+$_^ZUem6C?IA~ba~w33!_cxcJWAhL)f z@aq(&dCYXK3xYOSK5#v6^Oiu%g=D3)5N2>m@0|0lRp}`DklcGu?#bT>zXTDeGaDvs z6!H}_4hE?7q%40BRuZ4=v@_ogz*p{~AGh3fVlbL#xkp|mkeEUC|WrmL8ubB=6FI&}aUevk9g)79=i(S^df6;(}I*GX(}DBadt7F%Lx z=#25i_oOQ=O#m`RcvQbgn#lOR)<_eo-81T`TQk-WZi?P_NS3KsqN8ivb<9fJb{o0t zOt2B&R#QL%1^X-tWl&_mc45m(vlT*hq*2KdYbpbUS^98dfH%k_ureu1sLg$ZlTFXQ zvfVY6?3J!zAiZQvVG49gIj9(kbNu|SXq9&eLG-oKYr{8X;H?qAWvQdFD6{gX)urxq z&`;d)^RAkk!zyI9x)yPI%s!5_lUCrxlCsqWZN7G9Q_8GqeVJ>x;F@h>(uV6ofbD4Cn>wGZ@1<)%u*b?|T|d2fN~CLmhHb-!y>b2k-i%YQ@&0MJ z4IIrGIk~^x9Z_Y0u&+tkO=7UA%sQj72k+d3CpVo5UGexNqf&#KP^b>K&oA~U;*Goa z)S3`vS4)a1364WkKOqtCj6^D4re!3?7;j+OW^|O)Z#-pM-7~efeFa)(1Shp+@F2`1!efP!ISY9P} zqw(#zW5~T-!6+hRrpQrW%|mNpIQ`E3V6H9oEqj%>fo|SVh-TVJ`|37kU8frF>0GtP zK+C^IFBF|YH~&Nw<)q$7 z!(Z(u(xz&b=KB6VMz5Whlpy6D>`wbP&ArH7w12g8{`xN1_Je%;|1gN1^)&qBE{&wz ztw2%2|B^fzRNN>ws;*g;*L>9xywi+?GC4DwvdS_E-guwzF7joG2>O%=|6*>?+j#l<80Y0Ut_Y)X&e~e8cu6 zB}zrvBgMymW&qVo`6-{Xr;(2TAZ51YsE3D-oC~W14^noRExjT` z?AzlFHVQ^X{jd|<^s$7-)Y@VVj?ql(KOxPp;j>QiXSVDo&Ium#4x5?+?0r{_{jhfN z57y4k(dcCp@BLhAAsRE=>nUk9`*cRc#(4NjKdghS4)}wrX7cA0 zw_T4yY7)GWB+g4ieyqW~W*OWW=j5J$>aW0ULV^E}d;FHY4zE?Zj}Gc{Dx$tnt8_n% zj0rkG=jl-cgPr8h@+rw#POa~{@$TN~0J81Nr8M=BV;R94JUpA_euWAG9@jM?Km?ff zi#4vfCGkTH6XTnS`R)fC-TR@238 zKje%b--ymf9mJzVV~8K*ogd$19XzoW%MzdxhJorYnW)QpRBDZEBJ())sGeDTpiR7Yz_$e9eqJjK*8QP!% z0iiqfqJabh75YU25vD7Rl!4rV8U~|4@NA8R(SbBE8xo@eafU6LlnogQ2^6TuN5J~; z3H8q?z|XHF?a%$H0pP6oOX+@;HAlY9=O+w=?!wS~etdr-e)#cN!DP4rXD=-K&rYEE z0eb$$5^!Sqa0DetA$Bb(vMj+ob`;NW0ufw)A_!B})NsNTnU-L9PRNRtLR@hbQJl~R zAG&l{WD)|#hBU&QunRAiENNscfnwGpUtwUV)DcgbigW1KZMmRhxP$;#DB=35=)tw2@z39OZVTG{CdHeoiBXxgd6t3UU$+lLnVRb20 z4hQ>r;B|>-gsR+nzt=GTKmzY~d=Hty{{P>%X);j{sgFL?{JfD&Pb^+k`n_TR&^V4IUdnuUB8Ohml&)}V4W-f`a0v-n_5nc)bdxk;Cyh z5@W_f@Sw8C4_!0&>>aR^<_xDZ6HPnAp#hJLK`cEqe&s5QQ&hW!IAAH36=oTdL!mqv zhl14hr3Wg6M2bl5UsNBwz5(4Zb9>y-t+wE-7I z-Ija{>XfW~7vbA|fCM)Oop3uU;GNBlYC-f{0FopfaGPfMtPnjGIOCCc-NLkM7OY#F z+cl@!G;)QSaBgolsDU3~YPzaYrO^WYZ^R80Q}EHVu5^sT5T4!V9qD*6-k>1&_b^Oy zE`r~atxsuE9O~h`6H6k;cqlB_4uNx{_VEM3PD9mvrVV&t*QWSGQ_hWM7fB)QSb&M1 zcQJw9ERwwCONK)iljv@@cD8UHbI{z4g%~rl~96a3gjRR zHI)x&3gSI$S?obE^>^2CCKSrT5?P%^Wa4GuL#G`ss=@=evjJU>QQ&|E=9e13i)D{p zm(Jb50tr91B=!Vmfx);`ixvYv@1;@@mIdOmL>;Tkt#6r&fS%cXf(2ca+o&_UpRE(b z)`4&~CagYi2L;9G9+nFXB+CTfc7kBJW0GM+?C*}KGcHIdAPqUptM0h4DRlwS-LjVZ z4R3EmAAKK(xl2(&1<)6`?FL}aDRBAqs{YLYVIxw#xwlr$^E2t#T=24~C2z+{E#%fH zPB4!R9ruVkf=i_OF1uMo(E$$47!+27Ux(xyZ<3Wd$RSPUnGL=!~0FKIb z%m&(I5`yTJKZFk`m7|`cHU!y2R9e*YN(O;wiR7rf|io0FSVwqq-JoPHXfs{tp%0C}^4%{caa`9BB{`b!N0V%$q#{D6%HF zapPT1yyODB$;TpADNU>DoYKO9!eLB}Pc872G@=R5oTG+#Vd_Oi>zyj&z|@dNs z`};f>TohyFYf^{4xIqkZ=$YY6>g85&rsHt9o$R3AyJ45T*sIOq5(-52S_@H>_at?I zf7*_FtDbgIm{eT=cV#N8PvcCJygLrM8-`e}k8*GdYt%}Hwmx0}?vbN81L9qHdY7KM zeHV_qAisi_Y}IeNrf?q`R%>CZ9MFoPs??MfjR$JG>L*loTArrIlv}p^p zK#NZsr-V#5QdclwZ&g-qm+l{M;S|!4mvTS8+*a8mn$FiWgN(Ww49Dj$RZVGxLqT$f ziKQoxs>aL5fFsb3^m7C{N$27YD(c5TC)-xr`2D0uZoOK#VuXgp^z2w|c>Z9=vE5at zcvMxYkjrppR9yvZ+At`NB7DkhfVjBszU2y!UaKgn+Oq&*@1K9%r-L|X>jPZbssjGQ z^l%;pY{9Qw?CLm9}cnspa(z$C;^4;*1(3t?X5zkSro&8nYBn#w^`GJ zZV53*QsrBd{mL3iY`Q{^-dv6<(r#yW4MQiu$Qk#QopUvmle8TrsTz|dhMYwb1zGyM z?Ul)4;s?m924*`KzXQ%hEshz7HDnbD2Tv=qKCqoK9n`C*hsgkKZa2XWxT+2>hc*{M zyQCBv_8BPtM+%ejc{XAm3vtH*H!-mtBTI2(-3iss0q8mf%y)UZ32s!`GVJPJYH;7L zTpBvJUchpu1Dw{gaXQy^P>%CbM#1ALfE8&dJWIB6P)=|}AD#{be@+$D50n@6I5i7< z5UnMDkU-IS?YnS3j*c9;UOrw(0WPM{!7H~FwVrvR&=fyGIRPI>#-V^0k4Rv%Hh}LB zHEp?V)~duX7x(Nixq2LVEW=Vqb`GDo0hO)9lLkO(TGVw;$GU3CPOx|9;^HSX_d;h2 zqDD(MhCwkp4Jf*eZjp5r_5`5u$ndk}C-B7Nb!zjbWpzy8T5B6DOpz-@!)mTHHJowA zJIG5&tV8e%muK=1To%v@G6C5O8LGKuK!;xfOb_r18l=Ix@2DE((#Ompt0tIM&h{kG zWWcG?lsbkAhH8RsfY@!?zg$Z#5f-FS-dv|!OK5|P;$;OhEjbZlFSk?*gWf(tp)5lR z3quvP09wUySn1*tSQGPw)e?c0-)7{7GJHXmSc%gvr5@`>4-MuS0Xc65#d#U;tIAh3 zp}^OZS^&)9Siv!Xx0~wrm~G<)-~?U?Gj8~6W~alnxTmVwG>O6vJ9e&j!g}Zk6W**Crg8W!`@F@7`wjs#=Wwp8#}^89@tSnDSlA++3$G|#7{Q85B*k!di~^NW zhbx~rInWd|`W8;+_UlF>*~i{YJE4oKY!pDJ(2l_IyJ%dB;*#;l61Id`oeppl_-U~t zwy^3EGW72AG{#-L)IAHNHCwX~&B_&cmBAC{!IF6Nrj=oj`4?!b~r&N|*T86N3=z_%U{To(=@>4mp;FlE$zAz@ad(TgVVHb8b7A!5ZsLSB1eSoO)7}ZanXTxl*3|t@3eH*7+?gv3IT>euEYu zmfhgW!yS*Vi*8)VAnQ;t(16da&&^#GU3tP32(%#h=Qv~OmrXIDULhxjJ0S~4ED z1fGo9r2_a&$W^UO?!=(L>F?xINBzSXx+Ewm#hQ0XO9bnUEl#ltQ!5x3fbJ`rCUv0& z1CGl{glx3z1ob&9R1!u`!A?8k3VD;}76RFmsyxk>)(x+IHpPE@*n`+waVF0+6w2v}@ z?_l{V7X;mTZ5bmV)b!{$v|Jf~B|evHMpa z!Vsq;wlqYlSlKeOorq8(TP}|z01cX$n4%c@bIDIJiGqP5B*;UA!bKw<>hxNnL+_>F zM9oPal4fKPB!eN#LW7|M#PXc+Y9%cnf)8WR2#<<|kpQEzfnH+>O))-P?dkW&YwQWGKZbXV{r2mVg6fYcX9bBdT~a!OG=R*I`s2?A^g2*NxvY$Xu!Xte96fi6O2aggZDFM zK2C*T(-0);R;HhRR5Xf50SetDDD$*k7l6bv zc&`RC1f&SRwq>Oy8Gi(jZlNe}CwM$Rq9US#g!N9Qr&Ch}g|MzqWj-IHrX^lKeOfBG z_Yes}!7cV{d5X&EnRB3dVyF}*NvChmCGbTdc)huq8MbU*K~N|(W`9fiBZE38CIZve z-H%|~zdg~4u|}_tQ7ZZHzXbz~_3Ppq4`wQhZyJwf7odof8z4;fTw0)5bmK`b$hZXYcEKnv{-^J*>QK6e%56=TfMDCa zeb30UxApuy+sJ9iJcMBhw=+K>!LAE&j2a?6@>`_2l`asKTNNFt^ zqm9R2zKCLg%_F;47A~~l3}z_r-8{{~s7p|KL(2*=ax8xR$2ld$4Q-Q?8D=kr*VT5AfsnZXtp4#ylX%UW84D%4Im%xV3_jZ(VH-Q_4tG9`sMNx?L%wULYabih$0aio?G`X!P6?a{iI21f&w~uaujQ zN*brdl~I9AD$C3F-DHYRx(z~V9R^8E(Zp@#vX@u&L6mX@a8>56RQ=9m*^jH*^ID6qz7%pIs>p{&= zJ-}BdgPEH3Rq8@1qB-l+e-)=xn_6dn%dvn6OvqP~XuKJ^*h^5zdgrpO%pNZ27rkDs z1*UJw-9;<6dd5B^;w2&4;aYa^=FJstGj?Te7-qO5Yq3d4HDJrh|Fse+AS?U=a8*bBA&68C+B#| z!Ls@F(#_t!uo<0DcrBz_4|YNyCca2Wak@-fk^RkmULJ50vQFdrfNcnA?g z4k(dv_v|T+7%oH=4Pg-ZEX#Zyx8oJ5?A4YfJDy9^i@E4OBU<>*6OfQQE=@V&0puvhTak9Lu0!$QA)HnM zXW0`@p9pK4^Z2BKx;v|>l_(mb{HNIWFF)f ziH7-yJe?!pq;JITxSW4PCIN?(*}348n0c?uF{}D{oBTBF8`Ny{&zK2gkcyt34VW`F z`hasjd_$eTOYP1u#Qr)lu;sZgU<0U{p$S`w*H*0buk2F8O9U>u-kiH7&Iaf4i`a%m z!jYgMA0DiA96kQ?crB7SC`u=9Kl3p=Icv<8zp{cH*#G4qR?#|yaIC8dPcd(4n2`IX zl|qqW|F^EIheR~y4g_(^*WfEq0-^h-;Q5lvQMZn)3kk~c>HH46vkdHN;HCZQbm%&F zag3eyMC$~unp5n$Az-^QIw`v3yY&TL!8HG_wTar;*OHXvI(ZBm3ztnZi3@20DM%mW zAHT#Ma=f=~iXh6i5F~S*MTV-S^M)$IwdK&G8&MgdF2AAa5c%a2AkPQCS zp5|XjWUqCHhEvn0k{1a#_kq~|-BL3txt{nIJR(}lR$>C|7$M!|AtN7%76Tnr#+B$j z^8Xl5q2f za?xWGk8;|)kL~zdoE2R`F+m-Lns~7^b2*u`iu&K6^RiX<;U6;3d8=SonZGDU+CCmaeJ*jXEFRL>dt z@RLgd#xnA0Y78S>%b+F8f&)!-7qz1M5`r)V--2#FKDH3Ky3Vi3kBF8%Jv}i}sT{~v zxy5v)@X^SY(F(T|Kny{(lhIik-F>OR89Fa+`r;}SgzBF4C_V~L-QRYI?67!d_v*T? z^&#o9b{;ayVV>G(7jQ~OT?2-tgH)oAb*PjI98JAYL2*^zwzV+?dqBux{D#_|@4Rx^ z9^+#hH=0$eey1?B0uVE9A>ddQG7|ZD;hC}UJL&Q4A{ZFNtrZr$PoiX4kkhf117 zZ&{c4_J+QDxo)gZEuJ(eRNrk0F*kL`kgd)#H;kH{j0PJUy9XvQ5fEkwhIfhGO$9Ny z4LhcfHRC^|0=PAGZ2LZrOUW{)8&h=P#A$H0F=Fud(mthx+{H}SA}!RIsJGcaACTZh z7^NM}&#~NjHI!T$782Vor$ z$cbcUW77UMWxl;wCP{Cb>;36mx>e}ZL1na_n{oyJbr5FqEL7)vx-ep@+ivW_{yfws z$(hs~8B)KdX5?YFt90rxX?|>KY`@f-Hmgc2?Maj3w#NeGBZdj8@ui1SiM*q_LfVzI zUSWZ-TrM*()Dbe(p@&hG(INR7l?6uyslr_L6~($8jEJ^>dy&j#7Y11}&M@Y8!%J#p zT;e;`!gRML)ff-L0%J2Ssl`}l4`rGKABu*9J!}c2H)h+KLHo)A$5Y#!v)`wo=x&v^ zu1awoGb&Ea2$86O-&sK`<=Y`)t}E+&dxnlp4O*DkRs0e1!it5ViRhAcnW$;LkHZef zAFU6|gHO}t9@C8K*%EhC*|lxwmVFAIIl#JknL#^t;_5ykhB}DThyrFJ1f04Spy@EHgI+Z;Eml@6 zusqTAMjK>DZkgpOSN>d1Ee*aTusGwO^}2EptIp-AIuShaJ~yLO#p=NUjyToNq8N=o zen{__3KuPXJmlDeVrv^~h~l1fhNpLIr|8%!1i?Kmh*_P;wHJPimyQfiSe8?EG;jR} zzK8KZ%I_~nwqQ2ks`B}ga(Q&oM zhn3M_VD$vXXi^sgxG;YMk0IqqL}WupJ2yD%l<|*jh|;0=6%@f#xn+XpSXnu9 zeYk@)t@Ut%(R}3zkk+G|v6dz2xJoCLP}4^|8O&}Su^Da1&H@hZpKgbus|%h9cDua? zlZpj>9k{75RoA@W2+z+I?f#o3>sz*@I651Lf}s*mSKJ<&c&`FT5pQH~PaENy)0Uz!vY|`R)b*gQ0x9WlFjY2Thine{?HnM{&7sp#H0ATFqhITTPshq+N zKOzLDA8>(Prfb>kiS=YhMNNV^;31?)8$WfCXI+|Zn`u&O-R1Lo>iQbDB%*cIwuJ`` zVY<56-7S{G1!Agp<2uyPr2=n(KUTfF>xgqoMdth>S|7U^yQ-#`@D#9=CbD@9GdKRL z7z*-?>7y6an4q2xW>o~mS#uPY5;^f&ud^+*`G%g6J+&nF#G_m~#UdZYRFPM$1rA)8 ztU4Zyk>yjd#9gYT45m9g^I4Ww8jPkYrg0Z)Y4ywP_43{o=3G@u6#~FHr&mdlS5+tO z8%R{BQvl=LVGSj;n>d1$Iw0k^+>l16>f!38n<>IeE#;f}Ho#$%SYT&k45QyILk+xk zy}-$g@hyWFCf>zyfmn*ishw_fy30nkTNU(qI5=i!R$WfrF})>)-X_VLsqF%#Zq4Zz zaQ^EK7nL6dkxPW~4xpVVmqkh&w&I0nT_=GPGd#O%jahHB3WS*!D0>qnE{KLsIXU>H zJ&;Zs1wgZ_P{t}*#_6Q#=(6LekJtdOIa>+5M`r<0Jr+F268Wu(fZd6un>I(Q=~@~w zmdao`*ge#+E^NGY)-<^Y9)g#PtN|<&S?7fb(>YK@A3KAZmhhn#jZKcl#tm+4xem7U z%>KnX9tiM7xx+OJ7Bi>Wtxa#59|1g#CU3^Z#{;~}Rpp6uqbfVtNVddUUut!@zb*0DLIUc5qhBzG zF@p!dE|}Lx21=xBQezD^bqu#hVoAdpgz8m5=>R9!zPL>|8D20sce~M$8j$*;35OFH zEU6iTrRGQ|rQ@?$Fm$NQRRDXyO^|3BRAXo>tHHFR$q&~#roLA@Lt}y=hV|52Ds#ca zGLS=c&L!TuWN+gdBDo z;s%3$%*VJgSx;uJx~f)IS!*R7agJx}*~fw9@-7{Fyn>@QKaXdS%4*PHvew5Ffocb< z3adP0eJO4J0k$2$R8#6;y1O`mmey^W%+j85EAbIs;N8c?0fbC;2W{kkniO{GfQt&` z6MCFGf+lYbA684X3+h};+d)0tibtyfwpdol5M_5Vj=j{#2-dRv^0Rm;>5?NgWxaBS zmh9yBFjf!WU{Js~n+{<`*~D3xV#smeb<;oqlal5hXy;n7d|XImfL_2!X7HA35K(|a z2RP$O{h*b@v)(Y>GOvOxf_d~zZIa;VbYDuw#n+J2L(sZdWT0K9Te(WXHL}NAR^`yL z6DxCRy@Aqa92dFc$ezhKGtJpMDq);KnQAMkuNU{oDv2z#Dq9MYJ)+hOd{;5Pz|0@Z zEc}*rH5A)L&5OquomOEUP8q9O5p%+6Bkc%4^upo`Caa;#C{>HmlQKhv(QeFo(dtXs z50Yk7u-h6Ic(Z#mgNrIHMoc17jB;$+V2+iySP!sQ~IqCUdnJ3UIo-7*0Nyc zHH2!U`RHO^&W?VMuLF-6NMFrc71&V;s8=bi8*kGosbPnPu^XpR?~&!O^-}7XBqJk? zM9Q9WIHqKh%et491!1o-8))9!jBr7KyM)_L2N^juy+{qu3bSx+flD8tY0PeQ)>q)1 z8(9`rhE6Bfza1EL0k7N$~W3!>URtora?oZVf7Lo}(d-=NsJ9KD0Xq{^LnlB;`5a}<`| zb(BTM-Jmym&(rLT!2SUTMI&&hTtDGM1Md|hVI;^Cna5bAt|s28Ey13F`G=uaN@=&K zFLvjKDyR|~J^qvyGYL1q0rr(7vLXp*)q&O1+mmPh>wP^O$$c_H6G=S~M75c-QYzIHVr@ z_T=~$B<#)=LljLbE-;)LDmd}^TNK&aLd%}t7tY{N;6^HZZdJEBjJO-|{!hS>)(+{V zYnz6fC)u0AhcACh*v{75LQLN~is%8y2_V}9&DWh~viXrlPNzduVQ3^VaIw}iWifqa z^>}D#Fk(~h3YQZTkKe2MedyEVNirUL_3Y9wKsaD{w1qV51z=7vzVxfkKEmD`aw+pA z^zUvx|NW>ltcU&*Ie3R;M5}5-vMxvnBdbQBWl3WI)wi`9Tkdo9t z=I=c-2+ZYWypXtlyau!3DJDEAV+I;+biJWMe-MboXu{yW7KHi_5{ye7V~~<8`f;OO zeFheVHK_f*{XHaiMD+6*nCjbvap_7B^IgBzSqN)jU&i5Rr21l5@i%$0sOCjo4RDk&@6ynS zwRT9D&P;CVOLc$avRZm$YK8iO-@AOX*1Y`8^LX|fED2P;%^8}ind*tde9>_>ZT&Ou zW6k8@AS8)b)*FbZ^vvK`Wc$+-Mwgx|6x_c+jr!&2n{A#w-7YY)_{d{B8ZWi{c=fF$ zj9p&|^Hgj45ndV!ZO6p=_eE8Kht?IQ~5nYIQLe&l1Bj( z{UOQheGo38P#lkOe}|cUlY8UJ;_^!t=~ z9*OW6jJ(FQ!mCN#smXJfo_Su+~@cuin9Bhg_Ptec!ygw6KC z)GK)b?0iT3plnz#dE$NAS85$}Co7*adWVRBU-pPb{MdIM9ds3L%cc)ZU0fJVp5e@* zxq0*Vm6nY5``)YaTF3GIJkjqz$xeBEfs_BefHARMh(W|Y0&;09?M#XKurc$ZRZust?lWXlREI+ELTcM~^!BATGwivi>0c6K|@K5GZz2 zUWQibkv;;5QBT5u(NY(d0b#hb#GgSRk-^i{<#aIIdQW=q@9o%si3qg z`0C&3Ee;D^cfBgMT++v{f|LEVNe7ik@alKpQcr1^c@AiJD;HXdKQ&Q<*t2_l?60|Z zCvdHqL4XHibfC)x{`Ma$RcGP)W#OfdC9pBdi=ikck?tSlqX<$<8Rk9&>!W=&6L^+u zE63$=X`pnwie$vpjz$Esd4!P-Y7;>(R!**d%QJOn$pGADVrlYqW}5s=&T-EXg9Gnr zVkViAi?dW7?bE*m#QIWMUg#g>yE_4KgH)Kni9V;poDm+2`NtY#va{lOq;+4&Yz95q zJO*NRlQd0vWfzVTyRbuEKpWVs#;9+^|L~1+IXl<+y)|SZ0`5OcKF(x>Rt)oGe~`&z zo_`=c-3WP4W?m-1guk|L=3nT@VWp=w_jy7D^9ET1?}RxjD7CJJ&Jy&Kk9bLh_GLkP zU0EU^S2RCu&D}e(T#7=irBH$7)d; zojkZQmy>71=*(|U^9$)6nd2=%Pvd*}a{u?d8_WxF^bGB$J5N4!TDNHu$GJxi)lBgg zjv4T*>X}%_ZHpd+zt@hUWEiG)=f2&wzB+POzFb4tDtqYwI;=HuCE8F%PtNAU{a=~Z zs^s=yh6*h!VB=gM^;P_OXrfvQO()BW6>&W7nBZHvbj1yu(j~e=4e?n+;SvHyNZ}_vF*F%QDmO z#oWW-IJ_{zz_N021&<9b4#qR#f)0PH&S4Bt?V-)Uh1fP4lsO%8sx}?&tlOGr?so7e zSt1H?`>_t>Yla}DA?Uhx0~G|{%b1ZLY7fgr&rmpXwruveWk{$C4Fz`@1fCroviP>T zI)`+_U7jotE@WTbPh=a|OD%Wt+n9vokJBTQz)99&SG zx#5R2u0f;yKkY#jR}*H$Mbt^`h)o*hK|YSbNvit_n}qQ`Z!Ln5+zfuan(m37`uG@I zJRi(#Do2g9VQi9Lw@9MXz+j`ot~f1oU+7HWGxB8=ONNr%hLbZG!7j~3F!`P`BTHpv zXJqEK?x*I;Yw$(Kn#Ye^(B0PS;%kL@7YsYjAz-KBbvegxq~J-SIU?C$!k8{vpz|#Y z9?n3Ezq_y^+DrYtGZvUazQ4Ud6WxnuvS@=GU6jrD=Copkn{#zOFtI_|J96P@m^!&r3uuF>3{H-Zp zztje26nC;rbm0hcd*d>ma7+n$8=*<-h$yvMLUx``p2Im#kE>55;#(Xh4}*8_93t+QZETxL z#@3<${ZMv?;V-mj@LN-IOPSoCO>`z>3(9?u=O&z_IIVlCG77BP<%j$Zb4TaXp_q%E zxm;IH9jMDYa@cN4^&tivBZ!zs?P9S)#UESD6j6Q45D!hdi*3PdB_hhtFbpv+Q#oLa^hy@3bDX{_g;%?U&>J1{ zFay{Msn`%P$`spA+PX~GRcjF$13+qb+q2bJPOLg%sjz+~k;%N*#lY2*VlSsR#v3zI z@(uc$tsQ1JeGKHu6rN<2dxAzm@nKxowRl)0B;6_8uXas?c`#we&f|=EOqL;l-V;B_ zdL6~}+`9#ojHjVmyUW94heToL_G}}-V=80z2gOkVV(${fe9l`98&9@iIvn3$#;xlO zsJBea0Kj8MbN6gaC#`d;5(B_8r-`umhPMltd%h)S4qdrhivcnj#T=L*E*P!FB2hS; z?xMXUXRM?~ZrK%({4>~1WsefE8*rmRM?u#FOpHQsl=_OzXrZZrXxB<` zcn-KY_V6Giyv{S%YK7?*FpY3u(BumC1q|zOwsh!@@+|J?yC5|ds_R=Ln40-B3}9p1 zi@2U|G4G_3M|*w9*do~i{gyP0*jy2D>_>Pi~%q0z-GO?uG-QBQq#Ki0e@ z)7UMJk@imNgW~YP<#LsoI}|Fx42j>$o@>$^MG|Ld={vxJ$YbgkZPR3<*8J_?Js1s^ z0e4%|m1qF4y{s-Yl&>lc5`+41lWoQJ5P9R2Glj0caF&OUjuK+^u?pNFMjz969=21G z?kh;Ke_5_&reZL zw7LMmpAp{h#s6D;;oqKZ;O2EfMbIc}Z-07{xHFINrTCJz`=wA|Elf;bJDfJcSpH(i>fIdcDl$j4A=3k~M=tXcqEhkm00=jD&f&cSsqU@=wLbE)(m ziM*}8MUBZ9%f5hN8PF4|>vx zt*RNx=ne2Bk&Ts6KIPhsg_-_9VW=`ENjX)9Es0V*C{5o(PK{0NlNdDu^&|D&L?|Oj ziA*Y|!G!TxzIxY^n!=!mruFJ<8lc)?%?Ycrl&}S!osCpHq!DbO@#E+g5KuKCr?PR* zAnZGvhNxlpZQ98+Mg1LlHSs6~zui`>B+|hlsuilmV>Ctv1DiI>iIovO#*Hq|9NVt# za^&RRO+H4cmMKs-(7dFaku|@LQYV)aFxnyBe2+q_N>jBGkEYzy@mh(|$!bGG z2$>r@CL-IywTYr9Hf4%^M!GlWNaqcdr?qNJ!d+9aNuQ-ljBpf|y3nY?etFDhU<8t0 zWHv1w!g-}xE&Y&}rjjS5&o%X?d|`Z>Q@~(P-Ww4J_eR@e+)Y885?Flgnn)5^V4>;_ zquDr?F(kWIj1>~e0?&}D6$UkMrGlL9^iKUuJ2Ryu%Tb1M^QNXTsT#wNKOV&^1ulhe zQBIkHO|0zZQi|7qtbF}3ZOcs;`Uc`0J zZL4J?tC`Q1vK=rpuiz`0axsHlImc40t0>VqT=VH>4TQO!N!a+n)p_w^1xPVL1wyf? zf)s`p2Zu>}1r|!lerZFg_8s{{mb5C}M@hM`32kSF*H{mX;86LrX7wu4hZ7oBh zFb9`m2-;f4T(|Kjw-a&8@iNNH7$I#Z9*s~4L*ucV9n|K|VTq;H)9Ny(5Lq`kaNm!bliXKzR;dxHrDKiY&Wl<}H?b#>? z#rSBQ3x5Tnd~ZjKNeY$R7SsZGZ+-zK=V{z*H0Y{rXt*O_4x-cUn{1qOowvwY-Wb%^ z+4Pw2h%E^Pb%-D4P8~U_+JWVgkShABTIe0rsd47YRu|sI7f(j5O(I+mFo@DGok1-} zP@7Syfo8&{Jg`*QVg7cF502E$IL3t~>Zv_ej>o5)8_zWP888>ETcS+XqzBQ)woQw+ zo-NEZ4Z4zF%W@s1VsVe&YtwHt^SO{!i#Wuia=h&;qp@T&RrJ1MS14yg^(6{tp505cd-y zsdy?owQEQzOL~k_8hCb)g?sHR0h8r|UE+L*3x^AKuWIkj0ENSLaa@_4>+#w$`2Q3I z3^jNvqI}OL0epN5Yae|8eScOTorVnvb>J09m@8K+@GDjnGP`?Xqc9(V<{wuW>&7*} z9jqGpUwaD{WRV11mW>Lsp?#L2f8`fe-B|MnIW6(e7pz9*-BjG}X-UA=we0}a0@S~0 zZKv}pZr}yFp{x#6D`{DFX}E$dMq_K_7lIrw_ikrFFyF3&X>x%OC=7e^tr>)(!_q)= zxJt{@aZ2ecaoVUzjoXaYP8u8qHPA&6m=KuMvo0tv+*=JSX9(c6 z$uGQv%=3coLL_V*Ciwyf4M2XdoQ&72v3 zi6ac$vTa6>j|ZlvKgR2>z4AdHqr)FVL-jX{WLfCdWXBAjL4zHQ%iV>iEQ1AmZF=rC z^f-c(*HpG7o44sq%;aCNV)PNH+?m}Sb4y?S#k%gbCc;fHok+bhI&aPHSc1MLvb9%L zcwu(2_iW>iO=NJabZbA1#VODF)WW~+#>_C9$Cw_CPnGaZN%|cp^!#7U=Ro2ABesYW88ezGklHPkwVH+bMGcqzkt(KhgAx26 zy^)@f2STWdb75XSX5p`6!#2e-$0?nqdG%wArt5 zxTMw(U~3Kqhxx~`$-OVE8c~kfp3<3!PjAAp)!EsfWWK|gE*`(Yj_P&7U5hk&R4HCW zZF}VXrqJjmAVhG!v_DNoCr^oAZTL5uq$V@$e>?OOt!yUy#r0d}Fd54Kj5-@ii(XZ6 z2-%*C<8(hWd%~!f>@)rgqC3QijkC8lod>2-45_0**e`C>y8EwpAL7-v}_g@+r7J|=e!xeIFW--MJVo9 zJ5#)8u(yKyluz8phCWnfp5vt`5)UZj3z zFwy-Ccb^!v&pFbseWkwz&NO}tpWbG+^y5TMinklI_ddV7%!b{gzk^MB(wcpqJ1-p{ zQv()4v#w;+aoWxETJEs^IsYbu_@4C;8L-R4GwH!7l7oEf4V!QtTJqMClSVn2ma&ts zkh9dgHXQefe3XZWQ2%$F#+`iq`+j{m8}ParvVBG%@N8~0)hBuQI!jZh7AKTfXMJSb zob4T_RpDf4G7!PRs~=%V%Zy0Lfc6uEe%Md&AQd;iG~F{@Gz3#4=$@OsGPZ*~BnOHX zxP8&UTKzVP_8neWx?;kc=gidZUVV2(%c9ys2Cl4?$LEuI5rlh-v2SpL_@DGhQ<8n& zo~MChA&gH!A!RB|jy+=5nI$QH%SOyDu4<+8yHYT-9L=%mPpE*^IAQd(k*w#cIV5>% zG(G$_X8@dY_UK;5uMFuNdD-|rISRZy8klG?Kp_6cXwc#qfd54pT;(pGjzGT8J@fq) z!G8}vF?6G20$x6RHjDZR+|juJ*V$TnY&5K*qOAI-Yw)|-*Qq_=G99`t^K_~B@^nTF zj7?g9wK-a;Zb!WK(0&CZ=q{{7DJ8<=^Q3FgXvCk?c8&9G&2%tQmi09lZs zvlgkR)o~3~&h71BvpKZoK9Yy^OYNk$%bTCc<>G95=;`MtzF;rWXmkJ!I?!mV7R}|+ zc5sO1pE6UX#v$9lvDa70{!+WudQ}6z{C{I=WC}DGjo@< zvayjuPHivdi}&F!TWmXHA{SytICG3hRAQTW3m>KoM)zyAF^&o-nzf!rxp-kbu^F5$ z%}z4?L*2_d-amB=fRdZ+urV=#<#hN}=4v=4S5;5kM~i5{Cb70w z6+5+xYiO@g7*emh$BncA=49Uw{x$DlOuIMuUo3~XA}xl(gdfNb;cO0zAbsxw@WC|q$wq~( zGC}H!F-ZO%FjvZ4c58D0+-(!DJxd63;$!ge>c9;O;kRnmvj~}cr9kw16?m}_ymAbE z9Fvo>4mc<2nw_WZ6j9$Q9$kWF;G=3Mc97b?3?AM|#x(`;lSd%qPM+UjeS2${rI10d zYda=`ik@!=iczge495ByrenrA^uQj2lA6e^OGY>Ha02`zR!k?dFW*W(Z+}c{tov;a z7x;mu)6*CLEnw)~2FPqJ$?!ushR>_O&(qGqQw6pW|uvJ_OQbqd)R*u4BCO3 zYCNssu(6Vlmn?k45+eNu@~ZLG*n|uvJ_OQbqd)Q$QJ?yZD*!KVc2p|UlZ4>~q z001;108mf>T;C#+FxVY( z29!E-w}|Wae+%|t>c`Dp)W3b$Z7$_0G?_Eir_`NFJp)y8uch?KX?&5RBh2vKr_jwt zj;u57>?|r0taVfD{Lu6AP2Oj!yP330XRk|B@5FhzO-rgD598j}Qf550Yo@^x);#HR zn{aFfRuj9PCoG$oEI!#tQ*u1-Ae_@_&QLbBw#i>-{Y~8udft_3$i4YDX?9AOes*vK zGKwkN;vJc0_|iPRySe_pIFn1>0shLdIeTdyBDap2PsiVqqwnf_RQ5TK*~EV*u?|A! z#YZQPYLT7upG++g}O$(dMQ+Ht2OgD)Tu6F9 z9hHwa-oN*fNlm$=GoqKhD(=@c8aXc~Yp?dWa_;9zvnG~NMT^o#cShM=rNv^R-bTXf zO^e5lx&}X=v@iJQ%=KfiiE6B?6>IeV^Cx`$!|5DV=#*url~la_o&R4H0RNWTd9yVJP3D8S zq7ZDbx72L?ht>D-ckQs&yM0*hXF62iZaG&TesjdZ}NDzQ6_21(Zy90sVf|>K}i2>d$qIIBwKuHUkkV~%kjQUf z&bj&-D*k1&x%WcK5Mvqk&G~&gi{Xa%0u7DW=goir9Cl}Gw}fol8gcov6{eFv=j=eY z{Bq@yRVePq>@1pJ$p<2uHkl8!!%!`_O8 zbqy5w$K6d>cGpy|iih!6e@8)Kye(3-%GK_F$x_P8m_9XCHWhHo000000000000000 l0000000000000000000000000000000000000000Y=4Vg%R>MF literal 0 HcmV?d00001 diff --git a/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/Breakdowns.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/Breakdowns.cs new file mode 100644 index 0000000..c97fc05 --- /dev/null +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/Breakdowns.cs @@ -0,0 +1,288 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using System.Xml.Linq; + +namespace EM_Statistics.InDepthAnalysis +{ + internal class Breakdowns + { + internal class BreakDownItem + { + internal string title; + internal string filter; + internal double value = double.NaN; + } + + internal const string VALUE_PLACEHOLDER = "[value~Numeric]"; + internal const string rowName_breakDown = "BreakDownRow"; + + internal const string STD_DISPY_DECILES = "Disposable_Income_Deciles"; + internal static List STD_DISPY_DECILES_DEFINITIONS = new List() + { + new BreakDownItem() { title = "Decile 1", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 1", value = 1 }, + new BreakDownItem() { title = "Decile 2", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 2", value = 2 }, + new BreakDownItem() { title = "Decile 3", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 3", value = 3 }, + new BreakDownItem() { title = "Decile 4", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 4", value = 4 }, + new BreakDownItem() { title = "Decile 5", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 5", value = 5 }, + new BreakDownItem() { title = "Decile 6", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 6", value = 6 }, + new BreakDownItem() { title = "Decile 7", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 7", value = 7 }, + new BreakDownItem() { title = "Decile 8", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 8", value = 8 }, + new BreakDownItem() { title = "Decile 9", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 9", value = 9 }, + new BreakDownItem() { title = "Decile 10", filter = $"{Settings.DATA_VAR("deciles_eqDispy")} == 10", value = 10 } + }; + + internal const string STD_HH_CAT = "Standard_HH_Categories"; + internal static List STD_HH_CAT_DEFINITIONS = new List() + { + new BreakDownItem() { title = "One adult < 65, no children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 1 && {Settings.DATA_VAR("NumberOfElderly")} == 0", value = 0}, + new BreakDownItem() { title = " - Female adult", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 1 && {Settings.DATA_VAR("NumberOfAdultFemales")} == 1 && {Settings.DATA_VAR("NumberOfElderly")} == 0" }, + new BreakDownItem() { title = " - Male adult", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 1 && {Settings.DATA_VAR("NumberOfAdultMales")} == 1 && {Settings.DATA_VAR("NumberOfElderly")} == 0" }, + new BreakDownItem() { title = "One adult >= 65, no children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 0 && {Settings.DATA_VAR("NumberOfElderly")} == 1", value = 1 }, + new BreakDownItem() { title = " - Female adult", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 0 && {Settings.DATA_VAR("NumberOfElderlyFemales")} == 1 && {Settings.DATA_VAR("NumberOfElderly")} == 1" }, + new BreakDownItem() { title = " - Male adult", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 0 && {Settings.DATA_VAR("NumberOfElderlyMales")} == 1 && {Settings.DATA_VAR("NumberOfElderly")} == 1" }, + new BreakDownItem() { title = "One adult with children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} > 0 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 1", value = 2 }, + new BreakDownItem() { title = " - Female adult", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} > 0 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 1 && {Settings.DATA_VAR("NumberOfAdultFemales")} + {Settings.DATA_VAR("NumberOfElderlyFemales")} == 1" }, + new BreakDownItem() { title = " - Male adult", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} > 0 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 1 && {Settings.DATA_VAR("NumberOfAdultMales")} + {Settings.DATA_VAR("NumberOfElderlyMales")} == 1" }, + new BreakDownItem() { title = "Two adults < 65, no children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} == 2 && {Settings.DATA_VAR("NumberOfElderly")} == 0", value = 3 }, + new BreakDownItem() { title = "Two adults, at least one >= 65, no children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 2 && {Settings.DATA_VAR("NumberOfElderly")} > 0", value = 4 }, + new BreakDownItem() { title = "Two adults with one child", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 1 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 2", value = 5 }, + new BreakDownItem() { title = "Two adults with two children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 2 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 2", value = 6 }, + new BreakDownItem() { title = "Two adults with three or more children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} >= 3 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} == 2", value = 7 }, + new BreakDownItem() { title = "Three or more adults, no children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} == 0 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} >= 3", value = 8 }, + new BreakDownItem() { title = "Three or more adults with children", + filter = $"{Settings.DATA_VAR("NumberOfChildren")} > 0 && {Settings.DATA_VAR("NumberOfAdults")} + {Settings.DATA_VAR("NumberOfElderly")} >= 3", value = 9 } + }; + + internal const string STD_LABOUR_CAT = "Standard_Labour_Categories"; + internal static List STD_LABOUR_CAT_DEFINITIONS = new List() + { + new BreakDownItem() { title = "Pre-school", filter = $"{Settings.DATA_VAR("FilterStatusPreschool")} > 0", value = 0 }, + new BreakDownItem() { title = "Farmer", filter = $"{Settings.DATA_VAR("FilterStatusFarmer")} > 0", value = 1 }, + new BreakDownItem() { title = "Employer or self-employed", filter = $"{Settings.DATA_VAR("FilterStatusSelfEmployed")} > 0", value = 2 }, + new BreakDownItem() { title = "Employee", filter = $"{Settings.DATA_VAR("FilterStatusEmployee")} > 0", value = 3 }, + new BreakDownItem() { title = "Pensioner", filter = $"{Settings.DATA_VAR("FilterStatusPensioner")} > 0", value = 4 }, + new BreakDownItem() { title = "Unemployed", filter = $"{Settings.DATA_VAR("FilterStatusUnemployed")} > 0", value = 5 }, + new BreakDownItem() { title = "Student", filter = $"{Settings.DATA_VAR("FilterStatusStudent")} > 0", value = 6 }, + new BreakDownItem() { title = "Inactive", filter = $"{Settings.DATA_VAR("FilterStatusInactive")} > 0", value = 7 }, + new BreakDownItem() { title = "Sick or Disabled", filter = $"{Settings.DATA_VAR("FilterStatusDisabled")} > 0", value = 8 }, + new BreakDownItem() { title = "Other", filter = $"{Settings.DATA_VAR("FilterStatusOther")} > 0", value = 9 } + }; + + internal const string STD_AGE_CAT = "Standard_Age_Categories"; + internal static List STD_AGE_CAT_DEFINITIONS = new List() + { + new BreakDownItem() { title = "0 - 14", filter = $"{Settings.DATA_VAR("Filter0_14")} > 0", value = 0 }, + new BreakDownItem() { title = "15 - 24", filter = $"{Settings.DATA_VAR("Filter15_24")} > 0", value = 1 }, + new BreakDownItem() { title = "25 - 49", filter = $"{Settings.DATA_VAR("Filter25_49")} > 0", value = 2 }, + new BreakDownItem() { title = "50 - 64", filter = $"{Settings.DATA_VAR("Filter50_64")} > 0", value = 3 }, + new BreakDownItem() { title = "65 - 79", filter = $"{Settings.DATA_VAR("Filter65_79")} > 0", value = 4 }, + new BreakDownItem() { title = "80+", filter = $"{Settings.DATA_VAR("Filter80plus")} > 0", value = 5 } + }; + + internal const string STD_GENDER_CAT = "Standard_Gender_Categories"; + internal static List STD_GENDER_CAT_DEFINITIONS = new List() + { + new BreakDownItem() { title = "Female", filter = $"{Settings.DATA_VAR("FilterFemale")} > 0", value = 0 }, + new BreakDownItem() { title = "Male", filter = $"{Settings.DATA_VAR("FilterMale")} > 0", value = 1 } + }; + + internal static readonly Dictionary STD_CATS = new Dictionary() { + // this is only in distributional + { STD_DISPY_DECILES, new TypeBreakDown(STD_DISPY_DECILES, "ils_dispy" , STD_DISPY_DECILES_DEFINITIONS, true, "Deciles", true, 10) }, + // these are for both distributional and inequality & poverty + { STD_HH_CAT, new TypeBreakDown(STD_HH_CAT, "hh_type", STD_HH_CAT_DEFINITIONS, false, "HH Type") }, + { STD_LABOUR_CAT, new TypeBreakDown(STD_LABOUR_CAT, "les", STD_LABOUR_CAT_DEFINITIONS, true, "Labour Status") }, + { STD_GENDER_CAT, new TypeBreakDown(STD_GENDER_CAT, "dgn", STD_GENDER_CAT_DEFINITIONS, true, "Gender") }, + { STD_AGE_CAT, new TypeBreakDown(STD_AGE_CAT, "age_group", STD_AGE_CAT_DEFINITIONS, false, "Age group") } + }; + + internal class TypeBreakDown + { + private const string XMLTAG_VALUE_DESCRIPTION = "ValueDescription"; // this one is only for backwards compatibility + internal const string XMLTAG_ROW_TITLE = "RowTitle"; + internal const string XMLTAG_QUANTILES = "Quantiles"; + private const string XMLTAG_NAME = "Name"; + private const string XMLTAG_VARIABLE = "Variable"; + internal const string XMLTAG_EQUIVALISED = "Equivalised"; + private const string XMLTAG_ISVALUED = "IsValued"; + private const string XMLTAG_ITEM = "Item"; + private const string XMLTAG_VALUE = "Value"; + private const string XMLTAG_TEXT = "Text"; + private const string XMLTAG_FILTER = "Filter"; + internal List items = new List(); + internal bool isValued = true; + internal string name = string.Empty; + internal string variable = string.Empty; + internal string rowTitle = string.Empty; + internal int quantiles = -1; + internal bool equivalised = true; + + internal TypeBreakDown(string _name = "", string _variable = "", List _items = null, bool _isValued = true, string _title = "", bool _equivalised = false, int _quantiles = -1) + { + name = _name; + if (_items == null && Breakdowns.STD_CATS.ContainsKey(_name)) + { + variable = Breakdowns.STD_CATS[_name].variable; + isValued = Breakdowns.STD_CATS[_name].isValued; + items = Breakdowns.STD_CATS[_name].items; + quantiles = Breakdowns.STD_CATS[_name].quantiles; + equivalised = Breakdowns.STD_CATS[_name].equivalised; + rowTitle = Breakdowns.STD_CATS[_name].rowTitle; + } + else + { + variable = string.IsNullOrEmpty(_variable) ? _name : _variable; + isValued = _isValued; + items = _items ?? new List(); + rowTitle = _title; + equivalised = _equivalised; + quantiles = _quantiles; + } + } + + internal static TypeBreakDown FromXml(XElement xElement, out string warnings) + { + warnings = string.Empty; TypeBreakDown breakDown = new TypeBreakDown(); + foreach (XElement xe in xElement.Elements()) + { + if (xe.Value == null) continue; + switch (Settings.GetXEleName(xe)) + { + case XMLTAG_ROW_TITLE: breakDown.rowTitle = xe.Value; break; + case XMLTAG_NAME: breakDown.name = xe.Value; break; + case XMLTAG_VARIABLE: breakDown.variable = xe.Value; break; + case XMLTAG_QUANTILES: if (int.TryParse(xe.Value, out int q)) breakDown.quantiles = q; break; + case XMLTAG_EQUIVALISED: if (bool.TryParse(xe.Value, out bool e)) breakDown.equivalised = e; break; + case XMLTAG_ISVALUED: if (bool.TryParse(xe.Value, out bool isV)) breakDown.isValued = isV; break; + case XMLTAG_VALUE_DESCRIPTION + "s": // backwards compatibility + case XMLTAG_ITEM + "s": + foreach (XElement xeVd in xe.Elements()) + { + if (xeVd.Value == null) continue; + double _value = double.NaN; string _title = string.Empty; string _filter = string.Empty; + foreach (XElement xeValDesc in xeVd.Elements()) + { + switch (Settings.GetXEleName(xeValDesc)) + { + case XMLTAG_VALUE: if (double.TryParse(xeValDesc.Value, out double d)) _value = d; break; + case XMLTAG_TEXT: _title = xeValDesc.Value; break; + case XMLTAG_FILTER: _filter = xeValDesc.Value; break; + default: warnings += $"Unknown setting {Settings.GetXEleName(xeValDesc)} is ignored." + Environment.NewLine; break; + } + } + breakDown.items.Add(new BreakDownItem() { title = _title, value = _value, filter = _filter }); + } + break; + default: warnings += $"Unknown setting {Settings.GetXEleName(xe)} is ignored." + Environment.NewLine; break; + } + } + return breakDown; + } + + internal void ToXml(XmlWriter xmlWriter, string xmlTag) + { + xmlWriter.WriteStartElement(xmlTag); + Settings.WriteElement(xmlWriter, XMLTAG_ROW_TITLE, rowTitle); + Settings.WriteElement(xmlWriter, XMLTAG_NAME, name); + Settings.WriteElement(xmlWriter, XMLTAG_VARIABLE, variable); + Settings.WriteElement(xmlWriter, XMLTAG_EQUIVALISED, equivalised.ToString()); + Settings.WriteElement(xmlWriter, XMLTAG_QUANTILES, quantiles.ToString()); + Settings.WriteElement(xmlWriter, XMLTAG_ISVALUED, isValued.ToString()); + xmlWriter.WriteStartElement(XMLTAG_ITEM + "s"); + foreach (BreakDownItem bi in items) + { + xmlWriter.WriteStartElement(XMLTAG_ITEM); + Settings.WriteElement(xmlWriter, XMLTAG_VALUE, bi.value.ToString()); + Settings.WriteElement(xmlWriter, XMLTAG_TEXT, bi.title); + Settings.WriteElement(xmlWriter, XMLTAG_FILTER, bi.filter); + xmlWriter.WriteEndElement(); + } + xmlWriter.WriteEndElement(); + xmlWriter.WriteEndElement(); + } + + internal List> GetValueListFromDefinitions() + { + return items.Select(x => new Tuple(x.value, x.title)).ToList(); + } + + internal string GetValueStringFromDefinitions() + { + return string.Join(";", items.Select(x => (isValued ? x.value.ToString() + "=" : "") + x.title)); + } + + internal Dictionary GetValueDictionaryFromDefinitions() + { + Dictionary dic = null; + if (isValued) + { + dic = new Dictionary(); + items.ForEach(x => { if (!dic.ContainsKey(x.value)) dic.Add(x.value, x.title); }); + } + return dic; + } + + internal string GetByText(bool forButton = false) + { + if (forButton) + { + string byTextShort = rowTitle.Replace(VALUE_PLACEHOLDER, string.Empty).Trim(); + if (!string.IsNullOrEmpty(byTextShort)) return $"by {byTextShort}"; + } + string byTxt = quantiles <= 0 ? "values" : (quantiles == 10 ? "deciles" : (quantiles == 5 ? "quintiles" : $"{quantiles} quantiles")); + return $"by {byTxt} of {(equivalised? "equivalised ": "")}{variable}"; + } + + internal static void CreateStdHHCatVar(TemplateApi templateApi, string pageName) + { + List vars = new List(); + foreach (var hhCatDefs in STD_HH_CAT_DEFINITIONS) + { + string var = $"{STD_HH_CAT}{hhCatDefs.value}"; string actionId = Settings.MakeId(); + if (!templateApi.ModifyPageActions(new Template.Action() + { + name = actionId, + calculationType = HardDefinitions.CalculationType.CreateFlag, + outputVar = var + }, + pageName)) continue; + if (templateApi.ModifyFilter_PageAction(new Template.Filter() { formulaString = hhCatDefs.filter }, + pageName, actionId)) vars.Add($"{Settings.DATA_VAR(var)} * {hhCatDefs.value}"); + } + CreateVar(string.Join("+", vars)); + + void CreateVar(string formula) + { + templateApi.ModifyPageActions(new Template.Action() + { + calculationType = HardDefinitions.CalculationType.CreateArithmetic, + formulaString = formula, + outputVar = STD_HH_CAT + }, pageName); + } + } + + + + + } + } +} + diff --git a/EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs index 3cc166c..b33be93 100644 --- a/EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.Designer.cs @@ -1,4 +1,4 @@ -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { partial class CategoryDescriptionsForm { diff --git a/EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs similarity index 74% rename from EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs index c50b03d..960dcbf 100644 --- a/EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.cs @@ -2,10 +2,27 @@ using System.Collections.Generic; using System.Windows.Forms; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal partial class CategoryDescriptionsForm : Form { + internal CategoryDescriptionsForm(List> categoryDescriptions, bool readOnly = false, bool showValues = true) + { + InitializeComponent(); + InDepthAnalysis.SetShowHelp(this, helpProvider); + if (readOnly) + { + btnAdd.Visible = false; + btnDel.Visible = false; + btnOK.Visible = false; + grid.ReadOnly = true; + colValue.Visible = showValues; + } + + if (categoryDescriptions != null) + foreach (Tuple cd in categoryDescriptions) grid.Rows.Add(cd.Item1, cd.Item2); + } + internal CategoryDescriptionsForm(Dictionary categoryDescriptions) { InitializeComponent(); @@ -15,7 +32,7 @@ internal CategoryDescriptionsForm(Dictionary categoryDescription foreach (var cd in categoryDescriptions) grid.Rows.Add(cd.Key, cd.Value); } - internal Dictionary GetDescriptions() + internal Dictionary GetDescriptionsDictionary() { Dictionary descriptions = new Dictionary(); foreach (DataGridViewRow row in grid.Rows) @@ -23,6 +40,14 @@ internal Dictionary GetDescriptions() return descriptions; } + internal List> GetDescriptionsList() + { + List> descriptions = new List>(); + foreach (DataGridViewRow row in grid.Rows) + if (CheckRow(row, out double v, out string d, out _)) descriptions.Add(new Tuple(v, d)); + return descriptions; + } + internal static Dictionary StringToDic(string descriptions) { Dictionary dic = new Dictionary(); diff --git a/EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.resx b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.resx similarity index 100% rename from EM_Plugins/InDepthAnalysis/Helpers/CategoryDescriptionsForm.resx rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/CategoryDescriptionsForm.resx diff --git a/EM_Plugins/InDepthAnalysis/Helpers/EMVarInfo.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/EMVarInfo.cs similarity index 98% rename from EM_Plugins/InDepthAnalysis/Helpers/EMVarInfo.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/EMVarInfo.cs index 8c08730..fb51654 100644 --- a/EM_Plugins/InDepthAnalysis/Helpers/EMVarInfo.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/EMVarInfo.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Windows.Forms; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { // currently probably we could do without this class and just have a list of non-monetary variables (updated where necessary) // but this allows for easily upgrade to more extended variables info if necessary in the future (e.g. country specific descriptions, HH-level info, ...) diff --git a/EM_Plugins/InDepthAnalysis/Helpers/FormulaEditor.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/FormulaEditor.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/Helpers/FormulaEditor.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/FormulaEditor.cs index 89929ce..4bcf2fd 100644 --- a/EM_Plugins/InDepthAnalysis/Helpers/FormulaEditor.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/FormulaEditor.cs @@ -6,7 +6,7 @@ using System.Linq; using System.Windows.Forms; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal class FormulaEditor { diff --git a/EM_Plugins/InDepthAnalysis/Helpers/MergedDatasetWriter.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/MergedDatasetWriter.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/Helpers/MergedDatasetWriter.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/MergedDatasetWriter.cs index 07f22bf..f78e5ba 100644 --- a/EM_Plugins/InDepthAnalysis/Helpers/MergedDatasetWriter.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Helpers/MergedDatasetWriter.cs @@ -7,7 +7,7 @@ using System.Text; using System.Windows.Forms; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal class MergedDatasetHandler { diff --git a/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.cs new file mode 100644 index 0000000..b4bb86c --- /dev/null +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.cs @@ -0,0 +1,20 @@ +using EM_Common; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Windows.Forms; + +namespace EM_Statistics.InDepthAnalysis +{ + public class InDepthAnalysis + { + internal static string HelpPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..\\Help", "In-depthAnalysisHelp.chm"); + + internal static void SetShowHelp(Form dialog, HelpProvider helpProvider) + { + helpProvider.HelpNamespace = HelpPath; + helpProvider.SetShowHelp(dialog, true); + } + } +} diff --git a/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.ico b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysis.ico new file mode 100644 index 0000000000000000000000000000000000000000..8831918ab5161d6cba90d5934344fa16fdb9b22d GIT binary patch literal 24078 zcmeI4dvF!i9mh8@0im&iZJmq`CKBXT>{vQO9Y%QtlHA;z$4$Z`fsllo0D?xa&>AO7 z5#`kmN?R1#rsZKf#TMm}5E7CQUSY~>kT(SpI<@tWj*?b#?@fSTzrVfrEPMCveaAMp zY@8o^cK4j!J)iyle&@Gm*DFae_|IaI@Ncr@D3+v$B}p0z!zO7xjJNyxJKH2tkoG0& zWsBpWoCNzc$hHpDD^;~k#`CS z&pOLQ``D!4I82PG^ zulm!7k*^y0sy}`3J|kZ>^3^~ZG4fR-Uk#*@doEx7s8LEFB6%u$=un>FH|AIU%`emE zQlGfExX(t89663zrKF@7^U*r<1ZS}AR6`8)?Q`F!z(g@IF?U9c81a2(=8vyt-#z1x z$7*9}=%9FZL=Q_$OdPFY;xC5X6THqfOO%rA%_=rFwktI?^-+V@-SeZ`#*sx*zTG#MLclDL}g?$oTYIWH~l+R%AlrA_ z^Uz=ROT(@lkp9uOqc_#Ol|-wT45ydoKTUINW2mBRELF}KO|Msdht{neL`_>CxOM%A zWDuY!(@33eQwv|W3gmWCb+PfQP!)2Z8vQt5L zwLL5I&d$!JAhuzwEq_~=;W_U=%e41P}};M^uekkdUbvQS#z=|&16ydu^!>Gx7dHp z=DXUoT65{?QA6N^z0|CjS-0`J*eb>2J`8{*1!>B;aUDVVX)_WAZtU*Twtlcen8peGg|DNM9KLXd!$?Xn=k1{pCe;3!2f>l9rL)I&(hz+Y&j( ziQ}ecSn1@RSUTrB21f<2U;gxQ;<1hU#W8&2kEf9%1WoDj65B3rE>Z3Sj}x|%alW+0 z+oOV)H8)e~)0)LoWL=5=M!IC*ys)`c8Aq8}$ zRj@3X*{kykkWaXBkExT>=;|RQhfwRSNAo&X8?Wdp9Wm=Ta)j>kLoLgH?<%KB8Llxi z)0{(pSf8loB+5OS*X}L-6<+1jb3+;jwLAi?^L^NaxF}-(GCV`6o;!OyFMdv5R`sNO z{p^Qtyjb9oPX+3KIQtL1Q>=`aGpDE0rTtz$8Hv7bV!X%+Cx6hk(aR^U9F)jp%8_|Z zNVCwnO(kDBuYc{d(KD&8v1Q_h9mn#@?~m_}qx5tauN*uB zi)Wo+`|ee*;RVFMIn+^W^QlwXTR~ONAKGqI8V&@$@SRYJ~#OR4KhJ#}8#hV?R;8MVx&EO*Yz=dMFOgKJZp zmp_Kl-H4m$@#67Oyu{cy4pycCpS>XP9GW+TH94B`ycDd<2cyQ^Nky-rz+=r zXEE7Z ztEua9E$TMOajOGO+zS!e=U1*VLdG)uI`3dezJ92P! zKe^wX7yjth8Ms|cvd)}; zUL*TrN1bcGnlsNyoWY#5n8z{WebMuHzpHwGCOC;@RPf^Y`$d(b6pc+pezEn0sr|`b*+0?u5P^J`Q&?kqzd{D6BWmNED-{iR{?hnToVY3Qz zs2y?IgOiq<&N}PromZwPb2ogvv~(-+GnhIK=#-;|7hgO3$^43E?y%o*ANjeMm#bcy zOqaHl61C2eHOKGF)C_r@bNBY0<+OR}G@4eB?ZJv;*1-?@`tw7D5it!imCps8MI)QRnFb{{gP4Tf6DK{fYW$bT?o9+ zqi!j_d+USPJ_yH(==Wg4c>IgF39i{|zR=G-_xS&<)F%fA8>|Ml4Ymu$96y9@f~~Mx zt=~}B$2mN{|MGKAp|_r*uYtJMV84apYoDU-wMS3)i(5H z@CuDUXtfP}8N5Ox5L)eS(N}_$C_RPWcD{jg-%I7ERQ>IzD)TK69MolX9d+9Us`@u{ y%E{O!wxj5`{2)2Fid?4$l<`|7%Jua4GT#$$malV+bWJIbrBKRfuGIgZl>Y;Xvjt%Q literal 0 HcmV?d00001 diff --git a/EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.Designer.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.Designer.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.Designer.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.Designer.cs index d99c173..8d05e4f 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.Designer.cs @@ -1,4 +1,4 @@ -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { partial class InDepthAnalysisForm { diff --git a/EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.cs similarity index 95% rename from EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.cs index 55231cf..d0ba616 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.cs @@ -1,6 +1,5 @@ using EM_Common; using EM_Common_Win; -using EM_Statistics; using System; using System.Collections.Generic; using System.Drawing; @@ -8,9 +7,9 @@ using System.Linq; using System.Windows.Forms; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { - internal partial class InDepthAnalysisForm : Form + public partial class InDepthAnalysisForm : Form { private readonly Template.TemplateInfo templateInfo = null; private readonly List settingsDialogs = new List(); @@ -20,23 +19,22 @@ internal partial class InDepthAnalysisForm : Form private string currentSettingsPath = string.Empty; private const string IN_DEPTH_SESSION_INFO = "IN_DEPTH_SESSION_INFO"; - private const string IN_DEPTH_ACKNOWLEDGEMENT = "The In-depth Analysis plugin was developed as a part of the project " + + private const string IN_DEPTH_ACKNOWLEDGEMENT = "The In-depth Analysis tool was developed as a part of the project " + "\"Support for the Microsimulation Hub of the Council of Economic Advisors in Greece\", " + "funded by the European Commission’s Structural Reform Support Programme and implemented by the " + "Joint Research Centre through an administrative arrangement with DG REFORM. All parties agreed to " + - "incorporate the plugin to EUROMOD, which implies the public distribution of its compiled version under " + + "incorporate the tool to EUROMOD, which implies the public distribution of its compiled version under " + "the EUROMOD End-user licence agreement and its source code under the European Union Public Licence (EUPL-1.2) " + "or a later version of this licence."; - internal InDepthAnalysisForm() + public InDepthAnalysisForm() { try { InitializeComponent(); InitTreeAndDialogs(); InDepthAnalysis.SetShowHelp(this, helpProvider); - - bool success = XML_handling.ParseTemplate(Properties.Resources.InDepthAnalysis, out Template template, out ErrorCollector errorCollector, true); + bool success = XML_handling.ParseTemplate(EM_Statistics.Resources.InDepthAnalysis_xml, out Template template, out ErrorCollector errorCollector, true); if (errorCollector.HasErrors()) MessageBox.Show(errorCollector.GetErrorMessage()); if (!success) return; @@ -110,7 +108,7 @@ void UpdateForNewSettings() foreach (BaselineReformPackage baselineReformPackage in currentSettings.baselineReformPackages) { int baseRow = gridBaselines.Rows.Add( - File.Exists(baselineReformPackage.baseline.filePath) ? Properties.Resources.existing : Properties.Resources.missing, + File.Exists(baselineReformPackage.baseline.filePath) ? Resources.existing_png : Resources.missing_png, Path.GetFileName(baselineReformPackage.baseline.filePath), baselineReformPackage.baseline.label); gridBaselines.Rows[baseRow].Cells[colBaselines.Index].ToolTipText = baselineReformPackage.baseline.filePath; gridBaselines.Rows[baseRow].Tag = baselineReformPackage; @@ -118,7 +116,7 @@ void UpdateForNewSettings() foreach (BaselineReformPackage.BaselineOrReform reform in baselineReformPackage.reforms) { int refRow = gridReforms.Rows.Add( - File.Exists(reform.filePath) ? Properties.Resources.existing : Properties.Resources.missing, + File.Exists(reform.filePath) ? Resources.existing_png : Resources.missing_png, Path.GetFileName(reform.filePath), reform.label); gridReforms.Rows[refRow].Cells[colBaselines.Index].ToolTipText = reform.filePath; gridReforms.Rows[refRow].Tag = new Tuple(baselineReformPackage, baselineReformPackage.reforms.IndexOf(reform)); @@ -137,6 +135,7 @@ void UpdateForNewSettings() private void btnRun_Click(object sender, EventArgs e) { + try { bool hasValidPackages = currentSettings.GetFilePackages(out List filePackages, out List errors); @@ -144,7 +143,7 @@ private void btnRun_Click(object sender, EventArgs e) hasValidPackages ? MessageBoxButtons.OKCancel : MessageBoxButtons.OK) == DialogResult.Cancel) || !hasValidPackages) return; // reload template to avoid any remainders from previous runs (but error-checking is not necessary anymore) - XML_handling.ParseTemplate(Properties.Resources.InDepthAnalysis, out Template template, out _, true); + XML_handling.ParseTemplate(EM_Statistics.Resources.InDepthAnalysis_xml, out Template template, out _, true); ErrorCollector errorCollector = new ErrorCollector(); TemplateApi templateApi = new TemplateApi(template, errorCollector); templateApi.SetEndUserFriendlyActionErrorMode(); @@ -179,8 +178,8 @@ private void btnRun_Click(object sender, EventArgs e) foreach (FilePackageContent fp in filePackages) { BaselineReformPackage brp = (from p in currentSettings.baselineReformPackages - where EMPath.IsSamePath(p.baseline.filePath, fp.PathBase) - select p).FirstOrDefault(); + where EMPath.IsSamePath(p.baseline.filePath, fp.PathBase) + select p).FirstOrDefault(); if (brp != null) { PrettyInfoProvider.PackageLabels packageLabels = new PrettyInfoProvider.PackageLabels() { @@ -200,7 +199,7 @@ where EMPath.IsSamePath(p.baseline.filePath, fp.PathBase) if (errorCollector.HasErrors()) MessageBox.Show("!!! DEBUG ERROR MESSAGE - JUST FOR CHECKING !!!\n\n" + errorCollector.GetErrorMessage()); } - PiLoader.GetPlugIn("Statistics Presenter").Run(new Dictionary { + EM_Statistics.StatisticsPresenter.StatisticsPresenter.Run(new Dictionary { { "template", templateApi.GetTemplate() }, { "FilePackages", filePackages }, { "userinput", systemSpecificVars } } ); @@ -209,6 +208,7 @@ where EMPath.IsSamePath(p.baseline.filePath, fp.PathBase) if (chkSaveMergedDataset.Checked) mergedDatasetHandler.SaveMergedDataset(this, txtPathMergedDataset.Text, filePackages); } catch (Exception exception) { ReportException(exception); } + } private void ModifyCompareColumns(TemplateApi templateApi) @@ -246,8 +246,8 @@ internal void ReportException(Exception exception) private void newToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("You will lose any unsaved changes. Are you sure you want to start a new project?", string.Empty, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; - currentSettings = new Settings() { baselineReformPackages = new List() }; - SetCurrentSettingsPath(string.Empty); + currentSettings = new Settings() { baselineReformPackages = currentSettings?.baselineReformPackages }; + //SetCurrentSettingsPath(string.Empty); UpdateForNewSettings(); } @@ -512,7 +512,6 @@ private void InDepthAnalysisForm_FormClosing(object sender, FormClosingEventArgs try { mergedDatasetHandler.StopAllActions(); - // store selected baselines & reforms for reloading, if the In-depth-plugin is opened again in the current UI-session TSDictionary pluginSessionInfo = new TSDictionary(); pluginSessionInfo.SetItem(IN_DEPTH_SESSION_INFO, currentSettings); @@ -528,7 +527,7 @@ private void miHelp_Click(object sender, EventArgs e) private void miHelpAbout_Click(object sender, EventArgs e) { - MessageBox.Show($"In-depth Analysis v{Settings.VERSION}. "+ System.Environment.NewLine + System.Environment.NewLine + IN_DEPTH_ACKNOWLEDGEMENT, "About"); + MessageBox.Show($"In-depth Analysis tool. "+ System.Environment.NewLine + System.Environment.NewLine + IN_DEPTH_ACKNOWLEDGEMENT, "About"); } private void treeCategories_DrawNode(object sender, DrawTreeNodeEventArgs e) diff --git a/EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.resx b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.resx similarity index 99% rename from EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.resx rename to EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.resx index 37a292d..ec915aa 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthAnalysisForm.resx +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/InDepthAnalysisForm.resx @@ -117,23 +117,22 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + True - - + + True - - - + + 138, 17 - - + + 248, 17 - - + + 17, 17 - + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/EM_Plugins/InDepthAnalysis/Settings/ISettings.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/ISettings.cs similarity index 88% rename from EM_Plugins/InDepthAnalysis/Settings/ISettings.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/ISettings.cs index 00de07f..5393318 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/ISettings.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/ISettings.cs @@ -1,7 +1,7 @@ using EM_Statistics; using System.Collections.Generic; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal interface ISettings { diff --git a/EM_Plugins/InDepthAnalysis/Settings/Settings.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/Settings.cs similarity index 85% rename from EM_Plugins/InDepthAnalysis/Settings/Settings.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/Settings.cs index 7bacb88..cfd91ae 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/Settings.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/Settings.cs @@ -2,6 +2,7 @@ using EM_Statistics; using EM_XmlHandler; using System; +using System.Globalization; using System.Collections.Generic; using System.IO; using System.Linq; @@ -9,24 +10,24 @@ using System.Xml; using System.Xml.Linq; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { - internal class Settings + public class Settings { internal const int FOREACH_VALUE_OF_MAX_COUNT = 150; internal const string VERSION = "0.1.5"; internal const string VERSION_FOR_ASSEMBLY = VERSION + ".0"; - internal List baselineReformPackages = new List(); + public List baselineReformPackages = new List(); internal List inactiveTablesAndPages = new List(); internal SettingsFiscal.UserSettings userSettingsFiscal = new SettingsFiscal.UserSettings(); internal SettingsDistributional.UserSettings userSettingsDistributional = new SettingsDistributional.UserSettings(); internal SettingsInequalityAndPoverty.UserSettings userSettingsInequalityAndPoverty = new SettingsInequalityAndPoverty.UserSettings(); - internal string pathEuromodFiles = UISessionInfo.GetEuromodFilesFolder(); - internal string pathBaselineFiles = UISessionInfo.GetOutputFolder(); - internal string pathReformFiles = UISessionInfo.GetOutputFolder(); + public string pathEuromodFiles = UISessionInfo.GetEuromodFilesFolder(); + public string pathBaselineFiles = UISessionInfo.GetOutputFolder(); + public string pathReformFiles = UISessionInfo.GetOutputFolder(); internal string pathMergedDataset = UISessionInfo.GetOutputFolder(); internal bool saveMergedDataset = false; internal bool compareWithBaseline = true; @@ -37,6 +38,34 @@ internal class Settings private const string rowName_ParameterSettings_DateAndTime = "Date and time"; private const string rowName_ParameterSettings_User = "User"; + internal class TextBoxInfo + { + internal TextBox textbox = null; + internal bool isFilter; + internal bool? startsWithComparer = null; + + public TextBoxInfo(TextBox _textbox, bool _isFilter, bool? _startsWithComparer = null) + { + textbox = _textbox; + isFilter = _isFilter; + startsWithComparer = _startsWithComparer; + } + } + + internal class DataGridViewInfo + { + internal DataGridView dgv = null; + internal bool isFilter; + internal bool? startsWithComparer; + + public DataGridViewInfo(DataGridView _dgv, bool _isFilter, bool? _startsWithComparer = null) + { + dgv = _dgv; + isFilter = _isFilter; + startsWithComparer = _startsWithComparer; + } + } + internal bool GetFilePackages(out List filePackages, out List errors) { filePackages = new List(); errors = new List(); @@ -49,6 +78,18 @@ internal bool GetFilePackages(out List filePackages, out Lis return filePackages.Any(); } + internal bool GetFilePackagesMacrovalidation(out List filePackages, out List errors) + { + filePackages = new List(); errors = new List(); + foreach (BaselineReformPackage baselineReformPackage in baselineReformPackages) + { + if (baselineReformPackage.GetFilePackageContentMacrovalidation(out FilePackageContent fpc, out List e)) filePackages.Add(fpc); + errors.AddRange(e); + } + if (!filePackages.Any()) errors.Add($"No valid baseline-reform packages available."); + return filePackages.Any(); + } + internal void ResetPathEuromodFilesFolder() { pathEuromodFiles = UISessionInfo.GetEuromodFilesFolder(); ; @@ -119,7 +160,7 @@ List GetSubElements(XElement xe) internal void ToXml(string xmlFilePath) { - using (XmlWriter xmlWriter = XmlWriter.Create(xmlFilePath)) + using (XmlWriter xmlWriter = XmlWriter.Create(xmlFilePath, new XmlWriterSettings () { Indent = true })) { xmlWriter.WriteStartElement(XMLTAG_ROOT); @@ -194,7 +235,7 @@ internal static bool HandleFormulaString(TemplateApi templateApi, string origFor if (!handledFormula.Contains(HardDefinitions.FormulaParameter.DATA_VAR)) { if (handledFormula.IndexOfAny(new char[] { '<', '>', '=', '&', '|', '+', '-', '*', '/', '!', '(', ')' }) >= 0) return true; - if (Double.TryParse(handledFormula, out double d)) { handledFormula = d.ToString("F"); return true; } + if (Double.TryParse(handledFormula, out double d)) { handledFormula = d.ToString("F", CultureInfo.InvariantCulture); return true; } handledFormula = DATA_VAR(handledFormula); // probably a variable-name } @@ -250,6 +291,12 @@ internal static string MakeOutVarName(string varIdent) internal static bool IsValidFormula(string formula, bool isFilter, bool startsWithComparer = false) { + return IsValidFormula(formula, isFilter, out _, startsWithComparer, true); + } + + internal static bool IsValidFormula(string formula, bool isFilter, out string error, bool startsWithComparer = false, bool showMessage = false) + { + error = string.Empty; if (string.IsNullOrEmpty(formula)) return true; if (startsWithComparer) @@ -257,13 +304,18 @@ internal static bool IsValidFormula(string formula, bool isFilter, bool startsWi List cmps = new List() { "!=", "==", "<=", ">=", "=", "<", ">" }; formula = formula.TrimStart(); bool ok = false; foreach (string cmp in cmps) if (formula.StartsWith(cmp)) { ok = true; break; } - if (!ok) { MessageBox.Show($"Invalid condition: must start with one of {string.Join(" ", cmps)}"); return false; } + if (!ok) { + error = $"Invalid condition: must start with one of {string.Join(" ", cmps)}"; + if (showMessage) MessageBox.Show(error); + return false; + } formula = $"0.0{formula}"; // from !=whatsoever to 0.0!=whatsoever } formula = FormulaEditor.Add_DATA_VAR(formula, true); - if (TemplateApi.IsValidFormula(formula, isFilter, out string error)) return true; - MessageBox.Show(error); return false; + if (TemplateApi.IsValidFormula(formula, isFilter, out error)) return true; + if (showMessage) MessageBox.Show(error); + return false; } internal static string DATA_VAR(string dataVar) { return $"{HardDefinitions.FormulaParameter.DATA_VAR}@{dataVar}{HardDefinitions.FormulaParameter.CLOSING_TOKEN}"; } diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs similarity index 93% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs index 377a0f3..853c560 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.Designer.cs @@ -1,4 +1,4 @@ -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { partial class SettingsDistributional { @@ -28,14 +28,14 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); this.btnCancel = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button(); this.txtTableTitleDistributionalTaxpayersBeneficiaries = new System.Windows.Forms.TextBox(); @@ -460,32 +460,32 @@ private void InitializeComponent() this.grid21AnalysisObjects.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.grid21AnalysisObjects.BackgroundColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle9.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle9.SelectionBackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle9.SelectionForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.grid21AnalysisObjects.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle9; + this.grid21AnalysisObjects.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.grid21AnalysisObjects.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.grid21AnalysisObjects.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.grid21AnalysisObjects.ColumnHeadersVisible = false; this.grid21AnalysisObjects.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.col21VariableFormula}); - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle10.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle10.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle10.SelectionBackColor = System.Drawing.Color.LightGray; - dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.grid21AnalysisObjects.DefaultCellStyle = dataGridViewCellStyle10; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.LightGray; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.grid21AnalysisObjects.DefaultCellStyle = dataGridViewCellStyle2; this.grid21AnalysisObjects.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.grid21AnalysisObjects.Location = new System.Drawing.Point(50, 29); - this.grid21AnalysisObjects.MultiSelect = false; this.grid21AnalysisObjects.Name = "grid21AnalysisObjects"; this.grid21AnalysisObjects.RowHeadersVisible = false; - this.grid21AnalysisObjects.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.grid21AnalysisObjects.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.grid21AnalysisObjects.Size = new System.Drawing.Size(288, 80); this.grid21AnalysisObjects.TabIndex = 73; this.grid21AnalysisObjects.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridAnalysisObjects_CellValidating); @@ -721,32 +721,32 @@ private void InitializeComponent() this.grid22AnalysisObjects.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.grid22AnalysisObjects.BackgroundColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.grid22AnalysisObjects.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11; + this.grid22AnalysisObjects.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.grid22AnalysisObjects.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle3; this.grid22AnalysisObjects.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.grid22AnalysisObjects.ColumnHeadersVisible = false; this.grid22AnalysisObjects.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.col22VariableFormula}); - dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle12.SelectionBackColor = System.Drawing.Color.LightGray; - dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.grid22AnalysisObjects.DefaultCellStyle = dataGridViewCellStyle12; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.LightGray; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.grid22AnalysisObjects.DefaultCellStyle = dataGridViewCellStyle4; this.grid22AnalysisObjects.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.grid22AnalysisObjects.Location = new System.Drawing.Point(50, 29); - this.grid22AnalysisObjects.MultiSelect = false; this.grid22AnalysisObjects.Name = "grid22AnalysisObjects"; this.grid22AnalysisObjects.RowHeadersVisible = false; - this.grid22AnalysisObjects.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.grid22AnalysisObjects.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.grid22AnalysisObjects.Size = new System.Drawing.Size(288, 80); this.grid22AnalysisObjects.TabIndex = 80; this.grid22AnalysisObjects.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridAnalysisObjects_CellValidating); @@ -914,32 +914,32 @@ private void InitializeComponent() this.grid23AnalysisObjects.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.grid23AnalysisObjects.BackgroundColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.grid23AnalysisObjects.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle13; + this.grid23AnalysisObjects.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.grid23AnalysisObjects.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; this.grid23AnalysisObjects.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.grid23AnalysisObjects.ColumnHeadersVisible = false; this.grid23AnalysisObjects.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.col23VariableFormula}); - dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle14.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle14.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle14.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle14.SelectionBackColor = System.Drawing.Color.LightGray; - dataGridViewCellStyle14.SelectionForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.grid23AnalysisObjects.DefaultCellStyle = dataGridViewCellStyle14; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.LightGray; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.grid23AnalysisObjects.DefaultCellStyle = dataGridViewCellStyle6; this.grid23AnalysisObjects.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.grid23AnalysisObjects.Location = new System.Drawing.Point(50, 29); - this.grid23AnalysisObjects.MultiSelect = false; this.grid23AnalysisObjects.Name = "grid23AnalysisObjects"; this.grid23AnalysisObjects.RowHeadersVisible = false; - this.grid23AnalysisObjects.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.grid23AnalysisObjects.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.grid23AnalysisObjects.Size = new System.Drawing.Size(288, 80); this.grid23AnalysisObjects.TabIndex = 87; this.grid23AnalysisObjects.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridAnalysisObjects_CellValidating); @@ -1297,14 +1297,15 @@ private void InitializeComponent() this.gridBreakDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gridBreakDown.BackgroundColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle15.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle15.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle15.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle15.SelectionBackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle15.SelectionForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.gridBreakDown.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle15; + this.gridBreakDown.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.gridBreakDown.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7; this.gridBreakDown.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.gridBreakDown.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colBreakDownTitle, @@ -1313,24 +1314,23 @@ private void InitializeComponent() this.colBreakDownQuantiles, this.colBreakDownValueDesc, this.colBreakDownValueDescEdit}); - dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle16.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle16.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle16.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle16.SelectionBackColor = System.Drawing.Color.LightGray; - dataGridViewCellStyle16.SelectionForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.gridBreakDown.DefaultCellStyle = dataGridViewCellStyle16; + dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.LightGray; + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.gridBreakDown.DefaultCellStyle = dataGridViewCellStyle8; this.gridBreakDown.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.gridBreakDown.Location = new System.Drawing.Point(75, 36); - this.gridBreakDown.MultiSelect = false; this.gridBreakDown.Name = "gridBreakDown"; this.gridBreakDown.RowHeadersVisible = false; - this.gridBreakDown.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.gridBreakDown.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.gridBreakDown.Size = new System.Drawing.Size(741, 81); this.gridBreakDown.TabIndex = 78; this.gridBreakDown.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridBreakDown_CellContentClick); - this.gridBreakDown.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridBreakDown_CellValidating); + this.gridBreakDown.CellValidated += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridBreakDown_CellValidated); // // colBreakDownTitle // diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.cs similarity index 79% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.cs index 6da29ab..637f5aa 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.cs @@ -7,7 +7,7 @@ using System.Xml; using System.Xml.Linq; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal partial class SettingsDistributional : Form, ISettings { @@ -80,136 +80,27 @@ internal class UserSettings internal string tableTitle_Winners = "2.7. Winners"; internal string tableTitle_Losers = "2.8. Losers"; - internal class BreakDown - { - internal const string XMLTAG_ROW_TITLE = "RowTitle"; - internal const string XMLTAG_QUANTILES = "Quantiles"; - internal const string XMLTAG_VARIABLE = "Variable"; - internal const string XMLTAG_EQUIVALISED = "Equivalised"; - private const string XMLTAG_VALUE_DESCRIPTION = "ValueDescription"; - private const string XMLTAG_VALUE = "Value"; - private const string XMLTAG_TEXT = "Text"; - - private const string VALUE_PLACEHOLDER = "[value~Numeric]"; - internal const string rowName_breakDown = "BreakDownRow"; - - internal string rowTitle = string.Empty; - internal int quantiles = -1; - internal string variable = string.Empty; - internal bool equivalised = true; - internal Dictionary valueDescriptions = new Dictionary(); - - internal static BreakDown FromXml(XElement xElement, out string warnings) - { - warnings = string.Empty; BreakDown breakDown = new BreakDown(); - foreach (XElement xe in xElement.Elements()) - { - if (xe.Value == null) continue; - switch (Settings.GetXEleName(xe)) - { - case XMLTAG_ROW_TITLE: breakDown.rowTitle = xe.Value; break; - case XMLTAG_VARIABLE: breakDown.variable = xe.Value; break; - case XMLTAG_QUANTILES: if (int.TryParse(xe.Value, out int q)) breakDown.quantiles = q; break; - case XMLTAG_EQUIVALISED: if (bool.TryParse(xe.Value, out bool e)) breakDown.equivalised = e; break; - case XMLTAG_VALUE_DESCRIPTION + "s": - foreach (XElement xeVd in xe.Elements()) - { - if (xeVd.Value == null) continue; double value = 0; string text = string.Empty; - foreach (XElement xeValDesc in xeVd.Elements()) - { - switch (Settings.GetXEleName(xeValDesc)) - { - case XMLTAG_VALUE: if (double.TryParse(xeValDesc.Value, out double d)) value = d; break; - case XMLTAG_TEXT: text = xeValDesc.Value; break; - default: warnings += $"Unknown setting {Settings.GetXEleName(xeValDesc)} is ignored." + Environment.NewLine; break; - } - } - if (!breakDown.valueDescriptions.ContainsKey(value)) breakDown.valueDescriptions.Add(value, text); - } - break; - default: warnings += $"Unknown setting {Settings.GetXEleName(xe)} is ignored." + Environment.NewLine; break; - } - } - return breakDown; - } - - internal void ToXml(XmlWriter xmlWriter) - { - xmlWriter.WriteStartElement(XMLTAG_BREAK_DOWN); - Settings.WriteElement(xmlWriter, XMLTAG_ROW_TITLE, rowTitle); - Settings.WriteElement(xmlWriter, XMLTAG_QUANTILES, quantiles.ToString()); - Settings.WriteElement(xmlWriter, XMLTAG_VARIABLE, variable); - Settings.WriteElement(xmlWriter, XMLTAG_EQUIVALISED, equivalised.ToString()); - xmlWriter.WriteStartElement(XMLTAG_VALUE_DESCRIPTION + "s"); - foreach (var vd in valueDescriptions) - { - xmlWriter.WriteStartElement(XMLTAG_VALUE_DESCRIPTION); - Settings.WriteElement(xmlWriter, XMLTAG_VALUE, vd.Key.ToString()); - Settings.WriteElement(xmlWriter, XMLTAG_TEXT, vd.Value); - xmlWriter.WriteEndElement(); - } - xmlWriter.WriteEndElement(); - xmlWriter.WriteEndElement(); - } - - internal void ToGrid(DataGridView grid) - { - int i = grid.Rows.Add(rowTitle.EndsWith(VALUE_PLACEHOLDER) ? rowTitle.Substring(0, rowTitle.Length - VALUE_PLACEHOLDER.Length).TrimEnd() : rowTitle, - variable, equivalised, quantiles <= 0 ? DefPar.Value.NA : quantiles.ToString(), CategoryDescriptionsForm.DicToString(valueDescriptions)); - grid.Rows[i].Tag = valueDescriptions; - } - - internal static bool FromGrid(SettingsDistributional dlg, DataGridViewRow row, int iRow, out BreakDown bd, out string error) - { - bd = null; error = ""; - string var = row.Cells[dlg.colBreakDownVariable.Index].Value?.ToString() ?? string.Empty; - string squant = row.Cells[dlg.colBreakDownQuantiles.Index].Value?.ToString() ?? DefPar.Value.NA; int quant = -1; - - if (string.IsNullOrEmpty(var) && squant == DefPar.Value.NA) return false; - - if (string.IsNullOrEmpty(var)) { error = $"Breakdown (row {iRow + 1}): missing variable"; return false; } - if (squant != DefPar.Value.NA && (!int.TryParse(squant, out quant) || quant <= 0)) - { error = $"Breakdown (row {iRow + 1}): {squant} is not a valid number of quantiles"; return false; } - - string titel = row.Cells[dlg.colBreakDownTitle.Index].Value?.ToString() ?? string.Empty; - bd = new BreakDown() { rowTitle = titel.TrimEnd().EndsWith(VALUE_PLACEHOLDER) ? titel : titel.TrimEnd() + " " + VALUE_PLACEHOLDER, - variable = var, - quantiles = quant, - equivalised = Convert.ToBoolean(row.Cells[dlg.colBreakDownEquiv.Index].Value), - valueDescriptions = row.Tag as Dictionary }; - return true; - } - - internal string GetByText(bool forButton = false) - { - if (forButton) - { - string byTextShort = rowTitle.Replace(VALUE_PLACEHOLDER, string.Empty).Trim(); - if (!string.IsNullOrEmpty(byTextShort)) return $"by {byTextShort}"; - } - return IsDefault() ? "by deciles of equivalised disposable income" - : $"by {(quantiles <= 0 ? "values" : $"{quantiles} quantiles")} of {variable}"; - } - internal static BreakDown GetDefault() { return new BreakDown() { rowTitle = "Decile ", quantiles = 10, equivalised = true, - variable = SystemInfo.ILS_DISPY }; } - internal bool IsDefault(bool strict = true) { return variable == GetDefault().variable && equivalised == GetDefault().equivalised && - (!strict || quantiles == GetDefault().quantiles); } - } + internal List breakDowns = new List() { + new Breakdowns.TypeBreakDown(Breakdowns.STD_DISPY_DECILES), + new Breakdowns.TypeBreakDown(Breakdowns.STD_HH_CAT), + new Breakdowns.TypeBreakDown(Breakdowns.STD_LABOUR_CAT), + new Breakdowns.TypeBreakDown(Breakdowns.STD_GENDER_CAT), + new Breakdowns.TypeBreakDown(Breakdowns.STD_AGE_CAT) + }; - internal List breakDowns = new List { BreakDown.GetDefault() }; - internal List table21_AnalysisObjects = new List() { SystemInfo.ILS_TAX }; + internal List table21_AnalysisObjects = new List() { InDepthDefinitions.ILS_TAX }; internal string table21_CalculationLevel = HardDefinitions.DefaultCalculationLevels.HOUSEHOLD; internal string table21_TargetPopulation = string.Empty; internal string table21_DistributionalTaxpayersBeneficiaries = "!=0"; - internal List table22_AnalysisObjects = new List() { SystemInfo.ILS_TAX }; + internal List table22_AnalysisObjects = new List() { InDepthDefinitions.ILS_TAX }; internal string table22_CalculationLevel = HardDefinitions.DefaultCalculationLevels.HOUSEHOLD; internal string table22_TargetPopulation = string.Empty; - internal List table23_AnalysisObjects = new List() { SystemInfo.ILS_TAX }; + internal List table23_AnalysisObjects = new List() { InDepthDefinitions.ILS_TAX }; internal string table23_CalculationLevel = HardDefinitions.DefaultCalculationLevels.HOUSEHOLD; internal string table23_TargetPopulation = string.Empty; - internal string table24_Tax = $"{Settings.DATA_VAR(SystemInfo.ILS_TAX)} + {Settings.DATA_VAR(SystemInfo.ILS_SICDY)}"; - internal string table24_TaxBase = $"{Settings.DATA_VAR(SystemInfo.ILS_ORIGY)} + {Settings.DATA_VAR(SystemInfo.ILS_BEN)}"; + internal string table24_Tax = $"{Settings.DATA_VAR(InDepthDefinitions.ILS_TAX)} + {Settings.DATA_VAR(InDepthDefinitions.ILS_SICDY)}"; + internal string table24_TaxBase = $"{Settings.DATA_VAR(InDepthDefinitions.ILS_ORIGY)} + {Settings.DATA_VAR(InDepthDefinitions.ILS_BEN)}"; internal string table24_CalculationLevel = HardDefinitions.DefaultCalculationLevels.HOUSEHOLD; internal string table24_TargetPopulation = string.Empty; internal string table25_CalculationLevel = HardDefinitions.DefaultCalculationLevels.HOUSEHOLD; @@ -238,7 +129,7 @@ internal void FromXml(XElement xElement, out string warnings) case XMLTAG_TABLE_TITLE_LOSERS: tableTitle_Losers = xe.Value; break; case XMLTAG_BREAK_DOWN + "s": breakDowns.Clear(); - foreach (XElement xebd in xe.Elements()) { breakDowns.Add(BreakDown.FromXml(xebd, out string wbd)); warnings += wbd; } + foreach (XElement xebd in xe.Elements()) { breakDowns.Add(Breakdowns.TypeBreakDown.FromXml(xebd, out string wbd)); warnings += wbd; } break; case XMLTAG_TABLE21_ANALYSIS_OBJECTS: table21_AnalysisObjects = AnalysisObjectsFromXml(); break; case XMLTAG_TABLE21_CALCULATION_LEVEL: table21_CalculationLevel = xe.Value; break; @@ -285,7 +176,7 @@ internal void ToXml(XmlWriter xmlWriter) Settings.WriteElement(xmlWriter, XMLTAG_TABLE_TITLE_MEAN_EQ_DISP_INCOME, tableTitle_MeanEqDispIncome); Settings.WriteElement(xmlWriter, XMLTAG_TABLE_TITLE_WINNERS, tableTitle_Winners); Settings.WriteElement(xmlWriter, XMLTAG_TABLE_TITLE_LOSERS, tableTitle_Losers); - xmlWriter.WriteStartElement(XMLTAG_BREAK_DOWN + "s"); foreach (BreakDown bd in breakDowns) bd.ToXml(xmlWriter); xmlWriter.WriteEndElement(); + xmlWriter.WriteStartElement(XMLTAG_BREAK_DOWN + "s"); foreach (Breakdowns.TypeBreakDown bd in breakDowns) bd.ToXml(xmlWriter, XMLTAG_BREAK_DOWN); xmlWriter.WriteEndElement(); AnalysisObjectsToXml(XMLTAG_TABLE21_ANALYSIS_OBJECTS, table21_AnalysisObjects); Settings.WriteElement(xmlWriter, XMLTAG_TABLE21_CALCULATION_LEVEL, table21_CalculationLevel); Settings.WriteElement(xmlWriter, XMLTAG_TABLE21_TARGET_POPULATION, table21_TargetPopulation); @@ -318,7 +209,7 @@ void AnalysisObjectsToXml(string mainTag, List analysisObjects) internal void WriteMetadata(TemplateApi templateApi, List inactiveTablesAndPages) { Settings.AddMetaDataHeaderRow(templateApi, pageName_Distributional, "Breakdown"); - foreach (BreakDown bd in breakDowns) Settings.AddMetaDataRow(templateApi, pageName_Distributional, bd.GetByText(), string.Empty); + foreach (Breakdowns.TypeBreakDown bd in breakDowns) Settings.AddMetaDataRow(templateApi, pageName_Distributional, bd.GetByText(), string.Empty); if (!inactiveTablesAndPages.Contains(tableName_DistributionalTaxpayersBeneficiaries)) { @@ -373,6 +264,9 @@ internal void WriteMetadata(TemplateApi templateApi, List inactiveTables } private Settings settings = null; + internal Dictionary checkFields = new Dictionary(); + internal Dictionary checkGridViews = new Dictionary(); + internal SettingsDistributional() { @@ -386,8 +280,7 @@ void ISettings.ModifyTemplate(TemplateApi templateApi, out List breakDowns = settings.userSettingsDistributional.breakDowns; - if (!breakDowns.Any()) breakDowns.Add(UserSettings.BreakDown.GetDefault()); + List breakDowns = settings.userSettingsDistributional.breakDowns; List pages = new List(); // first make all necessary copies, i.e. before the original page is modified for (int bdNo = 0; bdNo < breakDowns.Count; ++bdNo) @@ -421,7 +314,7 @@ private void ModifyTemplate_Titles(TemplateApi templateApi) if (!settings.inactiveTablesAndPages.Contains(tableName_Losers)) templateApi.ModifyTable(new Template.Page.Table() { name = tableName_Losers, title = settings.userSettingsDistributional.tableTitle_Losers }, pageName_Distributional); } - private void ModifyTemplate_BreakDown(TemplateApi templateApi, string pageName, UserSettings.BreakDown breakDown) + private void ModifyTemplate_BreakDown(TemplateApi templateApi, string pageName, Breakdowns.TypeBreakDown breakDown) { string breakDownVar = Settings.MakeOutVarName($"BreakDown_{breakDown.variable}"); if (breakDown.quantiles <= 0) @@ -438,22 +331,19 @@ private void ModifyTemplate_BreakDown(TemplateApi templateApi, string pageName, } else { - string varQuantBase = varName_eq_ils_dispy; - if (!breakDown.IsDefault(false)) + string varQuantBase = ""; + string varQuantBaseNotEq = Settings.MakeReadVarName(templateApi, breakDown.variable); + templateApi.ModifyOptionalVariables(new Template.TemplateInfo.OptionalVariable() { name = varQuantBaseNotEq, readVar = breakDown.variable, defaultValue = double.NaN }); + if (!breakDown.equivalised) varQuantBase = varQuantBaseNotEq; + else { - string varQuantBaseNotEq = Settings.MakeReadVarName(templateApi, breakDown.variable); - templateApi.ModifyOptionalVariables(new Template.TemplateInfo.OptionalVariable() { name = varQuantBaseNotEq, readVar = breakDown.variable, defaultValue = double.NaN }); - if (!breakDown.equivalised) varQuantBase = varQuantBaseNotEq; - else - { - varQuantBase = $"eq{varQuantBaseNotEq}"; - templateApi.ModifyPageActions(new Template.Action() { calculationType = HardDefinitions.CalculationType.CreateEquivalized, - outputVar = varQuantBase, - parameters = new List() { - new Template.Parameter() { variableName = varQuantBaseNotEq }, - new Template.Parameter() { name = EM_TemplateCalculator.PAR_EQUIVALENCESCALE, variableName = varName_OECDScale, _source = Template.Parameter.Source.BASELINE } } }, - pageName); - } + varQuantBase = $"eq{varQuantBaseNotEq}"; + templateApi.ModifyPageActions(new Template.Action() { calculationType = HardDefinitions.CalculationType.CreateEquivalized, + outputVar = varQuantBase, + parameters = new List() { + new Template.Parameter() { variableName = varQuantBaseNotEq }, + new Template.Parameter() { name = EM_TemplateCalculator.PAR_EQUIVALENCESCALE, variableName = varName_OECDScale, _source = Template.Parameter.Source.BASELINE } } }, + pageName); } templateApi.ModifyPageActions(new Template.Action() { outputVar = breakDownVar, calculationType = HardDefinitions.CalculationType.CreateDeciles, @@ -469,12 +359,36 @@ private void ModifyTemplate_BreakDown(TemplateApi templateApi, string pageName, tableName_MeanDisposableIncome, tableName_MeanEqDispIncome, tableName_Winners, tableName_Losers }) { - if (!settings.inactiveTablesAndPages.Contains(tableName)) - templateApi.ModifyRows(new Template.Page.Table.Row() { - name = UserSettings.BreakDown.rowName_breakDown, title = breakDown.rowTitle, - forEachValueOf = breakDownVar, forEachValueMaxCount = Settings.FOREACH_VALUE_OF_MAX_COUNT, - forEachValueDescriptions = breakDown.valueDescriptions }, + if (settings.inactiveTablesAndPages.Contains(tableName)) continue; + + if (Breakdowns.STD_CATS.ContainsKey(breakDown.name) && !Breakdowns.STD_CATS[breakDown.name].isValued) + { + List rowIdByType = new List(); + foreach (Breakdowns.BreakDownItem br in Breakdowns.STD_CATS[breakDown.name].items) + { + rowIdByType.Add(Settings.MakeId()); + if (!templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowIdByType.Last(), title = br.title, + cellAction = new Template.Action() { filter = new Template.Filter() { formulaString = br.filter }}}, + pageName, tableName, TemplateApi.ModifyMode.AddNew, TemplateApi.AddWhere.Before, Breakdowns.rowName_breakDown)) return; + } + templateApi.ModifyRows(new Template.Page.Table.Row() + { + name = Breakdowns.rowName_breakDown + }, + pageName, tableName, TemplateApi.ModifyMode.Delete); + } + else + { + templateApi.ModifyRows(new Template.Page.Table.Row() + { + name = Breakdowns.rowName_breakDown, + title = breakDown.rowTitle, + forEachValueOf = breakDownVar, + forEachValueMaxCount = Settings.FOREACH_VALUE_OF_MAX_COUNT, + forEachValueDescriptions = breakDown.GetValueDictionaryFromDefinitions() + }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + } } templateApi.ModifyPage(new Template.Page() { name = pageName, @@ -491,7 +405,7 @@ private void ModifyTemplate_Table21(TemplateApi templateApi, string pageName) if (settings.inactiveTablesAndPages.Contains(tableName_DistributionalTaxpayersBeneficiaries)) return; List analysisObjects = (from ao in settings.userSettingsDistributional.table21_AnalysisObjects select ao).ToList(); - if (!analysisObjects.Any()) analysisObjects.Add(SystemInfo.ILS_TAX); + if (!analysisObjects.Any()) analysisObjects.Add(InDepthDefinitions.ILS_TAX); string calculationLevel = settings.userSettingsDistributional.table21_CalculationLevel == HardDefinitions.DefaultCalculationLevels.INDIVIDUAL ? HardDefinitions.DefaultCalculationLevels.INDIVIDUAL : HardDefinitions.DefaultCalculationLevels.HOUSEHOLD; @@ -552,7 +466,7 @@ private void ModifyTemplate_Table22(TemplateApi templateApi, string pageName) if (settings.inactiveTablesAndPages.Contains(tableName_TotalTaxOrBenefit)) return; List analysisObjects = (from ao in settings.userSettingsDistributional.table22_AnalysisObjects select ao).ToList(); - if (!analysisObjects.Any()) analysisObjects.Add(SystemInfo.ILS_TAX); + if (!analysisObjects.Any()) analysisObjects.Add(InDepthDefinitions.ILS_TAX); string formulaTargetPop = null; List parTargetPop = null; if (!string.IsNullOrEmpty(settings.userSettingsDistributional.table22_TargetPopulation)) @@ -590,7 +504,7 @@ private void ModifyTemplate_Table23(TemplateApi templateApi, string pageName) if (settings.inactiveTablesAndPages.Contains(tableName_MeanTaxOrBenefit)) return; List analysisObjects = (from ao in settings.userSettingsDistributional.table23_AnalysisObjects select ao).ToList(); - if (!analysisObjects.Any()) analysisObjects.Add(SystemInfo.ILS_TAX); + if (!analysisObjects.Any()) analysisObjects.Add(InDepthDefinitions.ILS_TAX); string formulaTargetPop = null; List parTargetPop = null; if (!string.IsNullOrEmpty(settings.userSettingsDistributional.table23_TargetPopulation)) @@ -747,7 +661,13 @@ private void UpdateControls() txtTableTitleMeanEqDispIncome.Text = settings.userSettingsDistributional.tableTitle_MeanEqDispIncome; txtTableTitleWinners.Text = settings.userSettingsDistributional.tableTitle_Winners; txtTableTitleLosers.Text = settings.userSettingsDistributional.tableTitle_Losers; - gridBreakDown.Rows.Clear(); foreach (UserSettings.BreakDown bd in settings.userSettingsDistributional.breakDowns) bd.ToGrid(gridBreakDown); + gridBreakDown.Rows.Clear(); + foreach (Breakdowns.TypeBreakDown tbd in settings.userSettingsDistributional.breakDowns) + { + int r = gridBreakDown.Rows.Add(tbd.rowTitle.EndsWith(Breakdowns.VALUE_PLACEHOLDER) ? tbd.rowTitle.Substring(0, tbd.rowTitle.Length - Breakdowns.VALUE_PLACEHOLDER.Length).TrimEnd() : tbd.rowTitle, + tbd.name, tbd.equivalised, tbd.quantiles <= 0 ? DefPar.Value.NA : tbd.quantiles.ToString(), tbd.GetValueStringFromDefinitions()); + gridBreakDown.Rows[r].Tag = tbd.GetValueListFromDefinitions(); + } grid21AnalysisObjects.Rows.Clear(); foreach (string ao in settings.userSettingsDistributional.table21_AnalysisObjects) grid21AnalysisObjects.Rows.Add(FormulaEditor.Remove_DATA_VAR(ao)); combo21Level.Text = settings.userSettingsDistributional.table21_CalculationLevel; txt21TargetPopulation.Text = FormulaEditor.Remove_DATA_VAR(settings.userSettingsDistributional.table21_TargetPopulation); @@ -782,14 +702,111 @@ private void btnOK_Click(object sender, EventArgs e) settings.userSettingsDistributional.tableTitle_Winners = txtTableTitleWinners.Text; settings.userSettingsDistributional.tableTitle_Losers = txtTableTitleLosers.Text; - List bds = new List(); string errors = string.Empty; + List bds = new List(); + string errors = string.Empty; foreach (DataGridViewRow row in gridBreakDown.Rows) { - if (UserSettings.BreakDown.FromGrid(this, row, gridBreakDown.Rows.IndexOf(row), out UserSettings.BreakDown bd, out string error)) bds.Add(bd); - errors += error + Environment.NewLine; + DataGridViewCell cell = row.Cells[colBreakDownVariable.Index]; + bool failed = false; + if (string.IsNullOrEmpty(cell.FormattedValue?.ToString())) + { + MessageBox.Show("Breakdown variable must not be empty."); + failed = true; + } + else if (FormulaEditor.ContainsSeparator(cell.FormattedValue.ToString())) + { + MessageBox.Show($"{cell.FormattedValue}: breakdown variable does not allow for formulas."); + failed = true; + } + else if (cell.FormattedValue.ToString().Trim().EndsWith(Settings.BASELINE_MARKER)) + { + MessageBox.Show($"{cell.FormattedValue}: breakdown is always based on baseline variables, thus '{Settings.BASELINE_MARKER}' does not make sense."); + failed = true; + } + if (failed) + { + gridBreakDown.CurrentCell = cell; + gridBreakDown.BeginEdit(true); + return; + } + + int iRow = gridBreakDown.Rows.IndexOf(row); + string error = string.Empty; + string var = row.Cells[colBreakDownVariable.Index].Value?.ToString() ?? string.Empty; + string squant = row.Cells[colBreakDownQuantiles.Index].Value?.ToString() ?? DefPar.Value.NA; int quant = -1; + + if (squant != DefPar.Value.NA && (!int.TryParse(squant, out quant) || quant <= 0)) + { errors += $"Breakdown (row {iRow + 1}): {squant} is not a valid number of quantiles" + Environment.NewLine; } + + Breakdowns.TypeBreakDown tb = new Breakdowns.TypeBreakDown(var); + if (!Breakdowns.STD_CATS.ContainsKey(var)) // if this is not a default category + { + List> values = row.Tag as List>; + foreach (var val in values) tb.items.Add(new Breakdowns.BreakDownItem() { value = val.Item1, title = val.Item2 }); + tb.rowTitle = row.Cells[colBreakDownTitle.Index].Value?.ToString() ?? string.Empty; + tb.quantiles = quant; + tb.equivalised = Convert.ToBoolean(row.Cells[colBreakDownEquiv.Index].Value); + } + bds.Add(tb); } if (!bds.Any()) errors = "At least one valid breakdown definition is required."; if (!string.IsNullOrEmpty(errors.Trim())) { MessageBox.Show(errors.Trim()); return; } + + foreach (Settings.TextBoxInfo tbi in checkFields.Values) + { + bool failed = false; + if (tbi.textbox == txt21DistributionalTaxpayersBeneficiaries && string.IsNullOrEmpty(tbi.textbox.Text)) + { + MessageBox.Show("Taxpayers/Beneficiaries must not be empty."); + failed = true; + } + else if ((tbi.textbox == txt24Tax || tbi.textbox == txt24TaxBase) && string.IsNullOrEmpty(tbi.textbox.Text)) + { + MessageBox.Show("Taxliability and -base must not be empty."); + failed = true; + } + else if ((tbi.textbox == txt278Sensitivity) && string.IsNullOrEmpty(tbi.textbox.Text)) + { + MessageBox.Show("Sensitivity must not be empty."); + failed = true; + } + else if (tbi.startsWithComparer.HasValue ? + !Settings.IsValidFormula(tbi.textbox.Text, tbi.isFilter, out errors, tbi.startsWithComparer.Value) : + !Settings.IsValidFormula(tbi.textbox.Text, tbi.isFilter, out errors)) + { + MessageBox.Show($"Invalid formula '{tbi.textbox.Text}' at TextBox '{tbi.textbox.Name}'" + Environment.NewLine + errors + Environment.NewLine + "Please fix it before saving the settings."); + failed = true; + } + if (failed) + { + tbi.textbox.Focus(); + tbi.textbox.SelectAll(); + return; + } + } + foreach (Settings.DataGridViewInfo dgvi in checkGridViews.Values) + { + foreach (DataGridViewRow row in dgvi.dgv.Rows) + { + foreach (DataGridViewCell cell in row.Cells) + { + bool failed = false; + if (dgvi.startsWithComparer.HasValue ? + !Settings.IsValidFormula(cell.Value.ToString(), dgvi.isFilter, out errors, dgvi.startsWithComparer.Value) : + !Settings.IsValidFormula(cell.Value.ToString(), dgvi.isFilter, out errors)) + { + MessageBox.Show($"Invalid formula '{cell.Value.ToString()}' at GridView '{dgvi.dgv.Name}'" + Environment.NewLine + errors + Environment.NewLine + "Please fix it before saving the settings."); + failed = true; + } + if (failed) + { + dgvi.dgv.CurrentCell = cell; + gridBreakDown.BeginEdit(true); + return; + } + } + } + } settings.userSettingsDistributional.breakDowns = bds; settings.userSettingsDistributional.table21_AnalysisObjects = AnalysisObjectsToSettings(grid21AnalysisObjects); settings.userSettingsDistributional.table21_CalculationLevel = combo21Level.Text; @@ -841,47 +858,57 @@ private void btnAnaAddRow_Click(object sender, EventArgs e) private void btnBreakDownAddRow_Click(object sender, EventArgs e) { - new UserSettings.BreakDown().ToGrid(gridBreakDown); + int r = gridBreakDown.Rows.Add(string.Empty, string.Empty, false, "n/a", ""); + gridBreakDown.Rows[r].Tag = new List>(); GetGrid(sender).CurrentCell = gridBreakDown.Rows[gridBreakDown.Rows.Count-1].Cells[0]; gridBreakDown.BeginEdit(true); } private void btnDelRow_Click(object sender, EventArgs e) { - if (GetGrid(sender).SelectedRows.Count <= 0) return; + DataGridView dgv = GetGrid(sender); + if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0) return; + DataGridViewRow selectedRow = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : dgv.SelectedCells[0].OwningRow; if (!(sender as Button).Name.Contains("BreakDown") && // for breakdown there is a check in btnOk_Click - !string.IsNullOrEmpty(GetGrid(sender).SelectedRows[0].Cells[0].Value?.ToString())) // empty rows can be always deleted + !string.IsNullOrEmpty(selectedRow.Cells[0].Value?.ToString())) // empty rows can be always deleted { - int notEmpty = 0; foreach (DataGridViewRow row in GetGrid(sender).Rows) if (!string.IsNullOrEmpty(row.Cells[0].Value?.ToString())) ++notEmpty; + int notEmpty = 0; foreach (DataGridViewRow row in dgv.Rows) if (!string.IsNullOrEmpty(row.Cells[0].Value?.ToString())) ++notEmpty; if (notEmpty <= 1) { MessageBox.Show("At least one non-empty variable/formula definition is required."); return; } } - GetGrid(sender).Rows.Remove(GetGrid(sender).SelectedRows[0]); + dgv.Rows.Remove(selectedRow); } private void btnMoveUp_Click(object sender, EventArgs e) { - if (GetGrid(sender).SelectedRows.Count == 0) return; - int iSelRow = GetGrid(sender).Rows.IndexOf(GetGrid(sender).SelectedRows[0]); if (iSelRow == 0) return; - List rowContent = new List(); foreach (DataGridViewCell cell in GetGrid(sender).SelectedRows[0].Cells) rowContent.Add(cell.Value); - GetGrid(sender).Rows.Insert(iSelRow - 1, rowContent.ToArray()); GetGrid(sender).Rows.RemoveAt(iSelRow + 1); - GetGrid(sender).ClearSelection(); GetGrid(sender).Rows[iSelRow - 1].Selected = true; + DataGridView dgv = GetGrid(sender); + if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0) return; + DataGridViewRow row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : dgv.SelectedCells[0].OwningRow; + int iSelRow = dgv.Rows.IndexOf(row); if (iSelRow == 0) return; + List rowContent = new List(); foreach (DataGridViewCell cell in row.Cells) rowContent.Add(cell.Value); + dgv.Rows.Insert(iSelRow - 1, rowContent.ToArray()); dgv.Rows.RemoveAt(iSelRow + 1); + dgv.ClearSelection(); dgv.Rows[iSelRow - 1].Cells[0].Selected = true; } private void btnMoveDown_Click(object sender, EventArgs e) { - if (GetGrid(sender).SelectedRows.Count == 0) return; - int iSelRow = GetGrid(sender).Rows.IndexOf(GetGrid(sender).SelectedRows[0]); if (iSelRow == GetGrid(sender).Rows.Count - 1) return; - List rowContent = new List(); foreach (DataGridViewCell cell in GetGrid(sender).SelectedRows[0].Cells) rowContent.Add(cell.Value); - GetGrid(sender).Rows.RemoveAt(iSelRow); GetGrid(sender).Rows.Insert(iSelRow + 1, rowContent.ToArray()); - GetGrid(sender).ClearSelection(); GetGrid(sender).Rows[iSelRow + 1].Selected = true; + DataGridView dgv = GetGrid(sender); + if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0) return; + DataGridViewRow row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : dgv.SelectedCells[0].OwningRow; + int iSelRow = dgv.Rows.IndexOf(row); if (iSelRow == dgv.Rows.Count - 1) return; + List rowContent = new List(); foreach (DataGridViewCell cell in row.Cells) rowContent.Add(cell.Value); + dgv.Rows.RemoveAt(iSelRow); dgv.Rows.Insert(iSelRow + 1, rowContent.ToArray()); + dgv.ClearSelection(); dgv.Rows[iSelRow + 1].Cells[0].Selected = true; } private void gridBreakDown_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex != colBreakDownValueDescEdit.Index || e.RowIndex < 0) return; - CategoryDescriptionsForm form = new CategoryDescriptionsForm(gridBreakDown.Rows[e.RowIndex].Tag as Dictionary); + string v = gridBreakDown.Rows[e.RowIndex].Cells[colBreakDownVariable.Name].Value.ToString(); + CategoryDescriptionsForm form = Breakdowns.STD_CATS.ContainsKey(v) ? + new CategoryDescriptionsForm(gridBreakDown.Rows[e.RowIndex].Tag as List>, true, Breakdowns.STD_CATS[v].isValued) : + new CategoryDescriptionsForm(gridBreakDown.Rows[e.RowIndex].Tag as List>); if (form.ShowDialog() != DialogResult.OK) return; - gridBreakDown.Rows[e.RowIndex].Tag = form.GetDescriptions(); - gridBreakDown.Rows[e.RowIndex].Cells[colBreakDownValueDesc.Index].Value = CategoryDescriptionsForm.DicToString(form.GetDescriptions()); + gridBreakDown.Rows[e.RowIndex].Tag = form.GetDescriptionsList(); + gridBreakDown.Rows[e.RowIndex].Cells[colBreakDownValueDesc.Index].Value = CategoryDescriptionsForm.DicToString(form.GetDescriptionsDictionary()); } private void btnReset_Click(object sender, EventArgs e) @@ -892,57 +919,63 @@ private void btnReset_Click(object sender, EventArgs e) private void txtTargetPopulation_Validating(object sender, System.ComponentModel.CancelEventArgs e) { - if (sender as TextBox != null && !Settings.IsValidFormula((sender as TextBox).Text, true)) e.Cancel = true; + TextBox textBox = sender as TextBox; + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, true)); + } private void txt21DistributionalTaxpayersBeneficiaries_Validating(object sender, System.ComponentModel.CancelEventArgs e) { - if (string.IsNullOrEmpty((sender as TextBox)?.Text)) { MessageBox.Show("Taxpayers/Beneficiaries must not be empty."); e.Cancel = true; return; } - if (!Settings.IsValidFormula((sender as TextBox).Text, true, true)) e.Cancel = true; + TextBox textBox = sender as TextBox; + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, true, true)); } private void txtTaxAndBase_Validating(object sender, System.ComponentModel.CancelEventArgs e) { - if (string.IsNullOrEmpty((sender as TextBox)?.Text)) { MessageBox.Show("Taxliability and -base must not be empty."); e.Cancel = true; return; } - if (!Settings.IsValidFormula((sender as TextBox).Text, false)) e.Cancel = true; + TextBox textBox = sender as TextBox; + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, false)); } private void txt278Sensitivity_Validating(object sender, System.ComponentModel.CancelEventArgs e) { - if (string.IsNullOrEmpty(txt278Sensitivity.Text)) { MessageBox.Show("Sensitivity must not be empty."); e.Cancel = true; return; } - if (!Settings.IsValidFormula(txt278Sensitivity.Text, false)) e.Cancel = true; + TextBox textBox = sender as TextBox; + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, false)); } private void gridAnalysisObjects_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { + DataGridView dgv = sender as DataGridView; if (e.RowIndex >= 0 && e.ColumnIndex == 0 && // grids have only one column - !Settings.IsValidFormula(e.FormattedValue?.ToString(), false)) e.Cancel = true; - } - - private void gridBreakDown_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) - { - if (e.RowIndex < 0 || e.ColumnIndex != colBreakDownVariable.Index) return; - if (string.IsNullOrEmpty(e.FormattedValue?.ToString())) - { - MessageBox.Show("Breakdown variable must not be empty."); - e.Cancel = true; return; - } - if (FormulaEditor.ContainsSeparator(e.FormattedValue.ToString())) - { - MessageBox.Show($"{e.FormattedValue}: breakdown variable does not allow for formulas."); - e.Cancel = true; return; - } - if (e.FormattedValue.ToString().Trim().EndsWith(Settings.BASELINE_MARKER)) - { - MessageBox.Show($"{e.FormattedValue}: breakdown is always based on baseline variables, thus '{Settings.BASELINE_MARKER}' does not make sense."); - e.Cancel = true; return; - } + !checkGridViews.ContainsKey(dgv.Name)) checkGridViews.Add(dgv.Name, new Settings.DataGridViewInfo(dgv, false)); } private void SettingsDistributional_Load(object sender, EventArgs e) { //preselect the only choice in the disabled combo combo26Level.SelectedIndex = 0; + if (settings != null) checkFields.Clear(); + } + + private void gridBreakDown_CellValidated(object sender, DataGridViewCellEventArgs e) + { + DataGridViewCell cell = (sender as DataGridView).CurrentCell; + if (cell.OwningColumn == colBreakDownVariable) + { + string v = cell.Value.ToString(); + if (Breakdowns.STD_CATS.ContainsKey(v)) + { + cell.OwningRow.Cells[colBreakDownValueDesc.Name].Value = Breakdowns.STD_CATS[v].GetValueStringFromDefinitions(); + cell.OwningRow.Cells[colBreakDownEquiv.Name].Value = Breakdowns.STD_CATS[v].equivalised; + cell.OwningRow.Cells[colBreakDownQuantiles.Name].Value = Breakdowns.STD_CATS[v].quantiles < 0 ? DefPar.Value.NA : Breakdowns.STD_CATS[v].quantiles.ToString(); + cell.OwningRow.Cells[colBreakDownTitle.Name].Value = Breakdowns.STD_CATS[v].rowTitle; + cell.OwningRow.Tag = Breakdowns.STD_CATS[v].GetValueListFromDefinitions(); + } + } + } } } diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.resx b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.resx similarity index 100% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsDistributional.resx rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsDistributional.resx diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs index efc86d9..ffd9a10 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.Designer.cs @@ -1,4 +1,4 @@ -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { partial class SettingsFiscal { @@ -366,6 +366,7 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gridDisCon.BackgroundColor = System.Drawing.SystemColors.Control; + this.gridDisCon.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -393,10 +394,9 @@ private void InitializeComponent() this.gridDisCon.DefaultCellStyle = dataGridViewCellStyle2; this.gridDisCon.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.gridDisCon.Location = new System.Drawing.Point(4, 29); - this.gridDisCon.MultiSelect = false; this.gridDisCon.Name = "gridDisCon"; this.gridDisCon.RowHeadersVisible = false; - this.gridDisCon.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.gridDisCon.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.gridDisCon.Size = new System.Drawing.Size(776, 209); this.gridDisCon.TabIndex = 75; this.gridDisCon.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridDisCon_CellValidating); @@ -533,6 +533,7 @@ private void InitializeComponent() this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Settings Fiscal"; + this.Load += new System.EventHandler(this.SettingsFiscal_Load); this.group12.ResumeLayout(false); this.group12.PerformLayout(); this.group11.ResumeLayout(false); diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.cs similarity index 89% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.cs index 4b7082a..ada668a 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.cs @@ -1,4 +1,5 @@ -using EM_Statistics; +using EM_Common; +using EM_Statistics; using System; using System.Collections.Generic; using System.Linq; @@ -6,7 +7,7 @@ using System.Xml; using System.Xml.Linq; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal partial class SettingsFiscal : Form, ISettings { @@ -158,6 +159,10 @@ void WriteDisaggregatedConcepts() internal void WriteMetadata(TemplateApi templateApi, List inactiveTablesAndPages) { + if (!inactiveTablesAndPages.Contains(tableName_RevenueExpenditure)) + { + Settings.AddMetaDataHeaderRow(templateApi, pageName_Fiscal, tableTitle_RevenueExpenditure); + } if (!inactiveTablesAndPages.Contains(tableName_FiscalTaxpayersBeneficiaries)) { Settings.AddMetaDataHeaderRow(templateApi, pageName_Fiscal, tableTitle_FiscalTaxpayersBeneficiaries); @@ -183,6 +188,9 @@ internal void WriteMetadata(TemplateApi templateApi, List inactiveTables } private Settings settings = null; + internal Dictionary checkFields = new Dictionary(); + internal Dictionary checkGridViews = new Dictionary(); + internal SettingsFiscal() { @@ -205,8 +213,8 @@ void ISettings.ModifyTemplate(TemplateApi templateApi, out List(); - foreach (string il in new List { SystemInfo.ILS_EARNS, SystemInfo.ILS_TAX, SystemInfo.ILS_SICCT, SystemInfo.ILS_SICDY, SystemInfo.ILS_SICER, - SystemInfo.ILS_PEN, SystemInfo.ILS_BENMT, SystemInfo.ILS_BENNT }) + foreach (string il in new List { InDepthDefinitions.ILS_EARNS, InDepthDefinitions.ILS_TAX, InDepthDefinitions.ILS_SICCT, InDepthDefinitions.ILS_SICDY, InDepthDefinitions.ILS_SICER, + InDepthDefinitions.ILS_PEN, InDepthDefinitions.ILS_BENMT, InDepthDefinitions.ILS_BENNT }) { ModifyTemplate_RevenueExpenditure(templateApi, il, out List ssv); systemSpecificVars.AddRange(ssv); @@ -251,12 +259,12 @@ void ISettings.ModifyTemplate(TemplateApi templateApi, out List(); - foreach (string il in new List { SystemInfo.ILS_EARNS, SystemInfo.ILS_TAX, SystemInfo.ILS_SICCT, SystemInfo.ILS_SICDY, SystemInfo.ILS_SICER }) + foreach (string il in new List { InDepthDefinitions.ILS_EARNS, InDepthDefinitions.ILS_TAX, InDepthDefinitions.ILS_SICCT, InDepthDefinitions.ILS_SICDY, InDepthDefinitions.ILS_SICER }) { ModifyTemplate_TaxpayersBeneficiaries(templateApi, il, taxpayersCondition, taxpayersConditionParameters, out List ssv); systemSpecificVars.AddRange(ssv); } - foreach (string il in new List { SystemInfo.ILS_PEN, SystemInfo.ILS_BENMT, SystemInfo.ILS_BENNT }) + foreach (string il in new List { InDepthDefinitions.ILS_PEN, InDepthDefinitions.ILS_BENMT, InDepthDefinitions.ILS_BENNT }) { ModifyTemplate_TaxpayersBeneficiaries(templateApi, il, beneficiariesCondition, beneficiariesConditionParameters, out List ssv); systemSpecificVars.AddRange(ssv); @@ -587,28 +595,79 @@ private void btnDisConAddRow_Click(object sender, EventArgs e) private void btnDisConDelRow_Click(object sender, EventArgs e) { if (gridDisCon.SelectedRows.Count > 0) gridDisCon.Rows.Remove(gridDisCon.SelectedRows[0]); + else if (gridDisCon.SelectedCells.Count > 0) gridDisCon.Rows.Remove(gridDisCon.SelectedCells[0].OwningRow); } private void btnDisConMoveUp_Click(object sender, EventArgs e) { - if (gridDisCon.SelectedRows.Count == 0) return; - int iSelRow = gridDisCon.Rows.IndexOf(gridDisCon.SelectedRows[0]); if (iSelRow == 0) return; - List rowContent = new List(); foreach (DataGridViewCell cell in gridDisCon.SelectedRows[0].Cells) rowContent.Add(cell.Value); + if (gridDisCon.SelectedRows.Count == 0 && gridDisCon.SelectedCells.Count == 0) return; + DataGridViewRow row = gridDisCon.SelectedRows.Count > 0 ? gridDisCon.SelectedRows[0] : gridDisCon.SelectedCells[0].OwningRow; + int iSelRow = gridDisCon.Rows.IndexOf(row); if (iSelRow == 0) return; + List rowContent = new List(); foreach (DataGridViewCell cell in row.Cells) rowContent.Add(cell.Value); gridDisCon.Rows.Insert(iSelRow - 1, rowContent.ToArray()); gridDisCon.Rows.RemoveAt(iSelRow + 1); - gridDisCon.ClearSelection(); gridDisCon.Rows[iSelRow - 1].Selected = true; + gridDisCon.ClearSelection(); gridDisCon.Rows[iSelRow - 1].Cells[0].Selected = true; } private void btnDisConMoveDown_Click(object sender, EventArgs e) { - if (gridDisCon.SelectedRows.Count == 0) return; - int iSelRow = gridDisCon.Rows.IndexOf(gridDisCon.SelectedRows[0]); if (iSelRow == gridDisCon.Rows.Count - 1) return; - List rowContent = new List(); foreach (DataGridViewCell cell in gridDisCon.SelectedRows[0].Cells) rowContent.Add(cell.Value); + if (gridDisCon.SelectedRows.Count == 0 && gridDisCon.SelectedCells.Count == 0) return; + DataGridViewRow row = gridDisCon.SelectedRows.Count > 0 ? gridDisCon.SelectedRows[0] : gridDisCon.SelectedCells[0].OwningRow; + int iSelRow = gridDisCon.Rows.IndexOf(row); if (iSelRow == gridDisCon.Rows.Count - 1) return; + List rowContent = new List(); foreach (DataGridViewCell cell in row.Cells) rowContent.Add(cell.Value); gridDisCon.Rows.RemoveAt(iSelRow); gridDisCon.Rows.Insert(iSelRow + 1, rowContent.ToArray()); - gridDisCon.ClearSelection(); gridDisCon.Rows[iSelRow + 1].Selected = true; + gridDisCon.ClearSelection(); gridDisCon.Rows[iSelRow - 1].Cells[0].Selected = true; } private void btnOK_Click(object sender, EventArgs e) { + string errors; + foreach (Settings.TextBoxInfo tbi in checkFields.Values) + { + bool failed = false; + if ((tbi.textbox == txtTaxpayers || tbi.textbox == txtBeneficiaries) && string.IsNullOrEmpty(tbi.textbox?.Text)) + { + MessageBox.Show($"Please indicate a condition for {(tbi.textbox == txtTaxpayers ? "Taxpayers" : "Beneficiaries")}"); + failed = true; + } + else if (tbi.startsWithComparer.HasValue ? + !Settings.IsValidFormula(tbi.textbox.Text, tbi.isFilter, out errors, tbi.startsWithComparer.Value) : + !Settings.IsValidFormula(tbi.textbox.Text, tbi.isFilter, out errors)) + { + MessageBox.Show($"Invalid formula '{tbi.textbox.Text}' at TextBox '{tbi.textbox.Name}'" + Environment.NewLine + errors + Environment.NewLine + "Please fix it before saving the settings."); + failed = true; + } + if (failed) + { + tbi.textbox.Focus(); + tbi.textbox.SelectAll(); + return; + } + } + foreach (DataGridViewRow row in gridDisCon.Rows) + foreach (DataGridViewCell cell in row.Cells) + { + bool failed = false; + bool isFormula = cell.ColumnIndex == colDisConFormula.Index || cell.ColumnIndex == colDisConFormulaFilter.Index || cell.ColumnIndex == colDisConTaxpayersBeneficiaries.Index; + bool isFilter = cell.ColumnIndex == colDisConFormulaFilter.Index || cell.ColumnIndex == colDisConTaxpayersBeneficiaries.Index; + bool startsWithComparer = cell.ColumnIndex == colDisConTaxpayersBeneficiaries.Index; + if ((cell.ColumnIndex == colDisConFormula.Index || cell.ColumnIndex == colDisConTaxpayersBeneficiaries.Index) && string.IsNullOrEmpty(cell.FormattedValue?.ToString())) + { + MessageBox.Show($"{(cell.ColumnIndex == colDisConFormula.Index ? "Variable/Formula" : "Payers/Receivers")} must not be empty."); + failed = true; + } + else if (isFormula && !Settings.IsValidFormula(cell.FormattedValue?.ToString(), isFilter, out errors, startsWithComparer)) + { + MessageBox.Show($"Invalid formula '{cell.Value.ToString()}' at GridView '{gridDisCon.Name}'" + Environment.NewLine + errors + Environment.NewLine + "Please fix it before saving the settings."); + failed = true; + } + if (failed) + { + gridDisCon.CurrentCell = cell; + gridDisCon.BeginEdit(true); + return; + } + } + settings.userSettingsFiscal.pageTitle_Fiscal = txtPageTitleFiscal.Text; settings.userSettingsFiscal.tableTitle_RevenueExpenditure = txtTableTitleRevenueExpenditure.Text; settings.userSettingsFiscal.tableTitle_FiscalTaxpayersBeneficiaries = txtTableTitleFiscalTaxpayersBeneficiaries.Text; @@ -634,25 +693,18 @@ private void btnReset_Click(object sender, EventArgs e) // see comment SettingsD private void txtTaxpayersBeneficiaries_Validating(object sender, System.ComponentModel.CancelEventArgs e) { TextBox textBox = sender as TextBox; - if (string.IsNullOrEmpty(textBox?.Text)) - { - MessageBox.Show($"Please indicate a condition for {(textBox == txtTaxpayers ? "Taxpayers" : "Beneficiaries")}"); - e.Cancel = true; - } - else e.Cancel = !Settings.IsValidFormula(textBox.Text, true, true); + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, true, true)); } private void gridDisCon_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (e.RowIndex < 0) return; - if (string.IsNullOrEmpty(e.FormattedValue?.ToString()) && (e.ColumnIndex == colDisConFormula.Index || e.ColumnIndex == colDisConTaxpayersBeneficiaries.Index)) - { - MessageBox.Show($"{(e.ColumnIndex == colDisConFormula.Index ? "Variable/Formula" : "Taxpayers/Beneficiaries")} must not be empty."); e.Cancel = true; return; - } - bool isFormula = e.ColumnIndex == colDisConFormula.Index || e.ColumnIndex == colDisConFormulaFilter.Index || e.ColumnIndex == colDisConTaxpayersBeneficiaries.Index; - bool isFilter = e.ColumnIndex == colDisConFormulaFilter.Index || e.ColumnIndex == colDisConTaxpayersBeneficiaries.Index; - bool startsWithComparer = e.ColumnIndex == colDisConTaxpayersBeneficiaries.Index; - if (isFormula && !Settings.IsValidFormula(e.FormattedValue?.ToString(), isFilter, startsWithComparer)) e.Cancel = true; + } + + private void SettingsFiscal_Load(object sender, EventArgs e) + { + if (settings != null) checkFields.Clear(); } } } diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.resx b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.resx similarity index 100% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsFiscal.resx rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsFiscal.resx diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs similarity index 99% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs index c0ae278..9743f5e 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.Designer.cs @@ -1,4 +1,4 @@ -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { partial class SettingsInequalityAndPoverty { @@ -557,6 +557,7 @@ private void InitializeComponent() this.grid3134IncDef.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.grid3134IncDef.BackgroundColor = System.Drawing.SystemColors.Control; + this.grid3134IncDef.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -579,10 +580,9 @@ private void InitializeComponent() this.grid3134IncDef.DefaultCellStyle = dataGridViewCellStyle2; this.grid3134IncDef.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.grid3134IncDef.Location = new System.Drawing.Point(7, 43); - this.grid3134IncDef.MultiSelect = false; this.grid3134IncDef.Name = "grid3134IncDef"; this.grid3134IncDef.RowHeadersVisible = false; - this.grid3134IncDef.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.grid3134IncDef.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.grid3134IncDef.Size = new System.Drawing.Size(585, 97); this.grid3134IncDef.TabIndex = 48; this.grid3134IncDef.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridCell_FormulaValidating); @@ -642,7 +642,7 @@ private void InitializeComponent() this.group356AROPCalculationType.Size = new System.Drawing.Size(163, 36); this.group356AROPCalculationType.TabIndex = 66; this.group356AROPCalculationType.TabStop = false; - this.group356AROPCalculationType.Text = "AROP calculation type"; + this.group356AROPCalculationType.Text = "AROP gap calculation type"; // // radio356AropCalcTypeMedian // @@ -883,6 +883,7 @@ private void InitializeComponent() this.grid334PovLines.AllowUserToAddRows = false; this.grid334PovLines.AllowUserToDeleteRows = false; this.grid334PovLines.BackgroundColor = System.Drawing.SystemColors.Control; + this.grid334PovLines.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -899,10 +900,9 @@ private void InitializeComponent() this.grid334PovLines.DefaultCellStyle = dataGridViewCellStyle5; this.grid334PovLines.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.grid334PovLines.Location = new System.Drawing.Point(76, 58); - this.grid334PovLines.MultiSelect = false; this.grid334PovLines.Name = "grid334PovLines"; this.grid334PovLines.RowHeadersVisible = false; - this.grid334PovLines.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.grid334PovLines.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.grid334PovLines.Size = new System.Drawing.Size(212, 89); this.grid334PovLines.TabIndex = 67; this.grid334PovLines.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.gridPovLine_CellValidating); @@ -1064,6 +1064,7 @@ private void InitializeComponent() this.gridBreakDown.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gridBreakDown.BackgroundColor = System.Drawing.SystemColors.Control; + this.gridBreakDown.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText; dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -1087,13 +1088,13 @@ private void InitializeComponent() this.gridBreakDown.DefaultCellStyle = dataGridViewCellStyle7; this.gridBreakDown.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; this.gridBreakDown.Location = new System.Drawing.Point(211, 75); - this.gridBreakDown.MultiSelect = false; this.gridBreakDown.Name = "gridBreakDown"; this.gridBreakDown.RowHeadersVisible = false; - this.gridBreakDown.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.gridBreakDown.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.CellSelect; this.gridBreakDown.Size = new System.Drawing.Size(382, 81); this.gridBreakDown.TabIndex = 85; this.gridBreakDown.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridBreakDown_CellContentClick); + this.gridBreakDown.CellValidated += new System.Windows.Forms.DataGridViewCellEventHandler(this.gridBreakDown_CellValidated); // // colBreakDownVariable // diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs similarity index 78% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs index 7798f37..d6bf0f3 100644 --- a/EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.cs @@ -1,6 +1,7 @@ using EM_Common; using EM_Statistics; using System; +using System.Globalization; using System.Collections.Generic; using System.ComponentModel; using System.Linq; @@ -8,7 +9,7 @@ using System.Xml; using System.Xml.Linq; -namespace InDepthAnalysis +namespace EM_Statistics.InDepthAnalysis { internal partial class SettingsInequalityAndPoverty : Form, ISettings { @@ -95,6 +96,7 @@ internal static PovertyLine FromXml(XElement xElement, out string warnings) } return new PovertyLine(_value, _isRelative, _isAnchored); } + internal void ToXml(XmlWriter xmlWriter, bool byType) { xmlWriter.WriteStartElement(byType ? XMLTAG_TABLE356_POVERTY_LINE : XMLTAG_TABLE334_POVERTY_LINE); @@ -108,7 +110,7 @@ internal static bool FromGrid(DataGridViewRow row, out PovertyLine povertyLine) { povertyLine = null; if (row.Cells[0].Value == null || string.IsNullOrEmpty(row.Cells[0].Value.ToString())) return true; string pl = row.Cells[0].Value.ToString(); pl.Trim(); if (pl.EndsWith("%")) pl = pl.Substring(0, pl.Length - 1); pl.TrimEnd(); - if (!double.TryParse(pl, out double v) || v < 0) { MessageBox.Show($"{row.Cells[0].Value.ToString()} is not a valid poverty line."); return false; } + if (!double.TryParse(pl, out double v) || v < 0) { MessageBox.Show($"{row.Cells[0].Value.ToString()} is not a valid poverty line."); row.DataGridView.CurrentCell = row.Cells[0]; row.DataGridView.BeginEdit(true); return false; } povertyLine = new PovertyLine(v, row.Cells[1].Value.ToString() != COMBO_ITEM_ABSOLUTE, row.Cells[1].Value.ToString() != COMBO_ITEM_RELATIVE_FLOATING); return true; @@ -157,144 +159,6 @@ internal void ToXml(XmlWriter xmlWriter) } } - internal class TypeBreakDown - { - private const string XMLTAG_VARIABLE = "Variable"; - private const string XMLTAG_VALUE_DESCRIPTION = "ValueDescription"; - private const string XMLTAG_VALUE = "Value"; - private const string XMLTAG_TEXT = "Text"; - - internal TypeBreakDown(string _variable) { variable = _variable; valueDescriptions = new Dictionary(); } - - internal static TypeBreakDown FromXml(XElement xElement, out string warnings) - { - warnings = string.Empty; TypeBreakDown breakDown = new TypeBreakDown(STD_HH_CAT); - foreach (XElement xe in xElement.Elements()) - { - if (xe.Value == null) continue; - switch (Settings.GetXEleName(xe)) - { - case XMLTAG_VARIABLE: breakDown.variable = xe.Value; break; - case XMLTAG_VALUE_DESCRIPTION + "s": - foreach (XElement xeVd in xe.Elements()) - { - if (xeVd.Value == null) continue; double value = 0; string text = string.Empty; - foreach (XElement xeValDesc in xeVd.Elements()) - { - switch (Settings.GetXEleName(xeValDesc)) - { - case XMLTAG_VALUE: if (double.TryParse(xeValDesc.Value, out double d)) value = d; break; - case XMLTAG_TEXT: text = xeValDesc.Value; break; - default: warnings += $"Unknown setting {Settings.GetXEleName(xeValDesc)} is ignored." + Environment.NewLine; break; - } - } - if (!breakDown.valueDescriptions.ContainsKey(value)) breakDown.valueDescriptions.Add(value, text); - } - break; - default: warnings += $"Unknown setting {Settings.GetXEleName(xe)} is ignored." + Environment.NewLine; break; - } - } - return breakDown; - } - - internal void ToXml(XmlWriter xmlWriter) - { - xmlWriter.WriteStartElement(XMLTAG_TABLE356_TYPE_BREAK_DOWN); - Settings.WriteElement(xmlWriter, XMLTAG_VARIABLE, variable); - xmlWriter.WriteStartElement(XMLTAG_VALUE_DESCRIPTION + "s"); - foreach (var vd in valueDescriptions) - { - xmlWriter.WriteStartElement(XMLTAG_VALUE_DESCRIPTION); - Settings.WriteElement(xmlWriter, XMLTAG_VALUE, vd.Key.ToString()); - Settings.WriteElement(xmlWriter, XMLTAG_TEXT, vd.Value); - xmlWriter.WriteEndElement(); - } - xmlWriter.WriteEndElement(); - xmlWriter.WriteEndElement(); - } - - internal const string STD_HH_CAT = "Standard_HH_Categories"; - private static string varNumChildren = Settings.MakeOutVarName("numChildren"), - varNumAdults = Settings.MakeOutVarName("numAdults"), - varNumSeniors = Settings.MakeOutVarName("numSeniors"); - private static Dictionary> STD_HH_CAT_DEFINITIONS = new Dictionary>() - { - { 1, new Tuple("One adult <65, no children", - $"{Settings.DATA_VAR(varNumChildren)} == 0 && {Settings.DATA_VAR(varNumAdults)} == 1 && {Settings.DATA_VAR(varNumSeniors)} == 0") }, - { 10, new Tuple("One adult ≥65, no children", - $"{Settings.DATA_VAR(varNumChildren)} == 0 && {Settings.DATA_VAR(varNumAdults)} == 1 && {Settings.DATA_VAR(varNumSeniors)} > 0") }, - { 100, new Tuple("One adult with children", - $"{Settings.DATA_VAR(varNumChildren)} > 0 && {Settings.DATA_VAR(varNumAdults)} == 1") }, - { 1000, new Tuple("Two adults, <65, no children", - $"{Settings.DATA_VAR(varNumChildren)} == 0 && {Settings.DATA_VAR(varNumAdults)} == 2 && {Settings.DATA_VAR(varNumSeniors)} == 0") }, - { 10000, new Tuple("Two adults, at least one ≥65, no children", - $"{Settings.DATA_VAR(varNumChildren)} == 0 && {Settings.DATA_VAR(varNumAdults)} == 2 && {Settings.DATA_VAR(varNumSeniors)} > 0") }, - { 100000, new Tuple("Two adults with one child", - $"{Settings.DATA_VAR(varNumChildren)} == 1 && {Settings.DATA_VAR(varNumAdults)} == 2") }, - { 1000000, new Tuple("Two adults with two children", - $"{Settings.DATA_VAR(varNumChildren)} == 2 && {Settings.DATA_VAR(varNumAdults)} == 2") }, - { 10000000, new Tuple("Two adults with three or more children", - $"{Settings.DATA_VAR(varNumChildren)} >= 3 && {Settings.DATA_VAR(varNumAdults)} == 2") }, - { 100000000, new Tuple("Three or more adults, no children", - $"{Settings.DATA_VAR(varNumChildren)} == 0 && {Settings.DATA_VAR(varNumAdults)} >= 3") }, - { 1000000000, new Tuple("Three or more adults with children", - $"{Settings.DATA_VAR(varNumChildren)} > 0 && {Settings.DATA_VAR(varNumAdults)} >= 3") }, - { 10000000000, new Tuple("No adults (only persons <18)", - $"{Settings.DATA_VAR(varNumAdults)} == 0") } - }; - internal static Dictionary STD_HH_CAT_VALUES - { - get - { - Dictionary hcv = new Dictionary(); - foreach (var v in STD_HH_CAT_DEFINITIONS) hcv.Add(v.Key, v.Value.Item1); - return hcv; - } - } - - internal static void CreateStdHHCatVar(TemplateApi templateApi) - { - foreach (var x in new[] { new { ageCond = "<18", outvar = varNumChildren }, - new { ageCond = ">=18", outvar = varNumAdults }, - new { ageCond = ">=65", outvar = varNumSeniors } }) - { - string actionId = Settings.MakeId(), isAgeGroupVar = Settings.MakeOutVarName("ageGroup"); - if (!templateApi.ModifyPageActions(new Template.Action() { name = actionId, - calculationType = HardDefinitions.CalculationType.CreateFlag, outputVar = isAgeGroupVar }, - pageName_InequalityAndPoverty)) { CreateVar("0"); return; }; - if (!templateApi.ModifyFilter_PageAction(new Template.Filter() { formulaString = Settings.DATA_VAR(HardDefinitions.age) + x.ageCond }, - pageName_InequalityAndPoverty, actionId)) { CreateVar("0"); return; }; - if (!templateApi.ModifyPageActions(new Template.Action() { calculationType = HardDefinitions.CalculationType.CreateGroupValue, - _calculationLevel = HardDefinitions.DefaultCalculationLevels.HOUSEHOLD, outputVar = x.outvar, - parameters = new List() { - new Template.Parameter() { name = EM_TemplateCalculator.PAR_SUMVAR, variableName = isAgeGroupVar }, - new Template.Parameter() { name = EM_TemplateCalculator.PAR_COPY_TO_INDIVIDUALS, boolValue = true } } }, - pageName_InequalityAndPoverty)) { CreateVar("0"); return; }; - } - - List vars = new List(); - foreach (var hhCatDefs in STD_HH_CAT_DEFINITIONS) - { - string var = $"{STD_HH_CAT}{hhCatDefs.Key}"; string actionId = Settings.MakeId(); - if (!templateApi.ModifyPageActions(new Template.Action() { name = actionId, - calculationType = HardDefinitions.CalculationType.CreateFlag, outputVar = var }, - pageName_InequalityAndPoverty)) continue; - if (templateApi.ModifyFilter_PageAction(new Template.Filter() { formulaString = hhCatDefs.Value.Item2 }, - pageName_InequalityAndPoverty, actionId)) vars.Add($"{Settings.DATA_VAR(var)} * {hhCatDefs.Key}"); - } - CreateVar(string.Join("+", vars)); - - void CreateVar(string formula) - { - templateApi.ModifyPageActions(new Template.Action() { calculationType = HardDefinitions.CalculationType.CreateArithmetic, - formulaString = formula, outputVar = STD_HH_CAT }, pageName_InequalityAndPoverty); - } - } - - internal string variable = string.Empty; - internal Dictionary valueDescriptions = new Dictionary(); - } - internal string pageTitle_InequalityAndPoverty = "3. Inequality and Poverty"; internal string tableTitle_Inequality = "3.1. Inequality and redistributive effect of the tax-benefit system"; internal string tableTitle_Progressivity = "3.2. Progressivity and redistributive effect"; @@ -309,8 +173,8 @@ void CreateVar(string formula) internal int table31_InterDecRatioBottom = 1; internal double table31_AtkinsonInequalityAversion = 0.25; - internal string table32_GrossIncome = $"{Settings.DATA_VAR(SystemInfo.ILS_ORIGY)} + {Settings.DATA_VAR(SystemInfo.ILS_BEN)}"; - internal string table32_NetIncome = $"{Settings.DATA_VAR(SystemInfo.ILS_DISPY)}"; + internal string table32_GrossIncome = $"{Settings.DATA_VAR(InDepthDefinitions.ILS_ORIGY)} + {Settings.DATA_VAR(InDepthDefinitions.ILS_BEN)}"; + internal string table32_NetIncome = $"{Settings.DATA_VAR(InDepthDefinitions.ILS_DISPY)}"; internal List table334_PovertyLines = new List() { @@ -318,18 +182,24 @@ void CreateVar(string formula) new PovertyLine(50, true, true), new PovertyLine(60, true, true), }; - internal List table356_TypeBreakDowns = new List() { - new TypeBreakDown(TypeBreakDown.STD_HH_CAT) { valueDescriptions = TypeBreakDown.STD_HH_CAT_VALUES } }; + + internal List table356_TypeBreakDowns = new List() { + new Breakdowns.TypeBreakDown(Breakdowns.STD_LABOUR_CAT), + new Breakdowns.TypeBreakDown(Breakdowns.STD_HH_CAT), + new Breakdowns.TypeBreakDown(Breakdowns.STD_GENDER_CAT), + new Breakdowns.TypeBreakDown(Breakdowns.STD_AGE_CAT) + }; + internal PovertyLine table356_PovertyLine = new PovertyLine(60.0, true, true); internal bool table346_AropCalcTypeFGT = true; - internal string table3134_OrigY = SystemInfo.ILS_ORIGY; + internal string table3134_OrigY = InDepthDefinitions.ILS_ORIGY; internal string table3134_OrigY_RowTitle = "A = original income"; internal List table3134_IncomeDefinitions = new List() { - new IncomeDefinition($"- {Settings.DATA_VAR(SystemInfo.ILS_TAX)} - {Settings.DATA_VAR(SystemInfo.ILS_SICDY)}", "B = A - taxes and social insurance contributions (EQ_INC23)"), - new IncomeDefinition($"+ {Settings.DATA_VAR(SystemInfo.ILS_PEN)}", "C = B + pensions (EQ_INC22)"), - new IncomeDefinition($"+ {Settings.DATA_VAR(SystemInfo.ILS_BENMT)} + {Settings.DATA_VAR(SystemInfo.ILS_BENNT)}", "D = C + other benefits (disposable income, EQ_INC20)") + new IncomeDefinition($"- {Settings.DATA_VAR(InDepthDefinitions.ILS_TAX)} - {Settings.DATA_VAR(InDepthDefinitions.ILS_SICDY)}", "B = A - taxes and social insurance contributions (EQ_INC23)"), + new IncomeDefinition($"+ {Settings.DATA_VAR(InDepthDefinitions.ILS_PEN)}", "C = B + pensions (EQ_INC22)"), + new IncomeDefinition($"+ {Settings.DATA_VAR(InDepthDefinitions.ILS_BENMT)} + {Settings.DATA_VAR(InDepthDefinitions.ILS_BENNT)}", "D = C + other benefits (disposable income, EQ_INC20)") }; internal void FromXml(XElement xElement, out string warnings) @@ -381,7 +251,7 @@ internal void FromXml(XElement xElement, out string warnings) table356_TypeBreakDowns.Clear(); foreach (XElement xetbd in xe.Elements()) { - table356_TypeBreakDowns.Add(TypeBreakDown.FromXml(xetbd, out string wtbd)); + table356_TypeBreakDowns.Add(Breakdowns.TypeBreakDown.FromXml(xetbd, out string wtbd)); warnings += wtbd; } break; @@ -421,7 +291,7 @@ internal void ToXml(XmlWriter xmlWriter) xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement(XMLTAG_TABLE356_TYPE_BREAK_DOWN + "s"); - foreach (TypeBreakDown tbd in table356_TypeBreakDowns) tbd.ToXml(xmlWriter); + foreach (Breakdowns.TypeBreakDown tbd in table356_TypeBreakDowns) tbd.ToXml(xmlWriter, XMLTAG_TABLE356_TYPE_BREAK_DOWN); xmlWriter.WriteEndElement(); } @@ -445,7 +315,7 @@ internal void WriteMetadata(TemplateApi templateApi, List inactiveTables Settings.AddMetaDataHeaderRow(templateApi, pageName_InequalityAndPoverty, tableTitle_AropRates + "
    " + tableTitle_AropGap); foreach (PovertyLine pl in table334_PovertyLines) AddPovertyLineRow(pl); } - if (!inactiveTablesAndPages.Contains(tableTitle_AropRatesByType) || !inactiveTablesAndPages.Contains(tableName_AropGapByType)) + if (!inactiveTablesAndPages.Contains(tableName_AropRatesByType) || !inactiveTablesAndPages.Contains(tableName_AropGapByType)) { Settings.AddMetaDataHeaderRow(templateApi, pageName_InequalityAndPoverty, tableTitle_AropRatesByType + "
    " + tableTitle_AropGapByType); AddPovertyLineRow(table356_PovertyLine); @@ -464,12 +334,15 @@ void AddPovertyLineRow(PovertyLine pl) { Settings.AddMetaDataRow(templateApi, pageName_InequalityAndPoverty, $"{(pl.isAnchored || !pl.isRelative ? "Anchored" : "Floating")} poverty line", - pl.isRelative ? $"{pl.value.ToString()} %" : pl.value.ToString("N")); + pl.isRelative ? $"{pl.value.ToString(CultureInfo.InvariantCulture)} %" : pl.value.ToString("N")); } } } private Settings settings = null; + internal Dictionary checkFields = new Dictionary(); + internal Dictionary checkGridViews = new Dictionary(); + internal SettingsInequalityAndPoverty() { @@ -674,18 +547,23 @@ private void ModifyTemplate_Table33456(TemplateApi templateApi, List() { new Template.Parameter() { name = "Median", variableName = povertyLine.isAnchored ? varName_Median_eq_DispY_Anchored : varName_Median_eq_DispY_Floating }, @@ -736,21 +614,34 @@ void GeneratePoorFlag(UserSettings.PovertyLine povertyLine, string incomeVar) } void GenerateIncomeDefRow(UserSettings.PovertyLine povertyLine, string tableName, - UserSettings.IncomeDefinition incomeDefinition, UserSettings.TypeBreakDown breakDown = null) + UserSettings.IncomeDefinition incomeDefinition, Breakdowns.TypeBreakDown breakDown = null) { bool calcGap = tableName.ToLower().Contains("gap"), byType = breakDown != null; - string rowIdByType = Settings.MakeId(); - if (byType && !templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowIdByType, title = string.Empty, - forEachValueOf = byType ? breakDown.variable : null, forEachValueMaxCount = Settings.FOREACH_VALUE_OF_MAX_COUNT, - forEachValueDescriptions = byType ? breakDown.valueDescriptions : null }, - pageName_InequalityAndPoverty, tableName, TemplateApi.ModifyMode.AddNew)) return; - + List rowIdByType = new List(); + if (byType && breakDown != null && Breakdowns.STD_CATS.ContainsKey(breakDown.name) && !Breakdowns.STD_CATS[breakDown.name].isValued) + { + foreach (Breakdowns.BreakDownItem br in Breakdowns.STD_CATS[breakDown.name].items) + { + rowIdByType.Add(Settings.MakeId()); + if (!templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowIdByType.Last(), title = br.title, + cellAction = new Template.Action() { filter = new Template.Filter() { formulaString = br.filter }}}, + pageName_InequalityAndPoverty, tableName, TemplateApi.ModifyMode.AddNew)) return; + } + } + else + { + rowIdByType.Add(Settings.MakeId()); + if (byType && !templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowIdByType.Last(), title = string.Empty, + forEachValueOf = byType ? breakDown.variable : null, forEachValueMaxCount = Settings.FOREACH_VALUE_OF_MAX_COUNT, + forEachValueDescriptions = byType ? breakDown.GetValueDictionaryFromDefinitions() : null }, + pageName_InequalityAndPoverty, tableName, TemplateApi.ModifyMode.AddNew)) return; + } string rowId = Settings.MakeId(); if (!templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowId, title = incomeDefinition == null ? "All" : incomeDefinition.rowTitle, hasSeparatorBefore = byType }, pageName_InequalityAndPoverty, tableName, TemplateApi.ModifyMode.AddNew, - byType ? TemplateApi.AddWhere.After : TemplateApi.AddWhere.Appropriate, byType ? rowIdByType : null)) return; + byType ? TemplateApi.AddWhere.After : TemplateApi.AddWhere.Appropriate, byType ? rowIdByType.Last() : null)) return; List parameters = new List(); if (calcGap) @@ -764,7 +655,9 @@ void GenerateIncomeDefRow(UserSettings.PovertyLine povertyLine, string tableName else parameters.Add(new Template.Parameter() { name = parName_Poor, variableName = GetPoorFlagVar(povertyLine, incomeDefinition == null ? varName_eq_ils_dispy : incomeDefinition.id) }); - foreach (string rId in byType ? new List() { rowId, rowIdByType } : new List() { rowId }) + List allIDs = new List() { rowId }; + if (byType) allIDs.AddRange(rowIdByType.ToList()); + foreach (string rId in allIDs) { templateApi.ModifyCellAction_Row(new Template.Action() { parameters = parameters }, pageName_InequalityAndPoverty, tableName, rId); @@ -815,10 +708,11 @@ void UpdateControls() grid334PovLines.Rows.Clear(); foreach (UserSettings.PovertyLine pl in settings.userSettingsInequalityAndPoverty.table334_PovertyLines) pl.ToGrid(grid334PovLines); gridBreakDown.Rows.Clear(); - foreach (UserSettings.TypeBreakDown tbd in settings.userSettingsInequalityAndPoverty.table356_TypeBreakDowns) + foreach (Breakdowns.TypeBreakDown tbd in settings.userSettingsInequalityAndPoverty.table356_TypeBreakDowns) { - int r = gridBreakDown.Rows.Add(tbd.variable, CategoryDescriptionsForm.DicToString(tbd.valueDescriptions)); - gridBreakDown.Rows[r].Tag = tbd.valueDescriptions; + bool isDef = Breakdowns.STD_CATS.ContainsKey(tbd.name); + int r = gridBreakDown.Rows.Add(isDef ? tbd.name : tbd.variable, (isDef ? Breakdowns.STD_CATS[tbd.name] : tbd).GetValueStringFromDefinitions()); + gridBreakDown.Rows[r].Tag = (isDef ? Breakdowns.STD_CATS[tbd.name] : tbd).GetValueListFromDefinitions(); } grid356PovLine.Rows.Clear(); settings.userSettingsInequalityAndPoverty.table356_PovertyLine.ToGrid(grid356PovLine); txt3134OrigY.Text = FormulaEditor.Remove_DATA_VAR(settings.userSettingsInequalityAndPoverty.table3134_OrigY); @@ -832,6 +726,82 @@ void UpdateControls() private void btnOK_Click(object sender, EventArgs e) { + foreach (Settings.TextBoxInfo tbi in checkFields.Values) + { + bool failed = false; + if (tbi.textbox == txt32GrossIncome || tbi.textbox == txt32NetIncome || tbi.textbox == txt3134OrigY) + { + if (string.IsNullOrEmpty(tbi.textbox.Text?.ToString())) + { + MessageBox.Show("Field must not be empty."); + failed = true; + } + else if (!Settings.IsValidFormula(tbi.textbox.Text, false)) + { + MessageBox.Show("Value must be a valid formula."); + failed = true; + } + } + else if (tbi.textbox == txt31AtkinsonInequalityAversion) + { + if (string.IsNullOrEmpty(tbi.textbox.Text?.ToString())) + { + MessageBox.Show("Field must not be empty."); + failed = true; + } + else if (!double.TryParse(tbi.textbox.Text, out _)) + { + MessageBox.Show("Value must be a double."); + failed = true; + } + } + if (failed) + { + tbi.textbox.Focus(); + tbi.textbox.SelectAll(); + return; + } + } + + foreach (Settings.DataGridViewInfo dgvi in checkGridViews.Values) + { + foreach (DataGridViewRow row in dgvi.dgv.Rows) + { + foreach (DataGridViewCell cell in row.Cells) + { + bool failed = false; + if ((dgvi.dgv == grid356PovLine || dgvi.dgv == grid334PovLines) && cell.ColumnIndex == 0) + { + if (string.IsNullOrEmpty(cell.FormattedValue?.ToString()) || + !double.TryParse(cell.FormattedValue.ToString(), out double pl) || pl < 0) + { + MessageBox.Show("This is not a valid poverty line."); + failed = true; + } + } + else if (dgvi.dgv == grid3134IncDef && cell.ColumnIndex == colAddToPrevious.Index) + { + if (string.IsNullOrEmpty(cell.FormattedValue?.ToString())) + { + MessageBox.Show("Add to previous must not be empty."); + failed = true; + } + else if (!Settings.IsValidFormula(cell.FormattedValue?.ToString().TrimStart(new char[] { '+' }), false)) + { + MessageBox.Show("Invalid formula."); + failed = true; + } + } + if (failed) + { + dgvi.dgv.CurrentCell = cell; + dgvi.dgv.BeginEdit(true); + return; + } + } + } + } + settings.userSettingsInequalityAndPoverty.pageTitle_InequalityAndPoverty = txtPageTitleInequalityAndPoverty?.Text; settings.userSettingsInequalityAndPoverty.tableTitle_Inequality = txtTableTitle31?.Text; settings.userSettingsInequalityAndPoverty.tableTitle_Progressivity = txtTableTitle32?.Text; @@ -859,9 +829,14 @@ private void btnOK_Click(object sender, EventArgs e) foreach (DataGridViewRow row in gridBreakDown.Rows) { if (string.IsNullOrEmpty(row.Cells[colBreakDownVariable.Index].Value?.ToString())) continue; - settings.userSettingsInequalityAndPoverty.table356_TypeBreakDowns.Add( - new UserSettings.TypeBreakDown(row.Cells[colBreakDownVariable.Index].Value.ToString()) - { valueDescriptions = row.Tag as Dictionary }); + string v = row.Cells[colBreakDownVariable.Index].Value.ToString(); + Breakdowns.TypeBreakDown tb = new Breakdowns.TypeBreakDown(row.Cells[colBreakDownVariable.Index].Value.ToString()); + if (!Breakdowns.STD_CATS.ContainsKey(v)) // if this is not a default category + { + List> values = row.Tag as List>; + foreach (var val in values) tb.items.Add(new Breakdowns.BreakDownItem() { value = val.Item1, title = val.Item2 }); + } + settings.userSettingsInequalityAndPoverty.table356_TypeBreakDowns.Add(tb); } if (!UserSettings.PovertyLine.FromGrid(grid356PovLine.Rows[0], out UserSettings.PovertyLine pl356)) return; @@ -878,12 +853,6 @@ private void btnOK_Click(object sender, EventArgs e) DialogResult = DialogResult.OK; Close(); } - private void txtPovertyLine_Validating(object sender, CancelEventArgs e) - { - TextBox tb = sender as TextBox; - e.Cancel = string.IsNullOrEmpty(tb.Text) || !double.TryParse(tb.Text, out _); - } - private void btnGridIncAddRow_Click(object sender, EventArgs e) { int i = grid3134IncDef.Rows.Add(string.Empty, string.Empty); @@ -899,7 +868,7 @@ private void btnGridPovAddRow_Click(object sender, EventArgs e) private void btnBreakDownAddRow_Click(object sender, EventArgs e) { int i = gridBreakDown.Rows.Add(string.Empty, string.Empty); - gridBreakDown.Rows[i].Tag = new Dictionary(); + gridBreakDown.Rows[i].Tag = new List>(); gridBreakDown.CurrentCell = gridBreakDown.Rows[i].Cells[0]; gridBreakDown.BeginEdit(true); } @@ -913,51 +882,58 @@ private DataGridView GetGrid(object senderButton) private void btnGridDelRow_Click(object sender, EventArgs e) { - if (!(sender as Button).Name.Contains("Inc") && - !string.IsNullOrEmpty(GetGrid(sender).SelectedRows[0].Cells[0].Value?.ToString())) // empty rows can be always deleted) + DataGridView dgv = GetGrid(sender); + if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0) return; + DataGridViewRow selectedRow = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : dgv.SelectedCells[0].OwningRow; + if (!(sender as Button).Name.Contains("Inc") && // for breakdown there is a check in btnOk_Click + !string.IsNullOrEmpty(selectedRow.Cells[0].Value?.ToString())) // empty rows can be always deleted { - int notEmpty = 0; foreach (DataGridViewRow row in GetGrid(sender).Rows) if (!string.IsNullOrEmpty(row.Cells[0].Value?.ToString())) ++notEmpty; + int notEmpty = 0; foreach (DataGridViewRow row in dgv.Rows) if (!string.IsNullOrEmpty(row.Cells[0].Value?.ToString())) ++notEmpty; if (notEmpty <= 1) { MessageBox.Show("At least one non-empty definition is required."); return; } } - if (GetGrid(sender).SelectedRows.Count > 0) GetGrid(sender).Rows.Remove(GetGrid(sender).SelectedRows[0]); + dgv.Rows.Remove(selectedRow); + } private void btnGridMoveUp_Click(object sender, EventArgs e) { - if (GetGrid(sender).SelectedRows.Count == 0) return; - int iSelRow = GetGrid(sender).Rows.IndexOf(GetGrid(sender).SelectedRows[0]); if (iSelRow == 0) return; - List rowContent = new List(); foreach (DataGridViewCell cell in GetGrid(sender).SelectedRows[0].Cells) rowContent.Add(cell.Value); - GetGrid(sender).Rows.Insert(iSelRow - 1, rowContent.ToArray()); GetGrid(sender).Rows.RemoveAt(iSelRow + 1); - GetGrid(sender).ClearSelection(); GetGrid(sender).Rows[iSelRow - 1].Selected = true; + DataGridView dgv = GetGrid(sender); + if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0) return; + DataGridViewRow row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : dgv.SelectedCells[0].OwningRow; + int iSelRow = dgv.Rows.IndexOf(row); if (iSelRow == 0) return; + List rowContent = new List(); foreach (DataGridViewCell cell in row.Cells) rowContent.Add(cell.Value); + dgv.Rows.Insert(iSelRow - 1, rowContent.ToArray()); dgv.Rows.RemoveAt(iSelRow + 1); + dgv.ClearSelection(); dgv.Rows[iSelRow - 1].Cells[0].Selected = true; } private void btnGridMoveDown_Click(object sender, EventArgs e) { - if (GetGrid(sender) == null) return; - if (GetGrid(sender).SelectedRows.Count == 0) return; - int iSelRow = GetGrid(sender).Rows.IndexOf(GetGrid(sender).SelectedRows[0]); if (iSelRow == GetGrid(sender).Rows.Count - 1) return; - List rowContent = new List(); foreach (DataGridViewCell cell in GetGrid(sender).SelectedRows[0].Cells) rowContent.Add(cell.Value); - GetGrid(sender).Rows.RemoveAt(iSelRow); GetGrid(sender).Rows.Insert(iSelRow + 1, rowContent.ToArray()); - GetGrid(sender).ClearSelection(); GetGrid(sender).Rows[iSelRow + 1].Selected = true; + DataGridView dgv = GetGrid(sender); + if (dgv.SelectedRows.Count == 0 && dgv.SelectedCells.Count == 0) return; + DataGridViewRow row = dgv.SelectedRows.Count > 0 ? dgv.SelectedRows[0] : dgv.SelectedCells[0].OwningRow; + int iSelRow = dgv.Rows.IndexOf(row); if (iSelRow == dgv.Rows.Count - 1) return; + List rowContent = new List(); foreach (DataGridViewCell cell in row.Cells) rowContent.Add(cell.Value); + dgv.Rows.RemoveAt(iSelRow); dgv.Rows.Insert(iSelRow + 1, rowContent.ToArray()); + dgv.ClearSelection(); dgv.Rows[iSelRow + 1].Cells[0].Selected = true; } private void gridBreakDown_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex != colBreakDownValueDescEdit.Index || e.RowIndex < 0) return; - CategoryDescriptionsForm form = new CategoryDescriptionsForm(gridBreakDown.Rows[e.RowIndex].Tag as Dictionary); + string v = gridBreakDown.Rows[e.RowIndex].Cells[colBreakDownVariable.Name].Value.ToString(); + CategoryDescriptionsForm form = Breakdowns.STD_CATS.ContainsKey(v)? + new CategoryDescriptionsForm(gridBreakDown.Rows[e.RowIndex].Tag as List>, true, Breakdowns.STD_CATS[v].isValued) : + new CategoryDescriptionsForm(gridBreakDown.Rows[e.RowIndex].Tag as List>); if (form.ShowDialog() != DialogResult.OK) return; - gridBreakDown.Rows[e.RowIndex].Tag = form.GetDescriptions(); - gridBreakDown.Rows[e.RowIndex].Cells[colBreakDownValueDesc.Index].Value = CategoryDescriptionsForm.DicToString(form.GetDescriptions()); + gridBreakDown.Rows[e.RowIndex].Tag = form.GetDescriptionsList(); + gridBreakDown.Rows[e.RowIndex].Cells[colBreakDownValueDesc.Index].Value = CategoryDescriptionsForm.DicToString(form.GetDescriptionsDictionary()); } private void gridPovLine_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { - if (e.ColumnIndex != 0 || e.RowIndex < 0) return; - if (string.IsNullOrEmpty(e.FormattedValue?.ToString()) || - !double.TryParse(e.FormattedValue.ToString(), out double v) || v < 0) - { - MessageBox.Show("This is not a valid poverty line."); e.Cancel = true; - } + DataGridView dgv = sender as DataGridView; + if (e.RowIndex >= 0 && e.ColumnIndex == 0 && // grids have only one column + !checkGridViews.ContainsKey(dgv.Name)) checkGridViews.Add(dgv.Name, new Settings.DataGridViewInfo(dgv, false)); } private void btnReset_Click(object sender, EventArgs e) // see comment SettingsDistributional.btnReset_Click @@ -968,23 +944,38 @@ private void btnReset_Click(object sender, EventArgs e) // see comment SettingsD private void txt31AtkinsonInequalityAversion_Validating(object sender, CancelEventArgs e) { - if (string.IsNullOrEmpty(txt31AtkinsonInequalityAversion.Text?.ToString())) - { MessageBox.Show("Field must not be empty."); e.Cancel = true; return; } - if (string.IsNullOrEmpty(txt31AtkinsonInequalityAversion.Text) || !double.TryParse(txt31AtkinsonInequalityAversion.Text, out _)) - e.Cancel = true; + TextBox textBox = sender as TextBox; + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, true, true)); } private void textBox_FormulaValidating(object sender, CancelEventArgs e) { - if (string.IsNullOrEmpty((sender as TextBox)?.Text?.ToString())) { MessageBox.Show("Field must not be empty."); e.Cancel = true; return; } - if (!Settings.IsValidFormula((sender as TextBox).Text, false)) e.Cancel = true; + TextBox textBox = sender as TextBox; + if (textBox == null) return; + if (!checkFields.ContainsKey(textBox.Name)) checkFields.Add(textBox.Name, new Settings.TextBoxInfo(textBox, true, true)); } private void gridCell_FormulaValidating(object sender, DataGridViewCellValidatingEventArgs e) { - if (e.RowIndex < 0 || e.ColumnIndex != colAddToPrevious.Index) return; - if (string.IsNullOrEmpty(e.FormattedValue?.ToString())) { MessageBox.Show("Add to previous must not be empty."); e.Cancel = true; return; } - if (!Settings.IsValidFormula(e.FormattedValue?.ToString().TrimStart(new char[] { '+' }), false)) e.Cancel = true; + DataGridView dgv = sender as DataGridView; + if (e.RowIndex >= 0 && e.ColumnIndex == 0 && // grids have only one column + !checkGridViews.ContainsKey(dgv.Name)) checkGridViews.Add(dgv.Name, new Settings.DataGridViewInfo(dgv, false)); + } + + private void gridBreakDown_CellValidated(object sender, DataGridViewCellEventArgs e) + { + DataGridViewCell cell = (sender as DataGridView).CurrentCell; + if (cell.OwningColumn == colBreakDownVariable) + { + string v = cell.Value.ToString(); + if (Breakdowns.STD_CATS.ContainsKey(v)) + { + cell.OwningRow.Cells[colBreakDownValueDesc.Name].Value = Breakdowns.STD_CATS[v].GetValueStringFromDefinitions(); + cell.OwningRow.Tag = Breakdowns.STD_CATS[v].GetValueListFromDefinitions(); + } + } + } } } diff --git a/EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.resx b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.resx similarity index 100% rename from EM_Plugins/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.resx rename to EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsInequalityAndPoverty.resx diff --git a/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsMacrovalidation.cs b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsMacrovalidation.cs new file mode 100644 index 0000000..d46b74e --- /dev/null +++ b/EM_Libraries/EM_Statistics/InDepthAnalysis/Settings/SettingsMacrovalidation.cs @@ -0,0 +1,910 @@ +using EM_Common; +using EM_Statistics; +using System; +using System.IO; +using System.Globalization; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using EM_Statistics.ExternalStatistics; + +namespace EM_Statistics.InDepthAnalysis +{ + + public class ExternalStatisticsGlobal + { + public Dictionary AllCountries = new Dictionary(); + } + + public class ExternalStatisticsCountry + { + public Dictionary AllIncomeVariables = new Dictionary(); + } + + public class ExternalStatisticsIncomeVariable + { + // The key of each dictionary will be: incomelist_varname_year, and the value will be the value + internal string incomelist = string.Empty; + internal string varName = string.Empty; + internal string description = string.Empty; + internal Dictionary amounts; + internal Dictionary beneficiaries; + internal Dictionary level; + internal string source; + internal string comments; + internal string destination = string.Empty; + + // Country XML + internal bool? baselineSubstract = false; + internal List reformsSubstract = new List(); + internal Dictionary exists = new Dictionary(); // this should supposedly read from Country XML + + public string GetAmount(string key) + { + if (amounts.ContainsKey(key)) return amounts[key]; + else return null; + } + + } + + + + + public class SettingsMacrovalidation + { + //Page 1 + string page1Name = "Table A3.1"; + string tableName_OriginalIncomeTaxpayersBeneficiaries = "OriginalIncomeTaxpayersBeneficiaries"; + string tableName_OriginalIncomeSourcesAndComments = "OriginalIncomeSourcesAndComments"; + + //Page 2 + string page2Name = "Table A3.2"; + string tableName_OriginalIncomeAmounts = "OriginalIncomeAmounts"; + + //Page 3 + string page3Name = "Table A3.3"; + string tableName_TaxesSICPayers = "TaxesSICPayers"; + string tableName_TaxesSICPayersSourcesAndComments = "TaxesSICPayersSourcesAndComment"; + + //Page 4 + string page4Name = "Table A3.4"; + string tableName_TaxesSICAmounts = "TaxesSICAmounts"; + + //Page 5 + string page5Name = "Table A3.5"; + string tableName_BenefitsRecipients = "BenefitsRecipients"; + string tableName_BenefitsRecipientsSourcesAndComments = "BenefitsRecipientsSourcesAndComment"; + + //Page 6 + string page6Name = "Table A3.6"; + string tableName_BenefitsAmounts = "BenefitsAmounts"; + + //Page 7 + string page7Name = "Table A3.7"; + string tableName_DistributionalInequality = "DistributionalInequality"; + + //Page 8 + string page8Name = "Table A3.8"; + string tableName_DistributionalPoverty = "DistributionalPoverty"; + + //Page 9 + string page9Name = "Metadata"; + string tableName_Metadata = "Metadata"; + + + //Common constants for all tables + private const string colName_Baseline = "Baseline"; + private const string colName_External = "External"; + private const string colName_Comments = "Comments"; + private const string colName_Source = "Source"; + private const string colName_PercentageDifference = "PercentageDifference"; + private const string colName_SILCValue = "SILCValue"; + private const string colName_SILCRatio = "SILCRatio"; + private const string colName_Simulated = "Simulated"; + private const string simulated_Ending = "_s"; + + // template columns that will be duplicated for each file + readonly string[] baseCols = { colName_Baseline, colName_External, colName_PercentageDifference, colName_SILCValue, colName_SILCRatio }; + + public Settings settings = null; + + + public SettingsMacrovalidation() { } + + public void getSystemNamesAndYears(out List systemNames, out List systemYears) + { + systemNames = new List(); + systemYears = new List(); + + + //First, let's get a list of all systems names + foreach (BaselineReformPackage baselineReformPackage in settings.baselineReformPackages) + { + if(baselineReformPackage.baseline != null && baselineReformPackage.baseline.systemInfo != null && !string.IsNullOrEmpty(baselineReformPackage.baseline.systemInfo.systemName)) + { + if(!systemNames.Contains(baselineReformPackage.baseline.systemInfo.systemName)) systemNames.Add(baselineReformPackage.baseline.systemInfo.systemName); + } + + if (baselineReformPackage.reforms != null && baselineReformPackage.reforms.Count > 0) + { + List reforms = baselineReformPackage.reforms; + + foreach (BaselineReformPackage.BaselineOrReform reform in reforms) + { + if(reform.systemInfo != null && reform.systemInfo.systemName != null && !string.IsNullOrEmpty(reform.systemInfo.systemName)) + { + systemNames.Add(reform.systemInfo.systemName); + } + } + } + } + + //Once we have all the system names, we need the system years + foreach (string systemName in systemNames) + { + string [] nameYear = systemName.Split('_'); + + if(nameYear.Length == 2) + { + int year = -1; + try { year = int.Parse(nameYear[1]); } catch(Exception){ } + if (year!= -1) + { + systemYears.Add(year); + } + } + } + + systemYears.Sort(); + } + + public void ModifyTemplate(TemplateApi templateApi, out List systemSpecificVars, Dictionary> yearsAndFiles, Dictionary> allIncomelists, + Dictionary amounts, Dictionary beneficiaries, Dictionary level, Dictionary source, Dictionary comments, Dictionary destination, Dictionary> inequality, Dictionary> poverty) + { + systemSpecificVars = new List(); + + // read system info + List systemYears = new List(); + List systemNames = new List(); + + foreach (string year in yearsAndFiles.Keys.ToList()) + { + int y = int.Parse(year); + if (!systemYears.Contains(y)) systemYears.Add(y); + foreach (string fileName in yearsAndFiles[year]) + { + // FIND A WAY TO CONSISTENTLY READ THE SYSTEM NAME FROM A COMMON FUNCTION THAT UNDERSTANDS THE LOG! + string systemName = Path.GetFileNameWithoutExtension(fileName); + if (systemName.EndsWith("_std")) systemName = systemName.Substring(0, systemName.Length - 4); + if (!systemNames.Contains(systemName)) systemNames.Add(systemName); + } + } + + + + //GetAllSysILComposition(); + + //Page 1 - Table 1 + foreach (string il in new List { InDepthDefinitions.ILS_EARNS, InDepthDefinitions.OtherOriginalIncome }) + { + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page1Name, tableName_OriginalIncomeTaxpayersBeneficiaries, systemYears, systemNames, il, beneficiaries, level, destination, out List ssv, false, false, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page1Name, tableName_OriginalIncomeTaxpayersBeneficiaries, systemYears, systemNames, InDepthDefinitions.ILS_EXTSTAT_OTHER, beneficiaries, level, destination, out List ssv1, false, false, allIncomelists); + systemSpecificVars.AddRange(ssv1); + + //Page 1 - Table 2: Sources and acomments + foreach (string il in new List { InDepthDefinitions.ILS_EARNS, InDepthDefinitions.OtherOriginalIncome }) + { + ModifyTemplate_SourcesAndComments(templateApi, page1Name, tableName_OriginalIncomeSourcesAndComments, systemYears, il, source, comments, destination, out List ssv, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_SourcesAndComments(templateApi, page1Name, tableName_OriginalIncomeSourcesAndComments, systemYears, InDepthDefinitions.ILS_EXTSTAT_OTHER, source, comments, destination, out List ssv2, allIncomelists); + systemSpecificVars.AddRange(ssv2); + //Page 2: Original income in EUROMOD - Annual amounts (millions) + //Page 2 - Table 1 + foreach (string il in new List { InDepthDefinitions.ILS_EARNS, InDepthDefinitions.OtherOriginalIncome }) + { + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page2Name, tableName_OriginalIncomeAmounts, systemYears, systemNames, il, amounts, level, destination, out List ssv, true, false, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page2Name, tableName_OriginalIncomeAmounts, systemYears, systemNames, InDepthDefinitions.ILS_EXTSTAT_OTHER, amounts, level, destination, out List ssv3, true, false, allIncomelists); + systemSpecificVars.AddRange(ssv3); + + + //Page 3: Taxes and SIC - Number of payers (thousands) + foreach (string il in new List { InDepthDefinitions.ILS_TAX, InDepthDefinitions.ILS_SICEE, InDepthDefinitions.ILS_SICSE, InDepthDefinitions.ILS_SICER, InDepthDefinitions.ILS_SICCT, InDepthDefinitions.ILS_SICOT }) + { + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page3Name, tableName_TaxesSICPayers, systemYears, systemNames, il, beneficiaries, level, destination, out List ssv, false, true, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page3Name, tableName_TaxesSICPayers, systemYears, systemNames, InDepthDefinitions.ILS_EXTSTAT_OTHER, beneficiaries, level, destination, out List ssv4, false, true, allIncomelists); + systemSpecificVars.AddRange(ssv4); + + //Page 3 - Table 2: Sources and acomments + foreach (string il in new List { InDepthDefinitions.ILS_TAX, InDepthDefinitions.ILS_SICEE, InDepthDefinitions.ILS_SICSE, InDepthDefinitions.ILS_SICER, InDepthDefinitions.ILS_SICCT, InDepthDefinitions.ILS_SICOT }) + { + ModifyTemplate_SourcesAndComments(templateApi, page3Name, tableName_TaxesSICPayersSourcesAndComments, systemYears, il, source, comments, destination, out List ssv, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_SourcesAndComments(templateApi, page3Name, tableName_TaxesSICPayersSourcesAndComments, systemYears, InDepthDefinitions.ILS_EXTSTAT_OTHER, source, comments, destination, out List ssv5, allIncomelists); + systemSpecificVars.AddRange(ssv5); + + //Page 4: Table A3.4. Taxes and SIC - Annual amounts (million EUR) + foreach (string il in new List { InDepthDefinitions.ILS_TAX, InDepthDefinitions.ILS_SICEE, InDepthDefinitions.ILS_SICSE, InDepthDefinitions.ILS_SICER, InDepthDefinitions.ILS_SICCT, InDepthDefinitions.ILS_SICOT }) + { + //ModifyTemplate_TaxesSICAmounts(templateApi, il, taxpayersCondition, taxpayersConditionParameters, out List ssv, systemYears, amounts); + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page4Name, tableName_TaxesSICAmounts, systemYears, systemNames, il, amounts, level, destination, out List ssv, true, true, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page4Name, tableName_TaxesSICAmounts, systemYears, systemNames, InDepthDefinitions.ILS_EXTSTAT_OTHER, amounts, level, destination, out List ssv6, true, true, allIncomelists); + systemSpecificVars.AddRange(ssv6); + + //Page 5: Table A3.5. Benefits - Number of recipients (thousands) + foreach (string il in new List { InDepthDefinitions.ILS_PEN, InDepthDefinitions.ILS_BENMT, InDepthDefinitions.ILS_BENNT }) + { + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page5Name, tableName_BenefitsRecipients, systemYears, systemNames, il, beneficiaries, level, destination, out List ssv, false, true, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page5Name, tableName_BenefitsRecipients, systemYears, systemNames, InDepthDefinitions.ILS_EXTSTAT_OTHER, beneficiaries, level, destination, out List ssv7, false, true, allIncomelists); + systemSpecificVars.AddRange(ssv7); + + //Page 5 - Table 2: Sources and acomments + foreach (string il in new List { InDepthDefinitions.ILS_PEN, InDepthDefinitions.ILS_BENMT, InDepthDefinitions.ILS_BENNT }) + { + ModifyTemplate_SourcesAndComments(templateApi, page5Name, tableName_BenefitsRecipientsSourcesAndComments, systemYears, il, source, comments, destination, out List ssv, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_SourcesAndComments(templateApi, page5Name, tableName_BenefitsRecipientsSourcesAndComments, systemYears, InDepthDefinitions.ILS_EXTSTAT_OTHER, source, comments, destination, out List ssv8, allIncomelists); + systemSpecificVars.AddRange(ssv8); + + //Page 6: Table A3.6. Benefits - Annual amounts (million EUR) + foreach (string il in new List { InDepthDefinitions.ILS_PEN, InDepthDefinitions.ILS_BENMT, InDepthDefinitions.ILS_BENNT }) + { + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page6Name, tableName_BenefitsAmounts, systemYears, systemNames, il, amounts, level, destination, out List ssv, true, true, allIncomelists); + systemSpecificVars.AddRange(ssv); + } + // add other + ModifyTemplate_BeneficiariesTaxpayersAmounts(templateApi, page6Name, tableName_BenefitsAmounts, systemYears, systemNames, InDepthDefinitions.ILS_EXTSTAT_OTHER, amounts, level, destination, out List ssv9, true, true, allIncomelists); + systemSpecificVars.AddRange(ssv9); + + //Page 7: Table A3.7. Distribution of equivalised disposable income + { + ModifyTemplate_Distributional(templateApi, page7Name, tableName_DistributionalInequality, systemYears, systemNames, inequality, out List ssv); + systemSpecificVars.AddRange(ssv); + } + + //Page 8: Table A3.8. At-risk-of-poverty rates (%) by gender and age + { + ModifyTemplate_Distributional(templateApi, page8Name, tableName_DistributionalPoverty, systemYears, systemNames, poverty, out List ssv); + systemSpecificVars.AddRange(ssv); + } + + //Page 9: Metadata + { + ModifyTemplate_Metadata(templateApi, page9Name, tableName_Metadata, systemYears); + }/**/ + } + + + private void ModifyTemplate_BeneficiariesTaxpayersAmounts(TemplateApi templateApi, string pageName, string tableName, + List systemYears, List systemNames, string incomelistName, Dictionary amounts, Dictionary levels, + Dictionary destination, out List sysSpecILFactors, bool isAmounts, bool doSILC, + Dictionary> allIncomelists) + { + string Magnitude = isAmounts ? " * 12 / 1000000" : " / 1000"; // in millions annually, or in thousands, for amounts and recievers respectively + sysSpecILFactors = new List(); + // First of all, read the variables for which we need to generate rows + List incomeListComponents = null; + + /* + foreach (string key in destination.Keys) + { + ILVarSummary ivs = new ILVarSummary(); + incomeListComponents.Add(ivs); + }/**/ + + if (incomelistName.Equals(InDepthDefinitions.OtherOriginalIncome)) //variable which are in ils_origy and not in ils_earns, for tables 1 and two + { + //List incomeListComponentsIlsOrigy = GetAllSysILCompositionMacrovalidation(InDepthDefinitions.ILS_ORIGY, destination); + //List incomeListComponentsIlsEarns = GetAllSysILCompositionMacrovalidation(InDepthDefinitions.ILS_EARNS, destination); + List incomeListComponentsIlsOrigy = allIncomelists[InDepthDefinitions.ILS_ORIGY].Values.ToList(); + List incomeListComponentsIlsEarns = allIncomelists[InDepthDefinitions.ILS_EARNS].Values.ToList(); + incomeListComponents = new List(); + + foreach (var ivs in incomeListComponentsIlsOrigy) + { + ILVarSummary summ = null; + summ = incomeListComponentsIlsEarns.Find(v => v.varName.Equals(ivs.varName)); + if (summ == null) + { + incomeListComponents.Add(ivs); + } + } + } + else + { + //incomeListComponents = GetAllSysILCompositionMacrovalidation(incomelistName, destination); + incomeListComponents = allIncomelists[incomelistName].Values.ToList(); + // add the filter with the user defined condition to the row referring the income-list (e.g. ils_tax) + // templateApi.ModifyCellFilter_Row(new Template.Filter() { formulaString = $"{Settings.DATA_VAR(incomelistName)}{condition}", parameters = conditionParameters }, + // pageName, mainTable, $"{mainTable}_{incomelistName}"); + } + + bool hasHidden = false; + for (int i = incomeListComponents.Count - 1; i >= 0; i--) + { + string x = incomeListComponents[i].destination; + if (x.Equals(InDepthDefinitions.DESTINATION_NONE) || !tableName.StartsWith(x, StringComparison.InvariantCultureIgnoreCase)) + { + hasHidden = true; + incomeListComponents.RemoveAt(i); + } + } + if (hasHidden) + { + Template.Page.Table.Row row = templateApi.GetRow(pageName, tableName, tableName + "_" + incomelistName); + if (row != null) row.title += " (NOTE: some components are hidden!)"; + } + // if this is ext_other, and there are no matches, delete the row and return + if (incomelistName.Equals(InDepthDefinitions.ILS_EXTSTAT_OTHER) && incomeListComponents.Count == 0) + { + templateApi.ModifyRows(new Template.Page.Table.Row() { name = $"{tableName}_{incomelistName}" }, pageName, tableName, TemplateApi.ModifyMode.Delete); + return; + } + + // Fix the incomelist name for external vars + string incomeListExt = incomelistName; + if (incomelistName.Equals(InDepthDefinitions.OtherOriginalIncome) || incomelistName.Equals(InDepthDefinitions.ILS_EARNS)) //variable which are in ils_origy and not in ils_earns + { + incomeListExt = InDepthDefinitions.ILS_ORIGY; + } + + // Then prepare the columns + foreach (string colName in baseCols) + { + int colNum = (colName == colName_External || colName == colName_SILCValue) ? systemYears.Count : systemNames.Count; + // if there is a known base column, copy it for all files, and make sure that only the first has a separator + Template.Page.Table.Column column = templateApi.GetColumn(pageName, tableName, colName); + if (column != null) + { + for (int i = 0; i < colNum; i++) + { + string ys = (colName == colName_External || colName == colName_SILCValue) ? systemYears[i].ToString() : systemNames[i]; + if (!templateApi.CopyColumn(pageName, tableName, colName, colName + ys, false, TemplateApi.AddWhere.Before)) + System.Windows.Forms.MessageBox.Show("Cannot copy column '" + (colName + ys) + "' in template"); + else + { + Template.Page.Table.Column col = templateApi.GetColumn(pageName, tableName, colName + ys); + col.hasSeparatorBefore = i == 0; + if (col.cellAction != null && col.cellAction.formulaString != null) + col.cellAction.formulaString = fixFormulaString(col.cellAction.formulaString, ys); + } + } + // finally, delete the template column + templateApi.ModifyColumns(column, pageName, tableName, TemplateApi.ModifyMode.Delete); + } + + // if there are base custom cells for this column, also multiply those and delete the base ones + List customCells = templateApi.GetCells(pageName, tableName, colName); + if (customCells.Count > 0) + { + foreach (Template.Page.Table.Cell cell in customCells) + { + for (int i = 0; i < colNum; i++) + { + string ys = (colName == colName_External || colName == colName_SILCValue) ? systemYears[i].ToString() : systemNames[i]; + string newCellName = Settings.MakeId(); + templateApi.CopyCell(pageName, tableName, cell, newCellName); + Template.Page.Table.Cell newCell = templateApi.GetCell(pageName, tableName, newCellName); + newCell.cellAction.formulaString = fixFormulaString(newCell.cellAction.formulaString, ys); + } + templateApi.ModifyCells(cell, pageName, tableName, TemplateApi.ModifyMode.Delete); + } + } + } + + // then fix the titles of known header columns + for (int i = 0; i < systemNames.Count; i++) + { + // we give baseline a multiNo number, so that it takes its data from that file + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_Baseline + systemNames[i], title = "Baseline values
    " + systemNames[i], multiNo = i.ToString() }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + // we don't need multiNo for the others, because we generate them + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_PercentageDifference + systemNames[i], title = "Base/Ext ratio
    " + systemNames[i] }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + + if (doSILC) + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_SILCRatio + systemNames[i], title = "Base/SILC ratio
    " + systemNames[i] }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + } + for (int i = 0; i < systemYears.Count; i++) + { + // we don't need multiNo for the others, because we generate them + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_External + systemYears[i], title = "External values
    " + systemYears[i] }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + + if (doSILC) + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_SILCValue + systemYears[i], title = "SILC values
    " + systemYears[i] }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + } + + // Then the cells + // First of all, check if we should add the aggregate incomelist values (but not for the origy tables) + if (!incomeListExt.Equals(InDepthDefinitions.ILS_ORIGY)) + { + // clear the sim cell + string cellNameSim = Settings.MakeId(); + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameSim, rowName = $"{tableName}_{incomeListExt}", colName = colName_Simulated }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error31"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { calculationType = HardDefinitions.CalculationType.Empty }, + pageName, tableName, cellNameSim, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error32"); + for (int i = 0; i < systemNames.Count; i++) + { + if (doSILC) + { + string cellSILCdiff = Settings.MakeId(); + // Clear the SILC cells + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellSILCdiff, rowName = $"{tableName}_{incomeListExt}", colName = colName_SILCRatio + systemNames[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error43"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { calculationType = HardDefinitions.CalculationType.Empty }, + pageName, tableName, cellSILCdiff, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error44"); + } + string cellNameBaseline = Settings.MakeId(), cellNameExternal = Settings.MakeId(), cellNameDiff = Settings.MakeId(); + if (!(amounts.TryGetValue(incomeListExt + "_" + systemNames[i].Split('_')[1], out string dStr) && double.TryParse(dStr, NumberStyles.Number, CultureInfo.InvariantCulture, out double d)) || !destination.ContainsKey(incomeListExt) || destination[incomeListExt].Equals(InDepthDefinitions.DESTINATION_NONE)) + { + // Clear the remaining cells + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameBaseline, rowName = $"{tableName}_{incomeListExt}", colName = colName_Baseline + systemNames[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error51"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { calculationType = HardDefinitions.CalculationType.Empty }, + pageName, tableName, cellNameBaseline, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error52"); + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameDiff, rowName = $"{tableName}_{incomeListExt}", colName = colName_PercentageDifference + systemNames[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error55"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { calculationType = HardDefinitions.CalculationType.Empty }, + pageName, tableName, cellNameDiff, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error56"); + continue; + } + if (destination.ContainsKey(incomeListExt) && !destination[incomeListExt].Equals(InDepthDefinitions.DESTINATION_NONE)) + { + // Add the Baseline cells + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameBaseline, rowName = $"{tableName}_{incomeListExt}", colName = colName_Baseline + systemNames[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error61"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { formulaString = $"{Settings.DATA_VAR(incomeListExt)}" + Magnitude, _calculationLevel = GetCalculationLevel(levels, incomeListExt + "__" + systemYears[i]) }, + pageName, tableName, cellNameBaseline, TemplateApi.ModifyMode.MergeReplace)) System.Windows.Forms.MessageBox.Show("Error62"); + } + } + for (int i = 0; i < systemYears.Count; i++) + { + string cellNameExternal = Settings.MakeId(); + if (doSILC) + { + string cellSILC = Settings.MakeId(); + // Clear the SILC cells + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellSILC, rowName = $"{tableName}_{incomeListExt}", colName = colName_SILCValue + systemYears[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error41"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { calculationType = HardDefinitions.CalculationType.Empty }, + pageName, tableName, cellSILC, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error42"); + } + + if (!(amounts.TryGetValue(incomeListExt + "_" + systemYears[i], out string dStr) && double.TryParse(dStr, NumberStyles.Number, CultureInfo.InvariantCulture, out double d)) || !destination.ContainsKey(incomeListExt) || destination[incomeListExt].Equals(InDepthDefinitions.DESTINATION_NONE)) + { + // Clear the remaining cells + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameExternal, rowName = $"{tableName}_{incomeListExt}", colName = colName_External + systemYears[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error53"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { calculationType = HardDefinitions.CalculationType.Empty }, + pageName, tableName, cellNameExternal, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error54"); + continue; + } + + if (destination.ContainsKey(incomeListExt) && !destination[incomeListExt].Equals(InDepthDefinitions.DESTINATION_NONE)) + { + // Add the External values + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameExternal, rowName = $"{tableName}_{incomeListExt}", colName = colName_External + systemYears[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error63"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { formulaString = $"{Settings.USR_VAR(incomeListExt + "_" + systemYears[i] + "_" + (isAmounts ? "amount" : "count"))}" }, + pageName, tableName, cellNameExternal, TemplateApi.ModifyMode.MergeReplace)) System.Windows.Forms.MessageBox.Show("Error64"); + // Create the User Variables for the External values + if (!templateApi.ModifyUserVariables(new Template.TemplateInfo.UserVariable() { name = incomeListExt + "_" + systemYears[i] + "_" + (isAmounts ? "amount" : "count"), inputType = HardDefinitions.UserInputType.Numeric })) + System.Windows.Forms.MessageBox.Show("Error65"); + // Make sure the external value exists, otherwise cancel and ask user to open and save the External Statistics form and save + // (to auto-update any missing values e.g. in case someone added more variables to an incomelist and never updated the external statistics) + sysSpecILFactors.Add(new Template.TemplateInfo.UserVariable() + { + name = incomeListExt + "_" + systemYears[i] + "_" + (isAmounts ? "amount" : "count"), + value = d.ToString(CultureInfo.InvariantCulture) // if value does not exist, fill with NaN + }); + } + } + } + + incomeListComponents.Reverse(); + // Then add the rows for each component-variable + foreach (var ivs in incomeListComponents) + { + if (string.IsNullOrEmpty(ivs.varName)) continue; + // Create the row and cell IDs, so that we can reference them + string rowName = Settings.MakeId(), cellNameSimulated = Settings.MakeId(); + string[] cellNameBaseline = new string[systemNames.Count], cellNameSILC = new string[systemYears.Count], cellNameExternal = new string[systemYears.Count]; + for (int i = 0; i < systemNames.Count; i++) + cellNameBaseline[i] = Settings.MakeId(); + for (int j = 0; j < systemYears.Count; j++) + { + cellNameSILC[j] = Settings.MakeId(); + cellNameExternal[j] = Settings.MakeId(); + } + + // Create the optional variable (default NaN) that reads the baseline value from file + if (!templateApi.ModifyOptionalVariables(new Template.TemplateInfo.OptionalVariable() + { name = ivs.varName, readVar = ivs.varName, defaultValue = double.NaN })) System.Windows.Forms.MessageBox.Show("Error1"); + // Create the optional variable (default NaN) for the SILC value if required + if (doSILC && ivs.varName.EndsWith("_s")) + if (!templateApi.ModifyOptionalVariables(new Template.TemplateInfo.OptionalVariable() + { name = ivs.varName.Remove(ivs.varName.Length - 2), readVar = ivs.varName.Remove(ivs.varName.Length - 2), defaultValue = double.NaN })) + System.Windows.Forms.MessageBox.Show("Error11"); + + // Add the actual row + if (!templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowName, title = $"{SubstractToText(ivs)} {ivs.description} ({ivs.varName})" }, + pageName, tableName, + TemplateApi.ModifyMode.AddNew, TemplateApi.AddWhere.After, $"{tableName}_{incomelistName}")) System.Windows.Forms.MessageBox.Show("Error2"); + + // Add the Simulated cell + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameSimulated, rowName = rowName, colName = colName_Simulated }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace, false)) System.Windows.Forms.MessageBox.Show("Error3"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action() + { + calculationType = HardDefinitions.CalculationType.Info, + formulaString = ivs.varName.EndsWith(simulated_Ending) ? "Y" : "N" + }, + pageName, tableName, cellNameSimulated, TemplateApi.ModifyMode.AddNew, false)) System.Windows.Forms.MessageBox.Show("Error4"); + + string varKey = incomeListExt + "_" + ivs.varName; + + for (int i = 0; i < systemNames.Count; i++) + { + // Add the Baseline cells + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameBaseline[i], rowName = rowName, colName = colName_Baseline + systemNames[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error5"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { formulaString = ivs.exists[i] ? $"{Settings.DATA_VAR(ivs.varName)}" + Magnitude : double.NaN.ToString(), _calculationLevel = GetCalculationLevel(levels, incomeListExt + "_" + ivs.varName + "_" + systemNames[i].Split('_')[1]) }, + pageName, tableName, cellNameBaseline[i], TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error6"); + } + for (int i = 0; i < systemYears.Count; i++) + { + // Add the SILC values + if (doSILC) + { + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameSILC[i], rowName = rowName, colName = colName_SILCValue + systemYears[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error7"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { formulaString = ivs.exists[i] ? $"{Settings.DATA_VAR((ivs.varName.EndsWith("_s") ? ivs.varName.Remove(ivs.varName.Length - 2) : ivs.varName))}" + Magnitude : double.NaN.ToString() }, + pageName, tableName, cellNameSILC[i], TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error8"); + } + // Add the External values + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameExternal[i], rowName = rowName, colName = colName_External + systemYears[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error9"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { formulaString = $"{Settings.USR_VAR(varKey + "_" + systemYears[i] + "_" + (isAmounts ? "amount" : "count"))}" }, + pageName, tableName, cellNameExternal[i], TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error10"); + // Create the User Variables for the External values + if (!templateApi.ModifyUserVariables(new Template.TemplateInfo.UserVariable() { name = varKey + "_" + systemYears[i] + "_" + (isAmounts ? "amount" : "count"), inputType = HardDefinitions.UserInputType.Numeric })) + System.Windows.Forms.MessageBox.Show("Error11"); + // Make sure the external value exists, otherwise cancel and ask user to open and save the External Statistics form and save + // (to auto-update any missing values e.g. in case someone added more variables to an incomelist and never updated the external statistics) + sysSpecILFactors.Add(new Template.TemplateInfo.UserVariable() + { + name = varKey + "_" + systemYears[i] + "_" + (isAmounts ? "amount" : "count"), + value = ((amounts.TryGetValue(varKey + "_" + systemYears[i], out string dStr) && double.TryParse(dStr, NumberStyles.Number, CultureInfo.InvariantCulture, out double d)) ? d : double.NaN).ToString(CultureInfo.InvariantCulture) // if value does not exist, fill with NaN + }); + } + // finally delete the empty placeholder row + } +// if (!templateApi.ModifyRows(new Template.Page.Table.Row() { name = $"{tableName}_{incomelistName}" }, +// pageName, tableName, +// TemplateApi.ModifyMode.Delete)) System.Windows.Forms.MessageBox.Show("Error12"); + } + + string fixFormulaString(string formula, string colName) + { + string y = colName; + if (colName.Contains("_")) y = colName.Split('_')[1]; // calculate year from system + foreach (string baseCol in baseCols) + formula = formula.Replace("[" + baseCol + "]", "[" + baseCol + ((baseCol == colName_External || baseCol == colName_SILCValue) ? y : colName) + "]"); + return formula; + } + + private string GetCalculationLevel(Dictionary levels, string index) + { + if (levels == null || string.IsNullOrEmpty(index) || !levels.ContainsKey(index)) return HardDefinitions.DefaultCalculationLevels.INDIVIDUAL; + return levels[index] == HardDefinitions.DefaultCalculationLevels.HOUSEHOLD ? HardDefinitions.DefaultCalculationLevels.HOUSEHOLD : HardDefinitions.DefaultCalculationLevels.INDIVIDUAL; + } + + private void ModifyTemplate_SourcesAndComments(TemplateApi templateApi, string pageName, string tableName, + List systemYears, string incomelistName, Dictionary source, Dictionary comments, + Dictionary destination, out List sysSpecILFactors, + Dictionary> allIncomelists) + { + sysSpecILFactors = new List(); + + List incomeListComponents = null; + if (incomelistName.Equals(InDepthDefinitions.OtherOriginalIncome)) //variable which are in ils_origy and not in ils_earns + { + //List incomeListComponentsIlsOrigy = GetAllSysILCompositionMacrovalidation(InDepthDefinitions.ILS_ORIGY, destination); + //List incomeListComponentsIlsEarns = GetAllSysILCompositionMacrovalidation(InDepthDefinitions.ILS_EARNS, destination); + List incomeListComponentsIlsOrigy = allIncomelists[InDepthDefinitions.ILS_ORIGY].Values.ToList(); + List incomeListComponentsIlsEarns = allIncomelists[InDepthDefinitions.ILS_EARNS].Values.ToList(); + incomeListComponents = new List(); + + foreach (var ivs in incomeListComponentsIlsOrigy) + { + ILVarSummary summ = null; + summ = incomeListComponentsIlsEarns.Find(v => v.varName.Equals(ivs.varName)); + if (summ == null) + { + incomeListComponents.Add(ivs); + } + } + } + else + { + //incomeListComponents = GetAllSysILCompositionMacrovalidation(incomelistName, destination); + incomeListComponents = allIncomelists[incomelistName].Values.ToList(); + } + + bool hasHidden = false; + for (int i = incomeListComponents.Count - 1; i >= 0; i--) + { + string x = incomeListComponents[i].destination; + if (x.Equals(InDepthDefinitions.DESTINATION_NONE) || !tableName.StartsWith(x, StringComparison.InvariantCultureIgnoreCase)) + { + hasHidden = true; + incomeListComponents.RemoveAt(i); + } + } + if (hasHidden) + { + Template.Page.Table.Row row = templateApi.GetRow(pageName, tableName, tableName + "_" + incomelistName); + if (row != null) row.title += " (NOTE: some components are hidden!)"; + } + // if this is ext_other, and there are no matches, delete the row and return + if (incomelistName.Equals(InDepthDefinitions.ILS_EXTSTAT_OTHER) && incomeListComponents.Count == 0) + { + templateApi.ModifyRows(new Template.Page.Table.Row() { name = $"{tableName}_{incomelistName}" }, pageName, tableName, TemplateApi.ModifyMode.Delete); + return; + } + + + incomeListComponents.Reverse(); + // add rows for each component-variable + foreach (var ivs in incomeListComponents) + { + if (string.IsNullOrEmpty(ivs.varName)) continue; + string userVarName = Settings.MakeId(), rowName = Settings.MakeId(), cellVarName = Settings.MakeId(), cellSourceName = Settings.MakeId(), + cellCommentsName = Settings.MakeId(); + + // create optional variable (default NaN) that reads the component from file + if (!templateApi.ModifyOptionalVariables(new Template.TemplateInfo.OptionalVariable() + { name = ivs.varName, readVar = ivs.varName, defaultValue = double.NaN })) continue; + + // create a user variable that takes the incomelist-factor into account, in fact only if it is n/a + // the user variable allows having different values for the reforms, as user variables can be set per reform, + // in our case we need 1 and NaN to be able to (system-specificly) "ignore" components which are set to n/a + // implementing a user variable requires two steps: + // 1. step: (usually done in the template): defining the user variable (in our case name and type) + // 2. step: (usually done by the user or a programme): assigning values, if the latter and appropriate, per package and reform (in our case per reform) + if (!templateApi.ModifyUserVariables(new Template.TemplateInfo.UserVariable() // 1. step: defining the user variable + { name = userVarName, inputType = HardDefinitions.UserInputType.Numeric })) continue; + + // Add the actual row + if (!templateApi.ModifyRows(new Template.Page.Table.Row() { name = rowName, title = $"{SubstractToText(ivs)} {ivs.description} ({ivs.varName})" }, + pageName, tableName, + TemplateApi.ModifyMode.AddNew, TemplateApi.AddWhere.After, $"{tableName}_{incomelistName}")) System.Windows.Forms.MessageBox.Show("Error2"); + + string formulaStringValue = string.Empty; + + string incomeListExt = incomelistName; + if (incomelistName.Equals(InDepthDefinitions.OtherOriginalIncome) || incomelistName.Equals(InDepthDefinitions.ILS_EARNS)) //variable which are in ils_origy and not in ils_earns + { + incomeListExt = InDepthDefinitions.ILS_ORIGY; + } + //Source column + if (source.ContainsKey(incomeListExt + "_" + ivs.varName)) { formulaStringValue = source[incomeListExt + "_" + ivs.varName]; } + if (String.IsNullOrEmpty(formulaStringValue)) { formulaStringValue = "-"; } + // add the cell for the reform-columns, as we require a row- and column-specific formula + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellSourceName, rowName = rowName, colName = colName_Source }, + pageName, tableName, TemplateApi.ModifyMode.AddNew, false)) continue; + if (!templateApi.ModifyCellAction_Cell(new Template.Action() + { + calculationType = HardDefinitions.CalculationType.Info, + formulaString = formulaStringValue + }, + pageName, tableName, cellSourceName, TemplateApi.ModifyMode.AddNew, false)) continue; + + //Comments column + formulaStringValue = string.Empty; + + if (comments.ContainsKey(incomeListExt + "_" + ivs.varName)) { formulaStringValue = comments[incomeListExt + "_" + ivs.varName]; } + if (String.IsNullOrEmpty(formulaStringValue)) { formulaStringValue = "-"; } + // add the cell for the reform-columns, as we require a row- and column-specific formula + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellCommentsName, rowName = rowName, colName = colName_Comments }, + pageName, tableName, TemplateApi.ModifyMode.AddNew, false)) continue; + if (!templateApi.ModifyCellAction_Cell(new Template.Action() + { // add the formula for the reforms + calculationType = HardDefinitions.CalculationType.Info, + formulaString = formulaStringValue + }, + pageName, tableName, cellCommentsName, TemplateApi.ModifyMode.AddNew, false)) continue; + } + } + + private void ModifyTemplate_Distributional(TemplateApi templateApi, string pageName, string tableName, + List systemYears, List systemNames, Dictionary> distValues, + out List sysSpecILFactors) + { + sysSpecILFactors = new List(); + + // Then prepare the columns + foreach (string colName in baseCols) + { + int colNum = (colName == colName_External || colName == colName_SILCValue) ? systemYears.Count : systemNames.Count; + // if there is a known base column, copy it for all files, and make sure that only the first has a separator + Template.Page.Table.Column column = templateApi.GetColumn(pageName, tableName, colName); + if (column != null) + { + for (int i = 0; i < colNum; i++) + { + string ys = (colName == colName_External || colName == colName_SILCValue) ? systemYears[i].ToString() : systemNames[i]; + if (!templateApi.CopyColumn(pageName, tableName, colName, colName + ys, false, TemplateApi.AddWhere.Before)) + System.Windows.Forms.MessageBox.Show("Cannot copy column '" + (colName + ys) + "' in template"); + else + { + Template.Page.Table.Column col = templateApi.GetColumn(pageName, tableName, colName + ys); + col.hasSeparatorBefore = i == 0; + if (col.cellAction != null && col.cellAction.formulaString != null) + col.cellAction.formulaString = fixFormulaString(col.cellAction.formulaString, ys); + } + } + // finally, delete the template column + templateApi.ModifyColumns(column, pageName, tableName, TemplateApi.ModifyMode.Delete); + } + + // if there are base custom cells for this column, also multiply those and delete the base ones + List customCells = templateApi.GetCells(pageName, tableName, colName); + if (customCells.Count > 0) + { + foreach (Template.Page.Table.Cell cell in customCells) + { + if (string.IsNullOrEmpty(cell.name)) + cell.name = Settings.MakeId(); + + for (int i = 0; i < colNum; i++) + { + string ys = (colName == colName_External || colName == colName_SILCValue) ? systemYears[i].ToString() : systemNames[i]; + string newCellName = Settings.MakeId(); + templateApi.CopyCell(pageName, tableName, cell, newCellName); + Template.Page.Table.Cell newCell = templateApi.GetCell(pageName, tableName, newCellName); + newCell.colName = newCell.colName + ys; + newCell.cellAction.formulaString = fixFormulaString(newCell.cellAction.formulaString, ys); + } + templateApi.ModifyCells(cell, pageName, tableName, TemplateApi.ModifyMode.Delete); + } + } + } + + + // Then fix the column names + for (int i = 0; i < systemNames.Count; i++) + { + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_Baseline + systemNames[i], title = "Baseline values
    " + systemNames[i], multiNo = i.ToString() }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_PercentageDifference + systemNames[i], title = "Base/Ext ratio
    " + systemNames[i] }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + } + for (int j = 0; j < systemYears.Count; j++) + { + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = colName_External + systemYears[j], title = "External values
    " + systemYears[j] }, pageName, tableName, TemplateApi.ModifyMode.MergeReplace); + } + + // Then add the rows for each component-variable + foreach (string rowName in distValues.Keys) + { + Dictionary rowVal = distValues[rowName]; + // Create the row and cell IDs, so that we can reference them + string[] cellNameBaseline = new string[systemYears.Count], cellNameExternal = new string[systemYears.Count]; + for (int i = 0; i < systemYears.Count; i++) + { + cellNameBaseline[i] = Settings.MakeId(); + cellNameExternal[i] = Settings.MakeId(); + } + + for (int i = 0; i < systemYears.Count; i++) + { + // Add the External values + if (!templateApi.ModifyCells(new Template.Page.Table.Cell() { name = cellNameExternal[i], rowName = rowName, colName = colName_External + systemYears[i] }, + pageName, tableName, TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error3"); + if (!templateApi.ModifyCellAction_Cell(new Template.Action { formulaString = $"{Settings.USR_VAR(rowName + "_" + systemYears[i])}" }, + pageName, tableName, cellNameExternal[i], TemplateApi.ModifyMode.AddOrReplace)) System.Windows.Forms.MessageBox.Show("Error4"); + // Create the User Variables for the External values + if (!templateApi.ModifyUserVariables(new Template.TemplateInfo.UserVariable() { name = rowName + "_" + systemYears[i], inputType = HardDefinitions.UserInputType.Numeric })) + System.Windows.Forms.MessageBox.Show("Error5"); + // Make sure the system exists, otherwise cancel and ask user to open and save the External Statistics form and save + // (to auto-update any missing systems e.g. in case someone added more systems to the country and never updated the external statistics) + sysSpecILFactors.Add(new Template.TemplateInfo.UserVariable() + { + name = rowName + "_" + systemYears[i], + value = ((rowVal.TryGetValue(systemYears[i].ToString(), out string dStr) && double.TryParse(dStr, NumberStyles.Number, CultureInfo.InvariantCulture, out double d)) ? d : double.NaN).ToString(CultureInfo.InvariantCulture) // if value does not exist, fill with NaN + }); + } + } + } + + private void ModifyTemplate_Metadata(TemplateApi templateApi, string pageName, string tableName, List systemYears) + { + for (int i = 0; i < systemYears.Count; i++) + { + if (!templateApi.CopyColumn(pageName, tableName, "BaseSys", "BaseSys" + i, false, TemplateApi.AddWhere.Before)) + System.Windows.Forms.MessageBox.Show("Cannot copy column '" + ("BaseSys" + i) + "' in template"); + else + { + Template.Page.Table.Column col = templateApi.GetColumn(pageName, tableName, "BaseSys" + i); + col.multiNo = i.ToString(); + + } + } + templateApi.ModifyColumns(new Template.Page.Table.Column() { name = "BaseSys" }, pageName, tableName, TemplateApi.ModifyMode.Delete); + } + + string SubstractToNum(bool? sub, bool naToZero) { return sub == null ? (naToZero ? "0.0" : double.NaN.ToString()) : (sub == true ? "-1.0" : "1.0"); } + + private string SubstractToText(ILVarSummary ivs) + { + bool? joint = ivs.baselineSubstract; + foreach (bool? r in ivs.reformsSubstract) + { + if (r == null || r == joint) continue; + if (joint == null) joint = r; else return "~"; // a variable is partly added, partly substracted - that is actually non-sense + } + return joint == true ? "-" : "+"; + } + + public class ILVarSummary + { + public string varName = string.Empty; + public string description = string.Empty; + public string destination = string.Empty; + public bool? baselineSubstract = null; + public List reformsSubstract = new List(); + public List exists = new List(); + } + + private List GetAllSysILCompositionMacrovalidation(string ilName, Dictionary destination) //Dictionary allVarInfo + { + BaselineReformPackage brp = settings.baselineReformPackages[0]; // this function is only called if there is exactly one baseline-reform-package + List allSysILComposition = new List(); + // we only check the reform packages, because baseline is also passed as the first reform + int refNo = 0; + foreach (BaselineReformPackage.BaselineOrReform reform in brp.reforms) + { + if (reform.systemInfo != null && reform.systemInfo.fiscalIls.ContainsKey(ilName)) + { + foreach (var vi in reform.systemInfo.GetIncomelistContent(ilName)) + { + ILVarSummary ivs = (from a in allSysILComposition where a.varName.ToLower() == vi.Key.ToLower() select a).FirstOrDefault(); + if (ivs == null) + { + string d = destination.FirstOrDefault(x => x.Key.StartsWith((ilName.Equals(InDepthDefinitions.ILS_EARNS) ? InDepthDefinitions.ILS_ORIGY : ilName) + "_" + vi.Key)).Value?? InDepthDefinitions.IncomelistDefaultDestination[ilName]; + ivs = new ILVarSummary() { varName = vi.Key, description = vi.Value.description, baselineSubstract = null, destination = d }; + for (int r = 0; r < brp.reforms.Count; ++r) ivs.reformsSubstract.Add(null); + allSysILComposition.Add(ivs); + } + + ivs.reformsSubstract[brp.reforms.IndexOf(reform)] = vi.Value.substract; + ivs.exists[refNo] = true; + } + } + refNo++; + } + return allSysILComposition; + } + + } + +} \ No newline at end of file diff --git a/EM_Libraries/EM_Statistics/Resources.Designer.cs b/EM_Libraries/EM_Statistics/Resources.Designer.cs index a244e72..a96484b 100644 --- a/EM_Libraries/EM_Statistics/Resources.Designer.cs +++ b/EM_Libraries/EM_Statistics/Resources.Designer.cs @@ -19,10 +19,10 @@ namespace EM_Statistics { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { + public class Resources { private static global::System.Resources.ResourceManager resourceMan; @@ -36,7 +36,7 @@ internal Resources() { /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { + public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EM_Statistics.Resources", typeof(Resources).Assembly); @@ -51,7 +51,7 @@ internal Resources() { /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { + public static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } @@ -61,48 +61,132 @@ internal Resources() { } /// - /// Looks up a localized string similar to <a id="emsta-button-id-PLACEHOLDER_PACKAGE_KEY" onclick="PLACEHOLDER_LINK" class="w3-bar-item w3-button w3-hover-gray">PLACEHOLDER_TEXT</a> + /// Looks up a localized string similar to <a id="emsta-package-button-PLACEHOLDER_PACKAGE_KEY" onclick="PLACEHOLDER_LINK" class="emsta-package-button w3-bar-item w3-button">PLACEHOLDER_TEXT</a> ///. /// - internal static string Button_html { + public static string Button_html { get { return ResourceManager.GetString("Button_html", resourceCulture); } } /// - /// Looks up a localized string similar to <div id="TabContent-PLACEHOLDER_PACKAGE_KEY" class="w3-container w3-cell-middle" style="height: 100%"></div> + /// Looks up a localized string similar to <div id="emsta-package-page-contents-PLACEHOLDER_PACKAGE_KEY" class="emsta-package-page-contents w3-container w3-cell-middle" style="display:none; height: 100%" loaded="false"></div> ///. /// - internal static string Content_html { + public static string Content_html { get { return ResourceManager.GetString("Content_html", resourceCulture); } } + /// + /// Looks up a localized string similar to <!DOCTYPE html> + ///<html> + ///<head> + /// <meta http-equiv="X-UA-Compatible" content="IE=10" /> <!-- instead of IE4 use version 10 of Internet Explorer, or the installed version, if lower --> + /// <meta charset="UTF-8" /> + ///</head> + ///<body></body> + ///</html>. + /// + public static string dummy_html { + get { + return ResourceManager.GetString("dummy_html", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap existing_png { + get { + object obj = ResourceManager.GetObject("existing_png", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized string similar to <Template> + /// <TemplateInfo> + /// <Name><![CDATA[In-depth Analysis]]></Name> + /// <Title><![CDATA[In-depth Analysis]]></Title> + /// <Button>[baseCountry]</Button> + /// <Description></Description> + /// <GeneralDescription><![CDATA[]]></GeneralDescription> + /// <TemplateType>BaselineReform</TemplateType> + /// <DebugMode>true</DebugMode> + /// <RequiredVariables> + /// <RequiredVariable> + /// <Name>dwt</Name> + /// <ReadVar>dwt</ReadVar> + /// </RequiredVariable> + /// <RequiredVariable> + /// <Nam [rest of string was truncated]";. + /// + public static string InDepthAnalysis_xml { + get { + return ResourceManager.GetString("InDepthAnalysis_xml", resourceCulture); + } + } + /// /// Looks up a localized string similar to // This library fills the statistics UI with results, using the JSON obtained from the EM_LightBackEnd server. ///// HTML building blocks /// ///var CONTAINER_HEAD_ID_PREFIX = "ContainerHead_"; ///var CONTAINER_BODY_ID_PREFIX = "ContainerBody_"; + ///var SERVER_UPDATE_MILLISECONDS = 200; /// + ///var firstLoad = true; + ///var currentTab = 0; + ///var changingPackage = false; + ///var serverRecallTimeout = null; /// ///// This calls the BackEnd to get the progress update and runs HandleProgress once the response is back - ///function GetStatsAgain() { - /// embe_BackEndRequest(emsta_MakeStatisticsUI, responderKey + "_LoadStatistics", param); - ///} - /// - ///function GetStatsContent(key) - ///{ - /// emb [rest of string was truncated]";. + ///function TryGetStat [rest of string was truncated]";. /// - internal static string LoadStatistics_js { + public static string LoadStatistics_js { get { return ResourceManager.GetString("LoadStatistics_js", resourceCulture); } } + /// + /// Looks up a localized string similar to <Template> + /// <TemplateInfo> + /// <Name><![CDATA[Macrovalidation results]]></Name> + /// <Title><![CDATA[Macrovalidation results]]></Title> + /// <Button>[baseCountry]</Button> + /// <Description/> + /// <GeneralDescription><![CDATA[]]></GeneralDescription> + /// <TemplateType>Multi</TemplateType> + /// <DebugMode>true</DebugMode> + /// <DoMultiColumns>false</DoMultiColumns> + /// <RequiredVariables> + /// <RequiredVariable> + /// <Name>dwt</Name> + /// <ReadVar>dwt</ReadVar> + /// </RequiredVariable> + /// <RequiredVariable> + /// <Name>dgn< [rest of string was truncated]";. + /// + public static string Macrovalidation_xml { + get { + return ResourceManager.GetString("Macrovalidation_xml", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap missing_png { + get { + object obj = ResourceManager.GetObject("missing_png", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized string similar to <!DOCTYPE html> ///<html> @@ -112,11 +196,10 @@ internal static string LoadStatistics_js { /// <link rel="stylesheet" type="text/css" href="w3.css"> /// <link rel="stylesheet" type="text/css" href="Chart.min.css"> /// <link rel="stylesheet" href="tlite.css" /> - /// <!--change w3-css default font-size (15px) and line-spacing(1.5) to use less space--> - /// <style> - /// html, bod [rest of string was truncated]";. + /// <link rel="stylesheet" href="BackEnd.css" /> + /// <!--change w3-css default font-size (15px) and line-spacing(1.5) to [rest of string was truncated]";. /// - internal static string statistics_html { + public static string statistics_html { get { return ResourceManager.GetString("statistics_html", resourceCulture); } diff --git a/EM_Libraries/EM_Statistics/Resources.resx b/EM_Libraries/EM_Statistics/Resources.resx index a807280..bc3debd 100644 --- a/EM_Libraries/EM_Statistics/Resources.resx +++ b/EM_Libraries/EM_Statistics/Resources.resx @@ -124,9 +124,24 @@ Resources\Content.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + Resources\dummy.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\existing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Resources\InDepthAnalysis.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + Resources\LoadStatistics.js;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + Resources\Macrovalidation.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + Resources\missing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + Resources\statistics.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 diff --git a/EM_Plugins/StatisticsPresenter/StatisticsPresenter.ico b/EM_Libraries/EM_Statistics/Resources/EUROMODStatistics.ico similarity index 100% rename from EM_Plugins/StatisticsPresenter/StatisticsPresenter.ico rename to EM_Libraries/EM_Statistics/Resources/EUROMODStatistics.ico diff --git a/EM_Plugins/InDepthAnalysis/InDepthAnalysis.ico b/EM_Libraries/EM_Statistics/Resources/InDepthAnalysis.ico similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthAnalysis.ico rename to EM_Libraries/EM_Statistics/Resources/InDepthAnalysis.ico diff --git a/EM_Plugins/InDepthAnalysis/Resources/InDepthAnalysis.xml b/EM_Libraries/EM_Statistics/Resources/InDepthAnalysis.xml similarity index 75% rename from EM_Plugins/InDepthAnalysis/Resources/InDepthAnalysis.xml rename to EM_Libraries/EM_Statistics/Resources/InDepthAnalysis.xml index 1942261..a98118d 100644 --- a/EM_Plugins/InDepthAnalysis/Resources/InDepthAnalysis.xml +++ b/EM_Libraries/EM_Statistics/Resources/InDepthAnalysis.xml @@ -2,7 +2,7 @@ <![CDATA[In-depth Analysis]]> - + BaselineReform @@ -27,6 +27,16 @@ dag false + + dgn + dgn + false + + + les + les + false + ils_origy ils_origy @@ -67,6 +77,10 @@ ils_bennt ils_bennt + + ilsDispy + ils_dispy + @@ -77,8 +91,650 @@ + + + true + FilterChildren + + + + true + FilterElderly + = 65]]> + + + true + FilterElderlyFemale + = 65 && DATA_VAR[@dgn] == 0]]> + + + true + FilterElderlyMale + = 65 && DATA_VAR[@dgn] == 1]]> + + + true + FilterWorkingAge + = 18 && DATA_VAR[@age] < 65]]> + + + true + FilterWorkingAgeFemale + = 18 && DATA_VAR[@age] < 65 && DATA_VAR[@dgn] == 0]]> + + + true + FilterWorkingAgeMale + = 18 && DATA_VAR[@age] < 65 && DATA_VAR[@dgn] == 1]]> + + + true + FilterWorkingAgeActive + = 18 && DATA_VAR[@age] < 65 && (DATA_VAR[@yem] + DATA_VAR[@yse]) > 0]]> + + + + true + FilterMale + 0]]> + + + true + FilterFemale + + + + + true + Filter0_14 + = 0 && DATA_VAR[@age] <= 14]]> + + + true + Filter15_24 + = 15 && DATA_VAR[@age] <= 24]]> + + + true + Filter25_49 + = 25 && DATA_VAR[@age] <= 49]]> + + + true + Filter50_64 + = 50 && DATA_VAR[@age] <= 64]]> + + + true + Filter65_79 + = 65 && DATA_VAR[@age] <= 79]]> + + + true + Filter80plus + = 80]]> + + + + true + FilterStatusPreschool + + + + true + FilterStatusFarmer + + + + true + FilterStatusSelfEmployed + + + + true + FilterStatusEmployee + + + + true + FilterStatusPensioner + + + + true + FilterStatusUnemployed + + + + true + FilterStatusStudent + + + + true + FilterStatusInactive + + + + true + FilterStatusDisabled + + + + true + FilterStatusOther + + + + + CreateFlag + FilterStatusPreschool + + FilterStatusPreschool + + + + CreateFlag + FilterStatusFarmer + + FilterStatusFarmer + + + + CreateFlag + FilterStatusSelfEmployed + + FilterStatusSelfEmployed + + + + CreateFlag + FilterStatusEmployee + + FilterStatusEmployee + + + + CreateFlag + FilterStatusPensioner + + FilterStatusPensioner + + + + CreateFlag + FilterStatusUnemployed + + FilterStatusUnemployed + + + + CreateFlag + FilterStatusStudent + + FilterStatusStudent + + + + CreateFlag + FilterStatusInactive + + FilterStatusInactive + + + + CreateFlag + FilterStatusDisabled + + FilterStatusDisabled + + + + CreateFlag + FilterStatusOther + + FilterStatusOther + + + + CalculateSumWeighted + + totalPreschool + + + CalculateSumWeighted + + totalFarmer + + + CalculateSumWeighted + + totalSelfEmployed + + + CalculateSumWeighted + + totalEmployee + + + CalculateSumWeighted + + totalPensioner + + + CalculateSumWeighted + + totalUnemployed + + + CalculateSumWeighted + + totalStudent + + + CalculateSumWeighted + + totalInactive + + + CalculateSumWeighted + + totalDisabled + + + CalculateSumWeighted + + totalOther + + + + CreateFlag + Filter0_14 + + Filter0_14 + + + + CreateFlag + Filter15_24 + + Filter15_24 + + + + CreateFlag + Filter25_49 + + Filter25_49 + + + + CreateFlag + Filter50_64 + + Filter50_64 + + + + CreateFlag + Filter65_79 + + Filter65_79 + + + + CreateFlag + Filter80plus + + Filter80plus + + + + CalculateSumWeighted + + total0_14 + + + CalculateSumWeighted + + total15_24 + + + CalculateSumWeighted + + total25_49 + + + CalculateSumWeighted + + total50_64 + + + CalculateSumWeighted + + total65_79 + + + CalculateSumWeighted + + total80plus + + + + CreateFlag + FilterFemale + + FilterFemale + + + + CreateFlag + FilterMale + + FilterMale + + + + + CreateFlag + FilterChildren + + FilterChildren + + + + CreateFlag + FilterElderly + + FilterElderly + + + + CreateFlag + FilterElderlyFemale + + FilterElderlyFemale + + + + CreateFlag + FilterElderlyMale + + FilterElderlyMale + + + + CreateFlag + FilterWorkingAge + + FilterWorkingAge + + + + CreateFlag + FilterWorkingAgeFemale + + FilterWorkingAgeFemale + + + + CreateFlag + FilterWorkingAgeMale + + FilterWorkingAgeMale + + + + CreateGroupValue + Household + NumberOfAdults + + + SumVar + FilterWorkingAge + + + CopyToIndividuals + True + + + + + CreateGroupValue + Household + NumberOfAdultMales + + + SumVar + FilterWorkingAgeMale + + + CopyToIndividuals + True + + + + + CreateGroupValue + Household + NumberOfAdultFemales + + + SumVar + FilterWorkingAgeFemale + + + CopyToIndividuals + True + + + + + CreateGroupValue + Household + NumberOfChildren + + + SumVar + FilterChildren + + + CopyToIndividuals + True + + + + + CreateGroupValue + Household + NumberOfElderly + + + SumVar + FilterElderly + + + CopyToIndividuals + True + + + + + CreateGroupValue + Household + NumberOfElderlyMales + + + SumVar + FilterElderlyMale + + + CopyToIndividuals + True + + + + + CreateGroupValue + Household + NumberOfElderlyFemales + + + SumVar + FilterElderlyFemale + + + CopyToIndividuals + True + + + + + CreateFlag + OneAdultNoChildren + + + + + + CreateFlag + OneAdultMaleNoChildren + + + + + + CreateFlag + OneAdultFemaleNoChildren + + + + + + CreateFlag + OneElderlyNoChildren + + + + + + CreateFlag + OneElderlyMaleNoChildren + + + + + + CreateFlag + OneElderlyFemaleNoChildren + + + + + + CreateFlag + OneAdultOrElderlyWithChildren + + 0]]> + + + + CreateFlag + OneAdultOrElderlyMaleWithChildren + + 0]]> + + + + CreateFlag + OneAdultOrElderlyFemaleWithChildren + + 0]]> + + + + CreateFlag + TwoAdultsNoChildren + + + + + + CreateFlag + TwoElderlyNoChildren + + 0 && DATA_VAR[@NumberOfChildren] == 0]]> + + + + CreateFlag + TwoAdultsOrElderlyOneChild + + + + + + CreateFlag + TwoAdultsOrElderlyTwoChildren + + + + + + CreateFlag + TwoAdultsOrElderlyThreePlusChildren + + = 3]]> + + + + CreateFlag + ThreePlusAdultsOrElderlyNoChildren + + = 3 && DATA_VAR[@NumberOfChildren] == 0]]> + + + + CreateFlag + ThreePlusAdultsOrElderlyWithChildren + + = 3 && DATA_VAR[@NumberOfChildren] > 0]]> + + + + + CreateOECDScale + OECDscale + + + CreateEquivalized + eqDispy + + + ilsDispy + + + EquivalenceScale + OECDscale + + + + + CreateDeciles + deciles_eqDispy + + + IncomeVar + eqDispy + + + GroupingVar + idhh + + + CreateArithmetic ils_sic @@ -136,6 +792,8 @@ + RevenueExpenditure + <![CDATA[Table 1.1.]]>The Table shows, on an annual base, aggregate original income, government revenue and government expenditure (using weights). In addition, the last row displays the net budgetary effect, i.e. the change of a scenario's government budget (revenue minus expenditure) with respect to the reference scenario (baseline or previous scenario, as defined by the user).

    The following aggregates are displayed:

      @@ -161,8 +819,6 @@ - RevenueExpenditure - <![CDATA[Table 1.1.]]> ColumnFirst CalculateSumWeighted @@ -195,7 +851,7 @@ true CalculateArithmetic - + P1 @@ -392,6 +1048,8 @@
    + FiscalTaxpayersBeneficiaries + <![CDATA[Table 1.2.]]> @@ -412,8 +1070,6 @@ Household - FiscalTaxpayersBeneficiaries - <![CDATA[Table 1.2.]]>ColumnFirst Household @@ -447,7 +1103,7 @@ true CalculateArithmetic - + P1 @@ -566,9 +1222,9 @@
    - DisaggregatedConcepts<![CDATA[Table 1.3.]]> + ColumnFirst CalculateSumWeighted @@ -601,7 +1257,7 @@ true CalculateArithmetic - + P1 @@ -610,9 +1266,9 @@
    - DisaggregatedConceptsUnits<![CDATA[Table 1.4.]]> + ColumnFirst#,0 @@ -641,7 +1297,7 @@ true CalculateArithmetic - + P1 @@ -652,16 +1308,16 @@ - true Distributional <![CDATA[2. Distributional]]> +
    - DistributionalTaxpayersBeneficiaries<![CDATA[Table 2.1.]]> + ColumnFirst Household @@ -767,9 +1423,9 @@
    - TotalTaxOrBenefit<![CDATA[Table 2.2.]]> + ColumnFirst Household @@ -811,7 +1467,7 @@ true CalculateArithmetic - + P2 @@ -876,8 +1532,8 @@ true CalculateArithmetic - - + + P2 @@ -995,8 +1651,8 @@ true CalculateArithmetic - - + + P2 @@ -1052,8 +1708,8 @@ true CalculateArithmetic - - + + P2 @@ -1249,14 +1905,15 @@ The Table shows the following indices:

    1. Gini coefficients for a list of income definitions
    2. -
    3. Redistribution index
    4. -
    5. Social welfare index
    6. +
    7. Redistribution index: Gini of the first component of the list (default: original income) minus Gini of the last component of the list (default: disposable income)
    8. +
    9. Social welfare index computed with the last component in the list (default: equivalised disposable income)
    10. Income quantile share ratio
    11. Inter-decile ratio
    12. Atkinson inequality index
    13. Mean log deviation
    -

    Note that negative incomes are recoded to zeros for the calculations of (a), (b) and (c), to keep consistency with the Statistics Presenter. The variables used to compute (a), (b) and (c) are shown in the table. The formulas used to compute those variables, along with the parameters chosen for (d), (e) and (f), can be checked in the "Parameter settings" tab.

    Note also that all the indicators are calculated within each scenario, with no connection to the other scenarios. This means, for example, that the income quantiles of (d) are computed independently for each scenario and do not necessarily include the same observations as the baseline or other reform scenarios.

    ]]>
    +

    Note that negative incomes are recoded to zeros for the calculations of (1), (2) and (3), to keep consistency with the Statistics Presenter. The variables used to compute (1), (2) and (3) are shown in the table. The formulas used to compute those variables, along with the parameters chosen for (4), (5) and (6), can be checked in the "Parameter settings" tab.

    +

    Note also that all the indicators are calculated within each scenario, with no connection to the other scenarios. This means, for example, that the income quantiles of (4) are computed independently for each scenario and do not necessarily include the same observations as the baseline or other reform scenarios.

    ]]>ColumnFirst0.0000 @@ -1375,7 +2032,7 @@ RedistributionIndex - <![CDATA[Redistribution index = Gini A - Gini D]]> + <![CDATA[Redistribution index = Gini first income - Gini last income]]> true CalculateArithmetic @@ -1384,7 +2041,7 @@ SocialWelfareIndex - <![CDATA[Social welfare index = mean eq. disp. income * (1-D)]]> + <![CDATA[Social welfare index = mean eq. disp. income * (1-Gini last income)]]> #,0 CalculateArithmetic @@ -1485,7 +2142,7 @@
  • C = Kakwani index
  • D = Net average tax rate
  • E = Re-ranking effect
  • -
  • A - B = C*D - E = Reynolds-Smolensky index
  • +
  • A - B = C*D - E = Redistributive effect
  • Note that negative incomes are not recoded to zeros, in order to keep consistency of the decomposition of the redistributive effect. The variables/formulas used to define gross and net income are shown in the table and in the "Parameter settings" tab.

    ]]> ColumnFirst @@ -1704,7 +2361,7 @@
    ReynoldsSmolenskyIndex - <![CDATA[A - B = C*D - E = Reynolds-Smolensky index]]> + <![CDATA[A - B = C*D - E = Redistributive effect]]> CalculateArithmetic @@ -1878,14 +2535,62 @@
    + + ParameterSettings + <![CDATA[Parameter settings]]> + + + + Fiscal + <![CDATA[1. Fiscal]]> + + Info + + + + Value + + +
    + + Distributional + <![CDATA[2. Distributional]]> + + Info + + + + Value + + +
    + + InequalityAndPoverty + <![CDATA[3. Inequality and Poverty]]> + + Info + + + + Value + + +
    +
    +
    Metadata - <![CDATA[Metadata]]> - + Metadata + + + The table shows information on the execution: run system, dataset, output file name, add-ons and extensions selected, execution start time, execution end time and execution duration.

    ]]> +
    Metadata - <![CDATA[]]> Info @@ -1914,12 +2619,26 @@ + + Baseline Extensions + + Info + [baseRunExtensionSwitches] + + Reform files + + Reform Extensions + + Info + [refRunExtensionSwitches] + + Compare with @@ -2009,48 +2728,5 @@
    - - ParameterSettings - <![CDATA[Parameter settings]]> - - - - Fiscal - <![CDATA[1. Fiscal]]> - - Info - - - - Value - - -
    - - Distributional - <![CDATA[2. Distributional]]> - - Info - - - - Value - - -
    - - InequalityAndPoverty - <![CDATA[3. Inequality and Poverty]]> - - Info - - - - Value - - -
    -
    -
    \ No newline at end of file diff --git a/EM_Libraries/EM_Statistics/Resources/Macrovalidation.xml b/EM_Libraries/EM_Statistics/Resources/Macrovalidation.xml new file mode 100644 index 0000000..568b878 --- /dev/null +++ b/EM_Libraries/EM_Statistics/Resources/Macrovalidation.xml @@ -0,0 +1,1465 @@ + \ No newline at end of file diff --git a/EM_Libraries/EM_Statistics/Resources/StatisticsPresenter.ico b/EM_Libraries/EM_Statistics/Resources/StatisticsPresenter.ico new file mode 100644 index 0000000000000000000000000000000000000000..e45ec71249369525c888eae54369bf130a3a45f8 GIT binary patch literal 99971 zcmeI5Pl#1j9LLWa?Vq7o=>r_-6Zcy;XX$=zo!nY~9&UAw-l^V|zr?subW9^dfVv44(#aZkH_-^i~Y z5A7WKYJAa|cIVr*ySBXj=*H6%7k>HRl{X$4d2hw&^uJvXEq{OG1N&Z`$m-|QrY)Bb zZriiqz$bU)k9KYE`|`}uKi1!N==9Io8K~2tq2bP{V;}wa*5{j^{c!Klw%-@O`@?|? zPe1nA-?pjIk#%eKtlqqRWwt$T4`eJXtf|y8`W%_{0n2;dgP2l9=u}+HR{D~dn z7_VNONHPw4uC^~J*|DZzV*40$I_0rkhNycH%)%GPNJJu9TY#)P8sm_!5 zm-~$PPZ7ZXgHZzhpUs{5zkIF=(F*f_In&wdOM4_Frkc9MpZH74=K3$uiI=DGa7bDF zkN+hV<9~@xyu1)kYwF^E{4c2(|4Ve@T54it)chCtjY$!y#qyKmM0gjQ=G%@$y1E zt*MLu@xP>E{4ddom#6V?NLl=k|0NaUe~C`Kybw=o>f(R=FR2*+OLXGpX*?WK7XRaa zNyYeIq7yGK#M7F(_#gjED#rg3op^Z~4~LY+|M*{0G5(k6#LEluw5Bfp$N!Rw@xMeT zUY^FoA!YGD{+CpY|0O!{@YAOA}##{UwXczGHRhm^(t_+L^n z{+H;)%M0@;{W=& z3|i|UG1b&%{x8=K@gFpS+5I#Bmupqy_hMQ6U(R&4`qCaL#wpf5@hARimF?df^MAQk zL*@qjU(VEDrS;SdiK(V8@hATEC^mj8%>U(D)%d+w7XOzsjjv|8hhm&!?Gu0EFDtP* zxy=9NS`C>S@P9eeL90F_rkc9MpZE`2>s9+_{x8?6#_z?l_`jTKRZYe!SBz7ved162 zV`;eVcA5XnwHh)v;Qw-_b!%7KUPw$eb%{Um*J^W6<>%Ax=j|FD5BRMEq0IZeCx+zj-l9IU?epl6Ld@BL2;bNy-rs|CF?w*B9|` zUQAMsi1??Z-MqetfAeCJazw;GCGF<*Mf{r=lawPO{wZlUuP@@?yqKgM5%Et+yLo-t z&nl$&OoZ)&1OW&@00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf+&Tmd2?7v+00bZafq6$@ zWp>8xY#Gm%mKo0e&r;i%{Y$2n$^GoVes?@R?>o7E?NnE@KJQH_{#_W`rq5Wq2I8@! z`CC@5Z1MdqKJN{(b@Iu!>Dt$<^KJNSYx;6!IsfkW_YnUvwRX`z{?E@>%zw=P?)sux z=QZTBt?A2^<@(3!3c@6n&=i92f&HWGe zKY6Wj|HJ)H)w#o!PyF5ds#*JJEni2|mn&PG|MTtnZlizn@ARcv`|8cr)AZ%aqW|vaKaOR{ z8vo;e=P%7VM02*TeGa2til5yJ9fPeuDE-$l_Bz_&{0HOzI$~Ex8^oXZYvz4dwhrwz zp$+suzx8kLDYW+?#or+{LC1^%0uX=z1Rwwb2tWV=5P$##ATS65?mYmk=O+RCo`_Z1 zvN>C3-V?E+`g2BI@wsX$vr2P)+dQ8-ww^Zi8;9>$7=N`$z~7X50sWvK=M5h%_|&oeX_FhHwDuW`PaVcz-&_L! zYEF=J@A7?EH7nuorGD$mWBhfI^lJzH ze%$J+HP`u9{+Yq!_g{4}rX2`C00Izz00eG50@=rdNCPBbKc_XEE$wWX`JC3${-4w8 z^_{u%Cw5GVRQg_>`yRh7+pC>^O7Hbt$9*?X`d+8av&ok2)eim31bT6U|J3_6(O>WH z72`kVpV;$nmFrK;`Cpzrr*i2(-t`y${RxEV&(7gxi@Ue$-+S2oSC#hrl?gfjer;FD zpYQ!!t(0lV-5*q8NErw~AU=WY@xVZneNK@*mY952G4q^aVejV@$A5ab!=(|MRV#kMeW1-L}W_WvJgxAkW6KD)QIz>u!DadmD@S#r})=vHQPv m<+qMoZv1 filePackages, L { requiresWarmUp = false; string dummyHtml = Path.Combine(new EMPath(UISessionInfo.GetEuromodFilesFolder()).GetFolderTemp(), "dummy.html"); - if (!File.Exists(dummyHtml)) File.WriteAllText(dummyHtml, Resources.dummy_html); + if (!File.Exists(dummyHtml)) File.WriteAllText(dummyHtml, EM_Statistics.Resources.dummy_html); webBrowser.Url = new Uri(dummyHtml); } } diff --git a/EM_Plugins/StatisticsPresenter/PresenterForm.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/PresenterForm.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/PresenterForm.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/PresenterForm.resx diff --git a/EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.Designer.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.Designer.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.Designer.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.Designer.cs index a2fd415..c9ffef5 100644 --- a/EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.Designer.cs @@ -1,4 +1,4 @@ -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { partial class SelectBaseAltsForm { diff --git a/EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.cs similarity index 94% rename from EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.cs index 5214c7b..04f917b 100644 --- a/EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Windows.Forms; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { public partial class SelectBaseAltsForm : Form { @@ -49,6 +49,7 @@ private void SelectPath(bool alt) { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog(); folderBrowserDialog.SelectedPath = alt ? textAltPath.Text : textBasePath.Text; + if (Path.GetFileName(folderBrowserDialog.SelectedPath).Contains("*") || Path.GetFileName(folderBrowserDialog.SelectedPath).Contains("?")) folderBrowserDialog.SelectedPath = Path.GetDirectoryName(folderBrowserDialog.SelectedPath); folderBrowserDialog.Description = string.Format("Please select the folder containing the {0}.", alt ? "alternative-scenario(s) file(s)" : "base-scenario file"); if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) @@ -67,6 +68,12 @@ private void FillFileList(bool alt) string filePattern = "*.txt"; //TODO alt ? template.FilePackageDefinition.AltFileNamePattern : template.FilePackageDefinition.BaseFileNamePattern; string path = alt ? textAltPath.Text : textBasePath.Text; + if (Path.GetFileName(path).Contains("*") || Path.GetFileName(path).Contains("?")) + { + filePattern = Path.GetFileName(path) + ".txt"; + path = Path.GetDirectoryName(path); + } + box.Items.Clear(); if (Directory.Exists(path)) foreach (string filePath in Directory.GetFiles(path, filePattern)) diff --git a/EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/SelectBaseAltsForm.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectBaseAltsForm.resx diff --git a/EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs index 1b15dfc..b5d58c1 100644 --- a/EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.Designer.cs @@ -1,4 +1,4 @@ -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { partial class SelectDefaultTemplateComboForm { diff --git a/EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.cs index 838b420..c07b3c1 100644 --- a/EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.cs @@ -6,7 +6,7 @@ using EM_Common_Win; using EM_Statistics; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { public partial class SelectDefaultTemplateComboForm : Form { diff --git a/EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/SelectDefaultTemplateComboForm.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectDefaultTemplateComboForm.resx diff --git a/EM_Plugins/StatisticsPresenter/SelectFilesForm.Designer.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.Designer.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/SelectFilesForm.Designer.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.Designer.cs index dd4b10a..6aa0cb3 100644 --- a/EM_Plugins/StatisticsPresenter/SelectFilesForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.Designer.cs @@ -1,4 +1,4 @@ -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { partial class SelectFilesForm { diff --git a/EM_Plugins/StatisticsPresenter/SelectFilesForm.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.cs similarity index 92% rename from EM_Plugins/StatisticsPresenter/SelectFilesForm.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.cs index 8a7194c..5adfc06 100644 --- a/EM_Plugins/StatisticsPresenter/SelectFilesForm.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.cs @@ -1,18 +1,17 @@ using EM_Common; using EM_Common_Win; -using EM_Statistics; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { public partial class SelectFilesForm : Form { internal Template.TemplateInfo templateInfo = null; - internal List filePackages = null; + public List filePackages = null; readonly List selectedIndices = new List(); // store the order of selection for Alts public SelectFilesForm(Template.TemplateInfo templateInfo) @@ -39,6 +38,7 @@ public SelectFilesForm(Template.TemplateInfo templateInfo) private void SelectPath_Click(object sender, EventArgs e) { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog() { SelectedPath = textPath.Text, Description = "Please select the folder containing the files." }; + if (Path.GetFileName(folderBrowserDialog.SelectedPath).Contains("*") || Path.GetFileName(folderBrowserDialog.SelectedPath).Contains("?")) folderBrowserDialog.SelectedPath = Path.GetDirectoryName(folderBrowserDialog.SelectedPath); if (folderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) textPath.Text = folderBrowserDialog.SelectedPath; } @@ -46,9 +46,17 @@ private void SelectPath_Click(object sender, EventArgs e) private void textPath_TextChanged(object sender, EventArgs e) { string filePattern = "*.txt"; + string path = textPath.Text; + + if (Path.GetFileName(path).Contains("*") || Path.GetFileName(path).Contains("?")) + { + filePattern = Path.GetFileName(path) + ".txt"; + path = Path.GetDirectoryName(path); + } + listFiles.Items.Clear(); - if (Directory.Exists(textPath.Text)) - foreach (string filePath in Directory.GetFiles(textPath.Text, filePattern)) + if (Directory.Exists(path)) + foreach (string filePath in Directory.GetFiles(path, filePattern)) if (isValidInput(filePath, templateInfo)) listFiles.Items.Add((new FileInfo(filePath)).Name); btnNoSuitableFiles.Visible = listFiles.Items.Count == 0; lblMissingFiles.Visible = listFiles.Items.Count > 0; diff --git a/EM_Plugins/StatisticsPresenter/SelectFilesForm.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/SelectFilesForm.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectFilesForm.resx diff --git a/EM_Plugins/StatisticsPresenter/SelectPackagesForm.Designer.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.Designer.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/SelectPackagesForm.Designer.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.Designer.cs index d700a7a..ce074d2 100644 --- a/EM_Plugins/StatisticsPresenter/SelectPackagesForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.Designer.cs @@ -1,4 +1,4 @@ -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { partial class SelectPackagesForm { diff --git a/EM_Plugins/StatisticsPresenter/SelectPackagesForm.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/SelectPackagesForm.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.cs index 0b7ff51..6e6b39a 100644 --- a/EM_Plugins/StatisticsPresenter/SelectPackagesForm.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Windows.Forms; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { public partial class SelectPackagesForm : Form { diff --git a/EM_Plugins/StatisticsPresenter/SelectPackagesForm.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/SelectPackagesForm.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/SelectPackagesForm.resx diff --git a/EM_Plugins/StatisticsPresenter/ShowInfoForm.Designer.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.Designer.cs similarity index 98% rename from EM_Plugins/StatisticsPresenter/ShowInfoForm.Designer.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.Designer.cs index 7be3741..a3f087d 100644 --- a/EM_Plugins/StatisticsPresenter/ShowInfoForm.Designer.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.Designer.cs @@ -1,4 +1,4 @@ -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { partial class ShowInfoForm { diff --git a/EM_Plugins/StatisticsPresenter/ShowInfoForm.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.cs similarity index 94% rename from EM_Plugins/StatisticsPresenter/ShowInfoForm.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.cs index d69c5a4..7555d21 100644 --- a/EM_Plugins/StatisticsPresenter/ShowInfoForm.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.cs @@ -1,7 +1,7 @@ using System; using System.Windows.Forms; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { public partial class ShowInfoForm : Form { diff --git a/EM_Plugins/StatisticsPresenter/ShowInfoForm.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/ShowInfoForm.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/ShowInfoForm.resx diff --git a/EM_Plugins/StatisticsPresenter/StatisticsPresenter.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/StatisticsPresenter.cs similarity index 81% rename from EM_Plugins/StatisticsPresenter/StatisticsPresenter.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/StatisticsPresenter.cs index 3af8565..eef0de6 100644 --- a/EM_Plugins/StatisticsPresenter/StatisticsPresenter.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/StatisticsPresenter.cs @@ -6,36 +6,16 @@ using System.Linq; using System.Windows.Forms; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { - class StatisticsPresenter : PiInterface + public class StatisticsPresenter { internal const string USER_SETTINGS_ID = "StatisticsPresenter"; internal const string BASE_OUTPUT_FOLDER = "BaseOutputFolder"; // retained, project specific user setting, stored in UI-user-settings internal const string REFORM_OUTPUT_FOLDER = "ReformOutputFolder"; // retained, project specific user setting, stored in UI-user-settings internal const string LAST_SELECTED_TEMPLATE = "LastSelectedTemplate"; // session user setting - public override string GetTitle() - { - return "Statistics Presenter"; - } - - public override string GetDescription() - { - return "This Plug-in allows selecting and presenting EUROMOD Statistics."; - } - - public override string GetFullFileName() - { - return System.Reflection.Assembly.GetExecutingAssembly().Location; - } - - public override bool IsWebApplicable() - { - return false; - } - - public override void Run(Dictionary arguments = null) + public static void Run(Dictionary arguments = null) { try { @@ -60,7 +40,7 @@ public override void Run(Dictionary arguments = null) if (errors != string.Empty) { - MessageBox.Show(GetTitle() + " was called with invalid argument(s):" + Environment.NewLine + + MessageBox.Show("Statistics Presenter was called with invalid argument(s):" + Environment.NewLine + "Valid arguments are:" + Environment.NewLine + "TemplateName (string)" + Environment.NewLine + "Template (EMS_Template)" + Environment.NewLine + @@ -86,7 +66,7 @@ public override void Run(Dictionary arguments = null) } catch (Exception exception) { - MessageBox.Show($"Failed to run plug-in '{GetTitle()}':{Environment.NewLine}{exception.Message}"); + MessageBox.Show($"Failed to run Statistics Presenter!{Environment.NewLine}{exception.Message}"); } T GetArgument(KeyValuePair argument, ref string errors) diff --git a/EM_Libraries/EM_Statistics/StatisticsPresenter/StatisticsPresenter.ico b/EM_Libraries/EM_Statistics/StatisticsPresenter/StatisticsPresenter.ico new file mode 100644 index 0000000000000000000000000000000000000000..8ffdabe2c16e594fa6473e9c14b13531d2e4b47a GIT binary patch literal 24038 zcmeHPYiJx*6uvQ)RT1N}K2W1S#Oe>QRO@h9SbtQA!v|8 z$h6* z;d>|RH(9?`)Ed6{sCXyq5Lt&bvkuw6i#Ef|-2y%M*22nD~FxCP@@HA{%PylYO&smlh!QU1`MqOSp9nvUOo&hUAsq|x8fw7YTWFcc8O(ZciEgeh&T}_xi|b`1&pAuh3?AUxNFVwBW_IIAcr5`A zk>U;U`iE`a+RklG!~L6&*kuPsST0Jld$LP_nTR-wg5S@Uo?V;<%;MUB`e5^^inR(o zs7)+0yDF~T&E|tIKUMfsBd0fD+_a;s4>ucwIQoG_-MXs*cvZ}4$IxD)wJDDMejbuj z&OJ||CV0g%)yGgHT<0H`^ck2;3c%%%tt%fw&gW>ca;0OaePgS&Gm`k@^mJYi{kwzx zQMOYZl|;Um7d6^@!FmGrOQkvdAI9%R+hFV2UcW80Ryv0AK!30D491K^ls&pl*Ut6Y z7nVkzz6rXfYU(r9!#lcHTpU(rt#Jdroi{+&bWMHboQM7Trl|Ek;_z|ECaf#wX0>P3 zDHBwG*Rt9FZWqQwUbsAMsyqGsai1Mid9s=xydODYc+Z-}r^nGjaS1tpb6NH8+HaV* zFW9E`AnjN3d3Kst??89w_`IY}EMhM+35?!Gdmrul02@QaGUvk@ew5}xQlB{9bbf~1bT`f|UWe>A=`3w$ zmvS|KpY)ELcMWX+j@zGt`y|%eN1T-_Gf91GG(Y7>#P6pmz|0$?N9a7GFSqQ>M*E*c zKFtr{Msx*fu zKRYPTh{Pa?EXU}4Ii=VI#s8FJW^YO2uP9!c1A=gyL2ZJyRtr2s6r_W&{KZ<;ah@pu zlgPoI<#0^D4xvVQm(HO3yR-|*hSIvDJ^`8AFt^5v=RLZ%4)V94#o7b$k1ivtw$Xp;o$Ys7JXXs{Vc>dn2&yt0p@_|GucY8!?{NfB5rdUAuMl3lX&{ zuwM#Y{dM(KU+@2F1P*azmVfj4q=qjai>?Q(9<>wtMr-H{S{tbEXdE9K#Y6j0?3M4N z+yvVWQbQbWrTiu8d@jiLL7Y27SCrgW@qa4>$(%2JYBmavh&kqb6RXE)_RB56 zC;CCR@-c9sg=lvg6fQ5l&ePxSPN{rMn_Flr(Q6@eJX54IfY8ksX;_nIOYsPquyVX8 z7j$8rTOe8m4bf9Xx0UGQM6-@!KYDPTUB;H^1s)oYWLBP)ex@nXEhV`{I^z~)5k21K a&Ja7%g?5f1J>gxs-%l6Hx~P8&HvA9m{fqqo literal 0 HcmV?d00001 diff --git a/EM_Plugins/StatisticsPresenter/TakeUserInput.Designer.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.Designer.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/TakeUserInput.Designer.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.Designer.cs index 088e23e..b90feb6 100644 --- a/EM_Plugins/StatisticsPresenter/TakeUserInput.Designer.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.Designer.cs @@ -1,4 +1,4 @@ -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { partial class TakeUserInput { diff --git a/EM_Plugins/StatisticsPresenter/TakeUserInput.cs b/EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.cs similarity index 99% rename from EM_Plugins/StatisticsPresenter/TakeUserInput.cs rename to EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.cs index 40d760f..e7f01ad 100644 --- a/EM_Plugins/StatisticsPresenter/TakeUserInput.cs +++ b/EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.cs @@ -6,7 +6,7 @@ using System.Windows.Forms; using EM_Statistics; -namespace StatisticsPresenter +namespace EM_Statistics.StatisticsPresenter { public partial class TakeUserInput : Form { diff --git a/EM_Plugins/StatisticsPresenter/TakeUserInput.resx b/EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.resx similarity index 100% rename from EM_Plugins/StatisticsPresenter/TakeUserInput.resx rename to EM_Libraries/EM_Statistics/StatisticsPresenter/TakeUserInput.resx diff --git a/EM_Libraries/EM_Statistics/XML_handling.cs b/EM_Libraries/EM_Statistics/XML_handling.cs index 96b3295..2f631ae 100644 --- a/EM_Libraries/EM_Statistics/XML_handling.cs +++ b/EM_Libraries/EM_Statistics/XML_handling.cs @@ -8,12 +8,13 @@ namespace EM_Statistics { public static class XML_handling { - public static bool ParseTemplateInfo(string path, out Template.TemplateInfo templateInfo, out ErrorCollector errorCollector) + public static bool ParseTemplateInfo(string pathOrInputString, out Template.TemplateInfo templateInfo, out ErrorCollector errorCollector, bool readFromString = false) { errorCollector = new ErrorCollector(); templateInfo = new Template.TemplateInfo(); try { - using (XmlReader xmlReader = XmlReader.Create(path, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment })) + using (XmlReader xmlReader = readFromString ? XmlReader.Create(new StringReader(pathOrInputString), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }) + : XmlReader.Create(pathOrInputString, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment })) { // first element must always be the TemplateInfo! while (xmlReader.NodeType != XmlNodeType.Element || xmlReader.Name != "TemplateInfo") @@ -199,6 +200,7 @@ private static Template.Page.Table.Column ReadColumn(XElement xeCol, LocalMap ta case "HasSeparatorBefore": col.hasSeparatorBefore = errorCollector.XEleGetBool(xe, xeCol, col.title); break; case "HasSeparatorAfter": col.hasSeparatorAfter = errorCollector.XEleGetBool(xe, xeCol, col.title); break; case "TiesWith": col.tiesWith = xe.Value; break; + case "MultiNo": col.multiNo = xe.Value; break; case var ctf when commonTableFields.Contains(ctf): ReadCommonTableField(xe, col, tableLocalMap, errorCollector, xeCol, col.title); break; default: errorCollector.AddXmlUnkownEleError(xe, xeCol, col.title); break; } @@ -309,6 +311,7 @@ private static Template.Action ReadAction(XElement xeAction, LocalMap localMap, case "Reform": action._reform = errorCollector.XEleGetBool(xe, xeAction); break; case "SaveResults": action._saveResult = errorCollector.XEleGetBool(xe, xeAction); break; case "BlendParameters": action._blendParameters = errorCollector.XEleGetBool(xe, xeAction); break; + case "Important": action._important = errorCollector.XEleGetBool(xe, xeAction); break; case "Parameters": action.parameters = ReadElementGroup(xe, ReadParameter, localMap, errorCollector); break; default: errorCollector.AddXmlUnkownEleError(xe, xeAction); break; } @@ -382,6 +385,7 @@ private static Template.TemplateInfo ReadInfo(XElement xeInfo, ErrorCollector er case "UserVariables": info.userVariables = ReadElementGroup(xe, ReadUserVariable, null, errorCollector); break; case "SDCDefinition": ReadTemplateInfoSDCDefinition(errorCollector, info, xe); break; case "ExportDescriptionMode": info.exportDescriptionMode = errorCollector.XEleGetEnum(xe, xeInfo); break; + case "DoMultiColumns": info.doMultiColumns = errorCollector.XEleGetBool(xe, xeInfo); break; case "DebugMode": break; default: errorCollector.AddXmlUnkownEleError(xe, xeInfo); break; } diff --git a/EM_Libraries/EM_XmlHandler/Common/TAGS.cs b/EM_Libraries/EM_XmlHandler/Common/TAGS.cs index 001f313..299b78c 100644 --- a/EM_Libraries/EM_XmlHandler/Common/TAGS.cs +++ b/EM_Libraries/EM_XmlHandler/Common/TAGS.cs @@ -5,6 +5,7 @@ namespace EM_XmlHandler public static partial class TAGS { // GENERAL TAGS + public const string ROOT_ELEMENT = "RootElement"; public const string ID = "ID"; public const string NAME = "Name"; public const string SHORT_NAME = "ShortName"; // used e.g in , @@ -23,6 +24,8 @@ public static partial class TAGS public const string SYS_PAR = "SYS_PAR"; public const string UPIND = "UPIND"; public const string UPIND_YEAR = "UPIND_YEAR"; // uprating index year values + public const string EXSTAT = "EXSTAT"; + public const string EXSTAT_YEAR = "EXSTAT_YEAR"; // uprating index year values public const string DATA = "DATA"; public const string SYS_DATA = "SYS_DATA"; public const string LOOKGROUP = "LOOKGROUP"; @@ -44,6 +47,7 @@ public static partial class TAGS public const string FUN_ID = "FunID"; public const string PAR_ID = "ParID"; public const string UPIND_ID = "UpIndID"; + public const string EXSTAT_ID = "ExStatID"; public const string DATA_ID = "DataID"; public const string LOOKGROUP_ID = "LookGroupID"; public const string EXTENSION_ID = "ExtensionID"; @@ -55,8 +59,10 @@ public static partial class TAGS public const string SWITCH = "Switch"; public const string GROUP = "Group"; public const string VALUE = "Value"; + public const string NUMBER = "Number"; + public const string LEVEL = "Level"; public const string RUN_OPTION = "RunOption"; - public const string YEAR = "Year"; // used in + public const string YEAR = "Year"; // used in , public const string PRIVATE_MAIN = "PRIVATE_MAIN"; // actually no tag, but the of the currently only private-group public const string HEAD_DEF_INC = "HeadDefInc"; public const string CURRENCY_PARAM = "CurrencyParam"; @@ -70,6 +76,7 @@ public static partial class TAGS public const string INDIRECT_TAX_TABLE_YEAR = "IndirectTaxTableYear"; public const string BEST_MATCH = "BestMatch"; public const string COMMENT = "Comment"; + public const string TABLENAME = "TableName"; // used in // VARIABLES FILE - MAIN TAGS public const string VAR = "VAR"; diff --git a/EM_Libraries/EM_XmlHandler/Common/XmlHelpers.cs b/EM_Libraries/EM_XmlHandler/Common/XmlHelpers.cs index 1e125c7..6764b80 100644 --- a/EM_Libraries/EM_XmlHandler/Common/XmlHelpers.cs +++ b/EM_Libraries/EM_XmlHandler/Common/XmlHelpers.cs @@ -1,6 +1,7 @@ using EM_Common; using System.Collections.Generic; using System.Xml; +using System.Xml.Linq; namespace EM_XmlHandler { @@ -22,6 +23,14 @@ public static string RemoveCData(string s) /// Value of inner Dictionary: content of property (e.g. SL_demo, 2014, ...) /// true for e.g. COUNTRY, meaning that there is no COUNTRYs (like for SYS -> SYSs) /// + public static Dictionary> GetXmlGroupItems(XElement xe, string tag, + bool hasId = true, bool uniqueProperties = true, bool singleItem = false) + { + using (XmlReader reader = xe.CreateReader()) + { + return GetXmlGroupItems(reader, tag, hasId, uniqueProperties, singleItem); + } + } public static Dictionary> GetXmlGroupItems(XmlReader reader, string tag, bool hasId = true, bool uniqueProperties = true, bool singleItem = false) { diff --git a/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/GetExtStatInfo.cs b/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/GetExtStatInfo.cs new file mode 100644 index 0000000..e740c84 --- /dev/null +++ b/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/GetExtStatInfo.cs @@ -0,0 +1,54 @@ +using EM_Common; +using System.Collections.Generic; + +namespace EM_XmlHandler +{ + public partial class ExeXmlReader + { + private static void GetExtStatInfo(Dictionary> extStats, + Dictionary> extStatYears, + ExeXml.Country country) + { + if (extStats == null || extStatYears == null) return; + foreach (Dictionary es in extStatYears.Values) // loop over + { + if (es.ContainsKey(TAGS.YEAR)) + { + string exStatId = es.GetOrEmpty(TAGS.EXSTAT_ID); + + if (exStatId == string.Empty) continue; + + string sAm = es.GetOrEmpty(TAGS.VALUE); + string sNum = es.GetOrEmpty(TAGS.NUMBER); + + // If there is no amount nor number, then skip (or should we add NaN anyway?) + if (string.IsNullOrEmpty(sAm) && string.IsNullOrEmpty(sNum)) continue; + + string statName = null; // get the name of the factor from + if (extStats.ContainsKey(exStatId)) + { + if (extStats[exStatId].ContainsKey(TAGS.NAME)) + statName = extStats[exStatId][TAGS.NAME]; + if (extStats[exStatId].ContainsKey(TAGS.TABLENAME)) + { + if (extStats[exStatId][TAGS.TABLENAME].Equals("Aggregates")) + { + if (!country.extStats.ContainsKey(statName)) // If uprating factor name does not exist, create a new entry + country.extStats.Add(statName, new ExeXml.ExStatDict(true)); + if (double.TryParse(EM_Helpers.AdaptDecimalSign(sAm), out double am)) country.extStats[statName].SetYearAmount(es[TAGS.YEAR], am); + if (double.TryParse(EM_Helpers.AdaptDecimalSign(sNum), out double num)) country.extStats[statName].SetYearNumber(es[TAGS.YEAR], num); + } + else + { + if (!country.extStats.ContainsKey(statName)) // If uprating factor name does not exist, create a new entry + country.extStats.Add(statName, new ExeXml.ExStatDict()); + if (double.TryParse(EM_Helpers.AdaptDecimalSign(sAm), out double am)) country.extStats[statName].SetYearAmount(es[TAGS.YEAR], am); + } + } + } + } + } + } + } +} + diff --git a/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/_ReadCountry_Main.cs b/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/_ReadCountry_Main.cs index d5fe6b9..4ab7d50 100644 --- a/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/_ReadCountry_Main.cs +++ b/EM_Libraries/EM_XmlHandler/Executable/ExeXmlReader_ReadCAO/_ReadCountry_Main.cs @@ -4,11 +4,15 @@ using System.IO; using System.Text; using System.Xml; +using System.Xml.Linq; namespace EM_XmlHandler { public partial class ExeXmlReader { + // the point of this addition here is to change the reading process below to make it much faster if only the external statistics or the incomelists are required. + public enum ReadCountryOptions { ALL, EXSTAT, ILS }; + /// /// reads the relevant content of a country file into an ExeXml.Country structure (see parameters and ExeXml.Country wrt 'relevant') /// IMPORTANT NOTES: @@ -25,38 +29,54 @@ public partial class ExeXmlReader /// if true, private elements are ignored by the reader /// if false (default), comments are not read (as the executable does not need them) public static ExeXml.Country ReadCountry(string path, string sysIdentifier, string dataIdentifier, - bool ignorePrivate, Communicator communicator, bool readComment = false) + bool ignorePrivate, Communicator communicator, bool readComment = false, ReadCountryOptions rco = ReadCountryOptions.ALL) { try { ExeXml.Country country = new ExeXml.Country(); // first read the xlm-file into simple property/value dictionaries ... - Dictionary> ctry, syss, pols, refPols, funs, pars, sysPols, sysFuns, sysPars, - upInds, upIndYears, datas, sysDatas, extSwitch, localExt, extPol, extFun, extPar, indTaxes, indTaxYears; + Dictionary> ctry = null, syss = null, pols = null, refPols = null, funs = null, pars = null, sysPols = null, sysFuns = null, sysPars = null, + upInds = null, upIndYears = null, datas = null, sysDatas = null, extSwitch = null, localExt = null, extPol = null, extFun = null, extPar = null, indTaxes = null, indTaxYears = null, exStats = null, exStatYears = null; using (StreamReader sr = new StreamReader(path, Encoding.UTF8)) + // Read the Root Element first, and then the ones within it. using (XmlReader reader = XmlReader.Create(sr)) { - ctry = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.COUNTRY, hasId: false, singleItem: true); - syss = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.SYS); - pols = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.POL); - refPols = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.REFPOL); - funs = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.FUN); - pars = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.PAR, hasId: false); - sysPols = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.SYS_POL, hasId: false); - sysFuns = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.SYS_FUN, hasId: false); - sysPars = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.SYS_PAR, hasId: false); - upInds = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.UPIND); - upIndYears = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.UPIND_YEAR, hasId: false); - datas = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.DATA); - sysDatas = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.SYS_DATA, hasId: false); - localExt = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.LOCAL_EXTENSION); - extPol = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.EXTENSION_POL, hasId: false); - extFun = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.EXTENSION_FUN, hasId: false); - extPar = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.EXTENSION_PAR, hasId: false); - extSwitch = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.EXTENSION_SWITCH, hasId: false); - indTaxes = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.INDTAX); - indTaxYears = XmlHelpers.GetXmlGroupItems(reader: reader, tag: TAGS.INDTAX_YEAR, hasId: false); + while (reader.NodeType != XmlNodeType.Element || reader.Name != TAGS.ROOT_ELEMENT) + if (!reader.Read()) return null; + XElement el = XElement.ReadFrom(reader) as XElement; + if (el == null || el.Name != TAGS.ROOT_ELEMENT) return null; + + foreach (XElement xe in el.Elements()) + { + if (xe.Value == null) continue; + switch (GetXEleName(xe)) + { + case TAGS.COUNTRY: ctry = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.COUNTRY, hasId: false, singleItem: true); break; + case TAGS.SYS + "s": syss = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.SYS); break; + case TAGS.POL + "s": pols = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.POL); break; + case TAGS.REFPOL + "s": refPols = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.REFPOL); break; + case TAGS.FUN + "s": funs = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.FUN); break; + case TAGS.PAR + "s": pars = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.PAR, hasId: false); break; + case TAGS.SYS_POL + "s": sysPols = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.SYS_POL, hasId: false); break; + case TAGS.SYS_FUN + "s": sysFuns = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.SYS_FUN, hasId: false); break; + case TAGS.SYS_PAR + "s": sysPars = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.SYS_PAR, hasId: false); break; + case TAGS.UPIND + "s": upInds = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.UPIND); break; + case TAGS.UPIND_YEAR + "s": upIndYears = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.UPIND_YEAR, hasId: false); break; + case TAGS.EXSTAT + "s": exStats = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.EXSTAT); break; + case TAGS.EXSTAT_YEAR + "s": exStatYears = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.EXSTAT_YEAR, hasId: false); break; + case TAGS.DATA + "s": datas = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.DATA); break; + case TAGS.SYS_DATA + "s": sysDatas = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.SYS_DATA, hasId: false); break; + case TAGS.LOCAL_EXTENSION + "s": localExt = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.LOCAL_EXTENSION); break; + case TAGS.EXTENSION_POL + "s": extPol = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.EXTENSION_POL, hasId: false); break; + case TAGS.EXTENSION_FUN + "s": extFun = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.EXTENSION_FUN, hasId: false); break; + case TAGS.EXTENSION_PAR + "s": extPar = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.EXTENSION_PAR, hasId: false); break; + case TAGS.EXTENSION_SWITCH + "s": extSwitch = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.EXTENSION_SWITCH, hasId: false); break; + case TAGS.INDTAX + "s": indTaxes = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.INDTAX); break; + case TAGS.INDTAX_YEAR + "s": indTaxYears = XmlHelpers.GetXmlGroupItems(xe: xe, tag: TAGS.INDTAX_YEAR, hasId: false); break; + default: continue; // simply ignore unknown tags + } + } } // ... then analyse the info: @@ -104,6 +124,8 @@ public static ExeXml.Country ReadCountry(string path, string sysIdentifier, stri if (!GetIndTaxInfo(indTaxes, indTaxYears, country)) ReportError(communicator, path, $"No values for year {country.data.indirectTaxTableYear} found in Indirect Taxes Table"); + GetExtStatInfo(exStats, exStatYears, country); + return country; } catch (Exception exception) @@ -111,5 +133,6 @@ public static ExeXml.Country ReadCountry(string path, string sysIdentifier, stri throw new Exception($"Failure reading file {path}{Environment.NewLine}{exception.Message}"); } } + private static string GetXEleName(XElement xe) { return xe.Name == null ? string.Empty : xe.Name.ToString(); } } } diff --git a/EM_Libraries/EM_XmlHandler/Executable/ExeXml_Structures.cs b/EM_Libraries/EM_XmlHandler/Executable/ExeXml_Structures.cs index 7dd44cb..95da0e0 100644 --- a/EM_Libraries/EM_XmlHandler/Executable/ExeXml_Structures.cs +++ b/EM_Libraries/EM_XmlHandler/Executable/ExeXml_Structures.cs @@ -77,7 +77,7 @@ public void SetYear(string year, double val) public bool Get(string year, out double ui) { bool allFine = allYears.ContainsKey(year) && allYears[year] != null; - ui = allFine ? (double)allYears[year] : 1; + ui = allFine ? (double)allYears[year] : 1; // Note that if get fails, the default returned is 1! return allFine; } public Dictionary GetAll() @@ -89,6 +89,101 @@ public Dictionary GetAll() } } + public class ExStatDict + { + private bool isAggregate = false; + private Dictionary allYearsValues = new Dictionary(); + private Dictionary allYearsNumbers = new Dictionary(); + private Dictionary allYearsLevels = new Dictionary(); + + public ExStatDict(bool isAggregate = false) + { + this.isAggregate = isAggregate; + } + + public bool IsAggregate() + { + return isAggregate; + } + + public void SetYearValues(string year, double num, double amn) + { + SetYearNumber(year, num); + SetYearAmount(year, amn); +// SetYearLevel(year, "Individual"); + } + + public void SetYearAmount(string year, double val) + { + // This should never really happen, but if for some reason there are duplicate values for the same year & var, keep the last one + if (allYearsValues.ContainsKey(year)) + allYearsValues[year] = val; + else + allYearsValues.Add(year, val); + } + public void SetYearNumber(string year, double val) + { + // This should never really happen, but if for some reason there are duplicate values for the same year & var, keep the last one + if (allYearsNumbers.ContainsKey(year)) + allYearsNumbers[year] = val; + else + allYearsNumbers.Add(year, val); + } + /* + public void SetYearLevel(string year, string val) + { + // This should never really happen, but if for some reason there are duplicate values for the same year & var, keep the last one + if (allYearsLevels.ContainsKey(year)) + allYearsLevels[year] = val; + else + allYearsLevels.Add(year, val); + }*/ + + // return the real amount, so value in table * 1000000 + public bool GetAmount(string year, out double ui) + { + bool allFine = allYearsValues.ContainsKey(year) && allYearsValues[year] != null; + ui = allFine ? (double)allYearsValues[year] : double.NaN; // Note that if get fails, the default returned is NaN! + return allFine; + } + // return the real number, so value in table * 1000 + public bool GetNumber(string year, out double ui) + { + bool allFine = allYearsNumbers.ContainsKey(year) && allYearsNumbers[year] != null; + ui = allFine ? (double)allYearsNumbers[year] : double.NaN; // Note that if get fails, the default returned is NaN! + return allFine; + } + /* + public bool GetLevel(string year, out string ui) + { + bool allFine = allYearsLevels.ContainsKey(year) && allYearsLevels[year] != null; + ui = allFine ? allYearsLevels[year] : null; // Note that if get fails, the default returned is null! + return allFine; + }*/ + public Dictionary GetAllAmounts() + { + Dictionary allValidValues = new Dictionary(); + foreach (KeyValuePair item in allYearsValues) + if (item.Value != null) allValidValues.Add(item.Key, (double)item.Value); + return allValidValues; + } + public Dictionary GetAllNumbers() + { + Dictionary allValidValues = new Dictionary(); + foreach (KeyValuePair item in allYearsNumbers) + if (item.Value != null) allValidValues.Add(item.Key, (double)item.Value); + return allValidValues; + } + /* + public Dictionary GetAllLevels() + { + Dictionary allValidValues = new Dictionary(); + foreach (KeyValuePair item in allYearsLevels) + if (item.Value != null) allValidValues.Add(item.Key, item.Value); + return allValidValues; + }*/ + } + public class Extension { public bool? on = null; @@ -115,6 +210,8 @@ public class Country new Dictionary(StringComparer.OrdinalIgnoreCase); public Dictionary extensions = new Dictionary(StringComparer.InvariantCultureIgnoreCase); // key: ID (for e.g. BTA or any ctry-specific extension) + public Dictionary extStats = //External Statistics + new Dictionary(StringComparer.OrdinalIgnoreCase); } public class AddOn diff --git a/EM_Plugins/Hypothetical Household/DataGenerator.cs b/EM_Plugins/Hypothetical Household/DataGenerator.cs index db59151..9baa68c 100644 --- a/EM_Plugins/Hypothetical Household/DataGenerator.cs +++ b/EM_Plugins/Hypothetical Household/DataGenerator.cs @@ -92,7 +92,6 @@ internal bool getAllFileDetails(out AllFileGenerationDetails allDetails, out Lis allDetails.fileDetails[country].allVars.Add(csvn, var.VariableName); else { - addErrorMessage(errorVars, "Duplicate Variable '" + csvn + "' found in " + country + "."); } } @@ -149,12 +148,12 @@ internal bool getAllFileDetails(out AllFileGenerationDetails allDetails, out Lis di.varName = var.VariableName; di.defaultValue = var.DefaultValue; di.conditionalValues = new Dictionary(); - foreach (VariableDataSet.Cur_DerivedVariablesDetailRow dvar in plugin.settingsData.Cur_DerivedVariablesDetail.Select("VariableName = '" + var.VariableName + "'")) + foreach (VariableDataSet.Cur_DerivedVariablesDetailRow dvar in plugin.settingsData.Cur_DerivedVariablesDetail.Select("VarId = '" + var.Id + "'")) { di.conditionalValues.Add(dvar.Condition, dvar.DerivedValue); } - allDetails.fileDetails[country].derivedVars.Add(var.VariableName, di); - + if (!allDetails.fileDetails[country].derivedVars.ContainsKey(var.VariableName)) + allDetails.fileDetails[country].derivedVars.Add(var.VariableName, di); } allDetails.fileDetails[country].numericVarValues = new Dictionary>>>(); @@ -360,9 +359,9 @@ internal string generateCountryYearData(string outputFolder, string country, str foreach (string v in fileDetails.allVars.Keys) line.Add(v); sw.WriteLine(String.Join("\t", line)); long famId = 0; - Regex matchText = new Regex(@"([a-z]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); - Regex matchTextStar = new Regex(@"(?[a-z]+)\*", RegexOptions.IgnoreCase | RegexOptions.Compiled); - Regex matchTextStarText = new Regex(@"(?[a-z]+)\*(?[a-z]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); + Regex matchText = new Regex(@"([a-z][a-z0-9]*)", RegexOptions.IgnoreCase | RegexOptions.Compiled); + Regex matchTextStar = new Regex(@"(?[a-z][a-z0-9]*)\*", RegexOptions.IgnoreCase | RegexOptions.Compiled); + Regex matchTextStarText = new Regex(@"(?[a-z][a-z0-9]*)\*(?[a-z0-9]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled); foreach (TreeListNode fam in inputForm.treeHouseholds.Nodes) { @@ -416,24 +415,13 @@ internal string generateCountryYearData(string outputFolder, string country, str line.Add(pids[p.GetValue("dataId").ToString()]); line.Add("1"); // add "dwt" DataRow row = tbl.Rows.Find(p.GetValue("dataId")); // "row" holds the actual grid data (all variable values) for this individual - foreach (string var in fileDetails.allVars.Values) + foreach (KeyValuePair var in fileDetails.allVars) { - string v = var; + string v = var.Value; + string k = var.Key; if (!row.Table.Columns.Contains(v) && v.EndsWith("_" + country)) v = v.Substring(0, v.Length - ("_" + country).Length); - if (pRanged.ContainsKey(v)) // if it is a ranged variable - { - line.Add(pRanged[v][year][curValue[famName + "_" + pName + "_" + v]].ToString()); - } - else if (pNumeric.ContainsKey(v)) // if it is a numeric variable - { - line.Add(pNumeric[v][year].ToString()); - } - else if (fileDetails.connectionVars.Contains(v)) // if it is a connection variable - { - line.Add(row[v] == DBNull.Value || row[v].ToString() == "" || !pids.ContainsKey(row[v].ToString()) ? "0" : pids[row[v].ToString()]); - } - else if (fileDetails.derivedVars.ContainsKey(v)) // if it is a derived variable + if (fileDetails.derivedVars.ContainsKey(k)) // first check if it is a derived variable (as it may be double-recorded as a basic variable with a different country-specific name) { // find the correct expression to calculate string expression = ""; @@ -462,6 +450,7 @@ internal string generateCountryYearData(string outputFolder, string country, str double totalValue = 0; foreach (string s in fileDetails.allVars.Keys) { + if (s.Equals(v)) continue; // don't add any variable with the exact same name if (s.StartsWith(match.Groups["start"].Value) && s.EndsWith(match.Groups["end"].Value)) { string baseVar = fileDetails.allVars[s]; @@ -474,6 +463,7 @@ internal string generateCountryYearData(string outputFolder, string country, str foreach (DataColumn col in row.Table.Columns) { + if (col.ColumnName.Equals(v)) continue; // don't add any variable with the exact same name if (!(pRanged.Keys.Contains(col.ColumnName) || pNumeric.Keys.Contains(col.ColumnName)) && fileDetails.allVars.ContainsKey(col.ColumnName) && col.ColumnName.StartsWith(match.Groups["start"].Value) && col.ColumnName.EndsWith(match.Groups["end"].Value)) @@ -491,6 +481,7 @@ internal string generateCountryYearData(string outputFolder, string country, str double totalValue = 0; foreach (string s in fileDetails.allVars.Keys) // add ALL matches { + if (s.Equals(v)) continue; // don't add any variable with the exact same name if (s.StartsWith(match.Groups["start"].Value)) { string baseVar = fileDetails.allVars[s]; @@ -506,6 +497,7 @@ internal string generateCountryYearData(string outputFolder, string country, str } foreach (DataColumn col in row.Table.Columns) { + if (col.ColumnName.Equals(v)) continue; // don't add any variable with the exact same name if (!(pRanged.Keys.Contains(col.ColumnName) || pNumeric.Keys.Contains(col.ColumnName)) && fileDetails.allVars.ContainsKey(col.ColumnName) && col.ColumnName.StartsWith(match.Groups["start"].Value)) @@ -543,12 +535,23 @@ internal string generateCountryYearData(string outputFolder, string country, str { realValue = row[match.Value] == DBNull.Value ? "0" : row[match.Value].ToString(); } - else + else if (row.Table.Columns.Contains(baseVar)) { realValue = row[baseVar] == DBNull.Value ? "0" : row[baseVar].ToString(); } + else + { + MessageBox.Show("Something went wrong! Variable '" + v + "' -> '" + match.Value + "' was not found."); + realValue = "0"; + return ""; + } + } + else + { + MessageBox.Show("Something went wrong! Variable '" + v + "' -> '" + match.Value + "' was not found."); + realValue = "0"; + return ""; } - else realValue = "0"; expression = expression.Replace(match.Value, realValue); } /**/ @@ -566,6 +569,18 @@ internal string generateCountryYearData(string outputFolder, string country, str line.Add("0"); } } + else if (pRanged.ContainsKey(v)) // if it is a ranged variable + { + line.Add(pRanged[v][year][curValue[famName + "_" + pName + "_" + v]].ToString()); + } + else if (pNumeric.ContainsKey(v)) // if it is a numeric variable + { + line.Add(pNumeric[v][year].ToString()); + } + else if (fileDetails.connectionVars.Contains(v)) // if it is a connection variable + { + line.Add(row[v] == DBNull.Value || row[v].ToString() == "" || !pids.ContainsKey(row[v].ToString()) ? "0" : pids[row[v].ToString()]); + } else // else it should be a categorical variable { if (row.Table.Columns.Contains(v)) @@ -656,7 +671,7 @@ private string EvaluateCondition(string cond, FileGenerationDetails fileDetails, string comparer = cond.Substring(pos, endPos - pos); double compValue; - if (!double.TryParse(cond.Substring(endPos + 1).Trim(), out compValue)) + if (!double.TryParse(cond.Substring(endPos).Trim(), out compValue)) { addErrorMessage(errorVars, "Invalid condition in derived variable condition! Variable '" + v + "' -> condition '" + cond + "' was invalid."); return string.Empty; diff --git a/EM_Plugins/Hypothetical Household/Hypothetical Household.csproj b/EM_Plugins/Hypothetical Household/Hypothetical Household.csproj index ed4ccfd..718cf72 100644 --- a/EM_Plugins/Hypothetical Household/Hypothetical Household.csproj +++ b/EM_Plugins/Hypothetical Household/Hypothetical Household.csproj @@ -117,11 +117,11 @@ ImportRefTablesForm.cs - + Form - - OpenProjectForm.cs + + SelectFolderForm.cs Form @@ -265,8 +265,8 @@ ImportRefTablesForm.cs - - OpenProjectForm.cs + + SelectFolderForm.cs PrepareProjectForm.cs diff --git a/EM_Plugins/Hypothetical Household/HypotheticalHousehold.cs b/EM_Plugins/Hypothetical Household/HypotheticalHousehold.cs index a303c2d..071989c 100644 --- a/EM_Plugins/Hypothetical Household/HypotheticalHousehold.cs +++ b/EM_Plugins/Hypothetical Household/HypotheticalHousehold.cs @@ -105,7 +105,7 @@ internal bool SelectPathOpenProject(out string projectPath) projectPath = null; try { - OpenProjectForm openProjectForm = new OpenProjectForm(); + SelectFolderForm openProjectForm = new SelectFolderForm(); if (openProjectForm.ShowDialog() == DialogResult.Cancel) return false; projectPath = openProjectForm.GetProjectPath(); @@ -198,6 +198,23 @@ internal void readSettings() CopyTableContent(settingsData.Tables[tbl.TableName], tbl, false, fixEditorType); } } + else if (oldSet.Tables.Contains("Cur_DerivedVariables") && oldSet.Tables.Contains("Cur_DerivedVariablesDetail") && !oldSet.Tables["Cur_DerivedVariables"].Columns.Contains("Id")) + { + // first copy tables + foreach (DataTable tbl in oldSet.Tables) + { + CopyTableContent(settingsData.Tables[tbl.TableName], tbl); + } + // then match the derived variable ids + foreach (DataRow row in settingsData.Tables["Cur_DerivedVariablesDetail"].Rows) + foreach (DataRow prow in settingsData.Tables["Cur_DerivedVariables"].Rows) + if (prow["VariableName"].ToString().Equals(row["VariableName"])) + { + row["VarId"] = prow["Id"]; + break; + } + + } else // latest file, just read { settingsData.ReadXml(getSettingsFile()); @@ -922,7 +939,10 @@ internal DataTable createNewHousehold(string name) foreach (DataRow r in tbl.Rows) { if (r.Field("VariableType") == EDITOR_TYPE_COMBO || r.Field("VariableType") == EDITOR_TYPE_CONNECTION || r.Field("VariableType") == EDITOR_TYPE_NUMERIC) - gridData.Columns.Add(r.Field("VariableName"), typeof(string)); + { + if (!gridData.Columns.Contains(r.Field("VariableName"))) + gridData.Columns.Add(r.Field("VariableName"), typeof(string)); + } } } return gridData; diff --git a/EM_Plugins/Hypothetical Household/InputForm.Designer.cs b/EM_Plugins/Hypothetical Household/InputForm.Designer.cs index c58dd18..8db45ce 100644 --- a/EM_Plugins/Hypothetical Household/InputForm.Designer.cs +++ b/EM_Plugins/Hypothetical Household/InputForm.Designer.cs @@ -112,6 +112,11 @@ private void InitializeComponent() this.panelFilter = new System.Windows.Forms.Panel(); this.panelTop = new System.Windows.Forms.Panel(); this.splitMainInterface = new DevExpress.XtraEditors.SplitContainerControl(); + this.barManager = new DevExpress.XtraBars.BarManager(this.components); + this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); + this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); this.panelBottom.SuspendLayout(); this.panelLeft.SuspendLayout(); this.panelLeftBottom.SuspendLayout(); @@ -133,18 +138,17 @@ private void InitializeComponent() this.panelTop.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitMainInterface)).BeginInit(); this.splitMainInterface.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.barManager)).BeginInit(); this.SuspendLayout(); - this.barManager = new DevExpress.XtraBars.BarManager(); //Added to solve the issue of the "shaking" of the cursor when right clicking. - this.barManager.Form = this; // // panelBottom // this.panelBottom.Controls.Add(this.generateButton); this.panelBottom.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panelBottom.Location = new System.Drawing.Point(0, 668); - this.panelBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.panelBottom.Location = new System.Drawing.Point(0, 543); + this.panelBottom.Margin = new System.Windows.Forms.Padding(2); this.panelBottom.Name = "panelBottom"; - this.panelBottom.Size = new System.Drawing.Size(1299, 89); + this.panelBottom.Size = new System.Drawing.Size(974, 72); this.panelBottom.TabIndex = 4; // // generateButton @@ -152,10 +156,10 @@ private void InitializeComponent() this.generateButton.Anchor = System.Windows.Forms.AnchorStyles.None; this.generateButton.Appearance.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.generateButton.Appearance.Options.UseFont = true; - this.generateButton.Location = new System.Drawing.Point(563, 11); - this.generateButton.Margin = new System.Windows.Forms.Padding(3, 15, 160, 2); + this.generateButton.Location = new System.Drawing.Point(422, 9); + this.generateButton.Margin = new System.Windows.Forms.Padding(2, 12, 120, 2); this.generateButton.Name = "generateButton"; - this.generateButton.Size = new System.Drawing.Size(212, 65); + this.generateButton.Size = new System.Drawing.Size(159, 53); this.generateButton.TabIndex = 6; this.generateButton.Text = "Generate"; this.generateButton.Click += new System.EventHandler(this.generateButton_Click); @@ -171,10 +175,10 @@ private void InitializeComponent() // this.btnHouseholdAdd.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnHouseholdAdd.BackgroundImage"))); this.btnHouseholdAdd.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.btnHouseholdAdd.Location = new System.Drawing.Point(15, 14); - this.btnHouseholdAdd.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.btnHouseholdAdd.Location = new System.Drawing.Point(11, 11); + this.btnHouseholdAdd.Margin = new System.Windows.Forms.Padding(2); this.btnHouseholdAdd.Name = "btnHouseholdAdd"; - this.btnHouseholdAdd.Size = new System.Drawing.Size(49, 50); + this.btnHouseholdAdd.Size = new System.Drawing.Size(37, 41); this.btnHouseholdAdd.TabIndex = 0; this.toolTipButtons.SetToolTip(this.btnHouseholdAdd, "Add Household"); this.btnHouseholdAdd.UseVisualStyleBackColor = true; @@ -184,10 +188,10 @@ private void InitializeComponent() // this.btnHouseholdRemove.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnHouseholdRemove.BackgroundImage"))); this.btnHouseholdRemove.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.btnHouseholdRemove.Location = new System.Drawing.Point(65, 14); - this.btnHouseholdRemove.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.btnHouseholdRemove.Location = new System.Drawing.Point(49, 11); + this.btnHouseholdRemove.Margin = new System.Windows.Forms.Padding(2); this.btnHouseholdRemove.Name = "btnHouseholdRemove"; - this.btnHouseholdRemove.Size = new System.Drawing.Size(49, 50); + this.btnHouseholdRemove.Size = new System.Drawing.Size(37, 41); this.btnHouseholdRemove.TabIndex = 1; this.toolTipButtons.SetToolTip(this.btnHouseholdRemove, "Delete Household"); this.btnHouseholdRemove.UseVisualStyleBackColor = true; @@ -197,10 +201,10 @@ private void InitializeComponent() // this.btnPersonAdd.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnPersonAdd.BackgroundImage"))); this.btnPersonAdd.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.btnPersonAdd.Location = new System.Drawing.Point(117, 14); - this.btnPersonAdd.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.btnPersonAdd.Location = new System.Drawing.Point(88, 11); + this.btnPersonAdd.Margin = new System.Windows.Forms.Padding(2); this.btnPersonAdd.Name = "btnPersonAdd"; - this.btnPersonAdd.Size = new System.Drawing.Size(49, 50); + this.btnPersonAdd.Size = new System.Drawing.Size(37, 41); this.btnPersonAdd.TabIndex = 2; this.toolTipButtons.SetToolTip(this.btnPersonAdd, "Add Person to Household"); this.btnPersonAdd.UseVisualStyleBackColor = true; @@ -210,10 +214,10 @@ private void InitializeComponent() // this.btnPersonRemove.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("btnPersonRemove.BackgroundImage"))); this.btnPersonRemove.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.btnPersonRemove.Location = new System.Drawing.Point(168, 14); - this.btnPersonRemove.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.btnPersonRemove.Location = new System.Drawing.Point(126, 11); + this.btnPersonRemove.Margin = new System.Windows.Forms.Padding(2); this.btnPersonRemove.Name = "btnPersonRemove"; - this.btnPersonRemove.Size = new System.Drawing.Size(49, 50); + this.btnPersonRemove.Size = new System.Drawing.Size(37, 41); this.btnPersonRemove.TabIndex = 3; this.toolTipButtons.SetToolTip(this.btnPersonRemove, "Delete Person from Household"); this.btnPersonRemove.UseVisualStyleBackColor = true; @@ -226,10 +230,10 @@ private void InitializeComponent() this.panelLeft.Controls.Add(this.panelLeftTop); this.panelLeft.Dock = System.Windows.Forms.DockStyle.Fill; this.panelLeft.Location = new System.Drawing.Point(0, 0); - this.panelLeft.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.panelLeft.MinimumSize = new System.Drawing.Size(210, 2); + this.panelLeft.Margin = new System.Windows.Forms.Padding(2); + this.panelLeft.MinimumSize = new System.Drawing.Size(158, 2); this.panelLeft.Name = "panelLeft"; - this.panelLeft.Size = new System.Drawing.Size(240, 630); + this.panelLeft.Size = new System.Drawing.Size(240, 512); this.panelLeft.TabIndex = 0; // // panelLeftBottom @@ -237,10 +241,10 @@ private void InitializeComponent() this.panelLeftBottom.Controls.Add(this.treeHouseholds); this.panelLeftBottom.Controls.Add(this.labelControl2); this.panelLeftBottom.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelLeftBottom.Location = new System.Drawing.Point(0, 162); - this.panelLeftBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.panelLeftBottom.Location = new System.Drawing.Point(0, 132); + this.panelLeftBottom.Margin = new System.Windows.Forms.Padding(2); this.panelLeftBottom.Name = "panelLeftBottom"; - this.panelLeftBottom.Size = new System.Drawing.Size(238, 466); + this.panelLeftBottom.Size = new System.Drawing.Size(238, 378); this.panelLeftBottom.TabIndex = 2; // // treeHouseholds @@ -251,7 +255,7 @@ private void InitializeComponent() this.treeHouseholds.Appearance.FocusedRow.Options.UseFont = true; this.treeHouseholds.Dock = System.Windows.Forms.DockStyle.Fill; this.treeHouseholds.Location = new System.Drawing.Point(0, 0); - this.treeHouseholds.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.treeHouseholds.Margin = new System.Windows.Forms.Padding(2); this.treeHouseholds.Name = "treeHouseholds"; this.treeHouseholds.OptionsBehavior.AllowCopyToClipboard = false; this.treeHouseholds.OptionsBehavior.DragNodes = true; @@ -264,7 +268,7 @@ private void InitializeComponent() this.treeHouseholds.OptionsView.ShowHorzLines = false; this.treeHouseholds.OptionsView.ShowIndicator = false; this.treeHouseholds.OptionsView.ShowVertLines = false; - this.treeHouseholds.Size = new System.Drawing.Size(238, 406); + this.treeHouseholds.Size = new System.Drawing.Size(238, 342); this.treeHouseholds.TabIndex = 2; this.treeHouseholds.ToolTipController = this.toolTipControllerGrid; this.treeHouseholds.BeforeExpand += new DevExpress.XtraTreeList.BeforeExpandEventHandler(this.treeHouseholds_BeforeExpand); @@ -290,11 +294,11 @@ private void InitializeComponent() this.labelControl2.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.Vertical; this.labelControl2.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple; this.labelControl2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.labelControl2.Location = new System.Drawing.Point(0, 406); - this.labelControl2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.labelControl2.Location = new System.Drawing.Point(0, 342); + this.labelControl2.Margin = new System.Windows.Forms.Padding(2); this.labelControl2.Name = "labelControl2"; - this.labelControl2.Padding = new System.Windows.Forms.Padding(5); - this.labelControl2.Size = new System.Drawing.Size(238, 60); + this.labelControl2.Padding = new System.Windows.Forms.Padding(4); + this.labelControl2.Size = new System.Drawing.Size(238, 36); this.labelControl2.TabIndex = 1; this.labelControl2.Text = "Please check the families and people that you wish to generate the Household Data" + " for."; @@ -310,17 +314,18 @@ private void InitializeComponent() this.panelLeftTop.Controls.Add(this.btnHouseholdAdd); this.panelLeftTop.Dock = System.Windows.Forms.DockStyle.Top; this.panelLeftTop.Location = new System.Drawing.Point(0, 0); - this.panelLeftTop.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.panelLeftTop.Margin = new System.Windows.Forms.Padding(2); this.panelLeftTop.Name = "panelLeftTop"; - this.panelLeftTop.Size = new System.Drawing.Size(238, 162); + this.panelLeftTop.Size = new System.Drawing.Size(238, 132); this.panelLeftTop.TabIndex = 1; // // resetAllAdvButton // this.resetAllAdvButton.Font = new System.Drawing.Font("Tahoma", 7F); - this.resetAllAdvButton.Location = new System.Drawing.Point(15, 98); + this.resetAllAdvButton.Location = new System.Drawing.Point(11, 80); + this.resetAllAdvButton.Margin = new System.Windows.Forms.Padding(2); this.resetAllAdvButton.Name = "resetAllAdvButton"; - this.resetAllAdvButton.Size = new System.Drawing.Size(202, 47); + this.resetAllAdvButton.Size = new System.Drawing.Size(152, 38); this.resetAllAdvButton.TabIndex = 5; this.resetAllAdvButton.Text = "Reset selected Household\'s Advanced Variables"; this.resetAllAdvButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -330,10 +335,9 @@ private void InitializeComponent() // chkSelectAll // this.chkSelectAll.AutoSize = true; - this.chkSelectAll.Location = new System.Drawing.Point(15, 70); - this.chkSelectAll.Margin = new System.Windows.Forms.Padding(4); + this.chkSelectAll.Location = new System.Drawing.Point(11, 57); this.chkSelectAll.Name = "chkSelectAll"; - this.chkSelectAll.Size = new System.Drawing.Size(210, 21); + this.chkSelectAll.Size = new System.Drawing.Size(170, 17); this.chkSelectAll.TabIndex = 4; this.chkSelectAll.Text = "Select/Unselect all households"; this.chkSelectAll.UseVisualStyleBackColor = true; @@ -352,8 +356,8 @@ private void InitializeComponent() this.helpToolStripMenuItem}); this.mainMenuStrip.Location = new System.Drawing.Point(0, 0); this.mainMenuStrip.Name = "mainMenuStrip"; - this.mainMenuStrip.Padding = new System.Windows.Forms.Padding(5, 2, 0, 2); - this.mainMenuStrip.Size = new System.Drawing.Size(1299, 38); + this.mainMenuStrip.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2); + this.mainMenuStrip.Size = new System.Drawing.Size(974, 31); this.mainMenuStrip.TabIndex = 5; this.mainMenuStrip.Text = "menuStrip1"; // @@ -369,21 +373,21 @@ private void InitializeComponent() this.ExitToolStripMenuItem}); this.projectStripMenuItem.Name = "projectStripMenuItem"; this.projectStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.projectStripMenuItem.Size = new System.Drawing.Size(69, 34); + this.projectStripMenuItem.Size = new System.Drawing.Size(56, 27); this.projectStripMenuItem.Text = "Project"; this.projectStripMenuItem.Click += new System.EventHandler(this.projectStripMenuItem_Click); // // newToolStripMenuItem // this.newToolStripMenuItem.Name = "newToolStripMenuItem"; - this.newToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.newToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.newToolStripMenuItem.Text = "New"; this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); // // openProjectToolStripMenuItem // this.openProjectToolStripMenuItem.Name = "openProjectToolStripMenuItem"; - this.openProjectToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.openProjectToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.openProjectToolStripMenuItem.Text = "Open"; this.openProjectToolStripMenuItem.Click += new System.EventHandler(this.openProjectToolStripMenuItem_Click); // @@ -391,33 +395,33 @@ private void InitializeComponent() // this.saveProjectToolStripMenuItem.Name = "saveProjectToolStripMenuItem"; this.saveProjectToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); - this.saveProjectToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.saveProjectToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.saveProjectToolStripMenuItem.Text = "Save"; this.saveProjectToolStripMenuItem.Click += new System.EventHandler(this.saveProjectToolStripMenuItem_Click); // // saveAsProjectToolStripMenuItem // this.saveAsProjectToolStripMenuItem.Name = "saveAsProjectToolStripMenuItem"; - this.saveAsProjectToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.saveAsProjectToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.saveAsProjectToolStripMenuItem.Text = "Save As"; this.saveAsProjectToolStripMenuItem.Click += new System.EventHandler(this.saveAsProjectToolStripMenuItem_Click); // // SaveAsPublicToolStripMenuItem // this.SaveAsPublicToolStripMenuItem.Name = "SaveAsPublicToolStripMenuItem"; - this.SaveAsPublicToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.SaveAsPublicToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.SaveAsPublicToolStripMenuItem.Text = "Save As Public"; this.SaveAsPublicToolStripMenuItem.Click += new System.EventHandler(this.SaveAsPublicToolStripMenuItem_Click); // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(221, 6); + this.toolStripSeparator7.Size = new System.Drawing.Size(147, 6); // // ExitToolStripMenuItem // this.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem"; - this.ExitToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + this.ExitToolStripMenuItem.Size = new System.Drawing.Size(150, 22); this.ExitToolStripMenuItem.Text = "Exit"; this.ExitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click); // @@ -430,46 +434,46 @@ private void InitializeComponent() this.showOnlyChangedValuesToolStripMenuItem, this.highlightChangedValuesToolStripMenuItem}); this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; - this.viewToolStripMenuItem.Size = new System.Drawing.Size(55, 34); + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 27); this.viewToolStripMenuItem.Text = "View"; // // showAdvancedVariablesToolStripMenuItem // this.showAdvancedVariablesToolStripMenuItem.Name = "showAdvancedVariablesToolStripMenuItem"; - this.showAdvancedVariablesToolStripMenuItem.Size = new System.Drawing.Size(266, 26); + this.showAdvancedVariablesToolStripMenuItem.Size = new System.Drawing.Size(214, 22); this.showAdvancedVariablesToolStripMenuItem.Text = "Show Advanced Variables"; this.showAdvancedVariablesToolStripMenuItem.Click += new System.EventHandler(this.showAdvancedVariablesToolStripMenuItem_Click); // // showDerivedVariablesToolStripMenuItem // this.showDerivedVariablesToolStripMenuItem.Name = "showDerivedVariablesToolStripMenuItem"; - this.showDerivedVariablesToolStripMenuItem.Size = new System.Drawing.Size(266, 26); + this.showDerivedVariablesToolStripMenuItem.Size = new System.Drawing.Size(214, 22); this.showDerivedVariablesToolStripMenuItem.Text = "Show Derived Variables"; this.showDerivedVariablesToolStripMenuItem.Click += new System.EventHandler(this.showDerivedVariablesToolStripMenuItem_Click); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(263, 6); + this.toolStripSeparator3.Size = new System.Drawing.Size(211, 6); // // showOnlyChangedValuesToolStripMenuItem // this.showOnlyChangedValuesToolStripMenuItem.Name = "showOnlyChangedValuesToolStripMenuItem"; - this.showOnlyChangedValuesToolStripMenuItem.Size = new System.Drawing.Size(266, 26); + this.showOnlyChangedValuesToolStripMenuItem.Size = new System.Drawing.Size(214, 22); this.showOnlyChangedValuesToolStripMenuItem.Text = "Show only changed values"; this.showOnlyChangedValuesToolStripMenuItem.Click += new System.EventHandler(this.showOnlyChangedValuesToolStripMenuItem_Click); // // highlightChangedValuesToolStripMenuItem // this.highlightChangedValuesToolStripMenuItem.Name = "highlightChangedValuesToolStripMenuItem"; - this.highlightChangedValuesToolStripMenuItem.Size = new System.Drawing.Size(266, 26); + this.highlightChangedValuesToolStripMenuItem.Size = new System.Drawing.Size(214, 22); this.highlightChangedValuesToolStripMenuItem.Text = "Highlight changed values"; this.highlightChangedValuesToolStripMenuItem.Click += new System.EventHandler(this.highlightChangedValuesToolStripMenuItem_Click); // // wizardToolStripMenuItem // this.wizardToolStripMenuItem.Name = "wizardToolStripMenuItem"; - this.wizardToolStripMenuItem.Size = new System.Drawing.Size(70, 34); + this.wizardToolStripMenuItem.Size = new System.Drawing.Size(55, 27); this.wizardToolStripMenuItem.Text = "Wizard"; this.wizardToolStripMenuItem.Click += new System.EventHandler(this.wizardToolStripMenuItem_Click); // @@ -479,7 +483,7 @@ private void InitializeComponent() this.importToolStripMenuItem, this.manageVariablesToolStripMenuItem}); this.advancedOptionsToolStripMenuItem.Name = "advancedOptionsToolStripMenuItem"; - this.advancedOptionsToolStripMenuItem.Size = new System.Drawing.Size(145, 34); + this.advancedOptionsToolStripMenuItem.Size = new System.Drawing.Size(117, 27); this.advancedOptionsToolStripMenuItem.Text = "Advanced Options"; // // importToolStripMenuItem @@ -489,27 +493,27 @@ private void InitializeComponent() this.importVariablesToolStripMenuItem, this.importRefTabToolStripMenuItem}); this.importToolStripMenuItem.Name = "importToolStripMenuItem"; - this.importToolStripMenuItem.Size = new System.Drawing.Size(212, 26); + this.importToolStripMenuItem.Size = new System.Drawing.Size(171, 22); this.importToolStripMenuItem.Text = "Import"; // // importHHToolStripMenuItem // this.importHHToolStripMenuItem.Name = "importHHToolStripMenuItem"; - this.importHHToolStripMenuItem.Size = new System.Drawing.Size(252, 26); + this.importHHToolStripMenuItem.Size = new System.Drawing.Size(200, 22); this.importHHToolStripMenuItem.Text = "Import Households"; this.importHHToolStripMenuItem.Click += new System.EventHandler(this.importHHToolStripMenuItem_Click); // // importVariablesToolStripMenuItem // this.importVariablesToolStripMenuItem.Name = "importVariablesToolStripMenuItem"; - this.importVariablesToolStripMenuItem.Size = new System.Drawing.Size(252, 26); + this.importVariablesToolStripMenuItem.Size = new System.Drawing.Size(200, 22); this.importVariablesToolStripMenuItem.Text = "Import Variables"; this.importVariablesToolStripMenuItem.Click += new System.EventHandler(this.importVariablesToolStripMenuItem_Click); // // importRefTabToolStripMenuItem // this.importRefTabToolStripMenuItem.Name = "importRefTabToolStripMenuItem"; - this.importRefTabToolStripMenuItem.Size = new System.Drawing.Size(252, 26); + this.importRefTabToolStripMenuItem.Size = new System.Drawing.Size(200, 22); this.importRefTabToolStripMenuItem.Text = "Import Reference Tables"; this.importRefTabToolStripMenuItem.Click += new System.EventHandler(this.importRefTabToolStripMenuItem_Click); // @@ -528,79 +532,79 @@ private void InitializeComponent() this.manageReferenceTablesToolStripMenuItem, this.saveCurrentSettingsAsDefaultToolStripMenuItem}); this.manageVariablesToolStripMenuItem.Name = "manageVariablesToolStripMenuItem"; - this.manageVariablesToolStripMenuItem.Size = new System.Drawing.Size(212, 26); + this.manageVariablesToolStripMenuItem.Size = new System.Drawing.Size(171, 22); this.manageVariablesToolStripMenuItem.Text = "Manage Settings..."; // // manageCategoriesToolStripMenuItem // this.manageCategoriesToolStripMenuItem.Name = "manageCategoriesToolStripMenuItem"; - this.manageCategoriesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageCategoriesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageCategoriesToolStripMenuItem.Text = "Manage Categories"; this.manageCategoriesToolStripMenuItem.Click += new System.EventHandler(this.manageCategoriesToolStripMenuItem_Click); // // manageCountriesToolStripMenuItem // this.manageCountriesToolStripMenuItem.Name = "manageCountriesToolStripMenuItem"; - this.manageCountriesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageCountriesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageCountriesToolStripMenuItem.Text = "Manage Countries"; this.manageCountriesToolStripMenuItem.Click += new System.EventHandler(this.manageCountriesToolStripMenuItem_Click); // // manageYearsToolStripMenuItem // this.manageYearsToolStripMenuItem.Name = "manageYearsToolStripMenuItem"; - this.manageYearsToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageYearsToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageYearsToolStripMenuItem.Text = "Manage Years"; this.manageYearsToolStripMenuItem.Click += new System.EventHandler(this.manageYearsToolStripMenuItem_Click); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(388, 6); + this.toolStripSeparator2.Size = new System.Drawing.Size(310, 6); // // manageBasicVariablesToolStripMenuItem // this.manageBasicVariablesToolStripMenuItem.Name = "manageBasicVariablesToolStripMenuItem"; - this.manageBasicVariablesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageBasicVariablesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageBasicVariablesToolStripMenuItem.Text = "Manage Basic Variables"; this.manageBasicVariablesToolStripMenuItem.Click += new System.EventHandler(this.manageBasicVariablesToolStripMenuItem_Click); // // manageAdvancedVariablesToolStripMenuItem // this.manageAdvancedVariablesToolStripMenuItem.Name = "manageAdvancedVariablesToolStripMenuItem"; - this.manageAdvancedVariablesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageAdvancedVariablesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageAdvancedVariablesToolStripMenuItem.Text = "Manage Advanced Variables"; this.manageAdvancedVariablesToolStripMenuItem.Click += new System.EventHandler(this.manageAdvancedVariablesToolStripMenuItem_Click); // // manageAdvancedCountryspecificVariablesToolStripMenuItem // this.manageAdvancedCountryspecificVariablesToolStripMenuItem.Name = "manageAdvancedCountryspecificVariablesToolStripMenuItem"; - this.manageAdvancedCountryspecificVariablesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageAdvancedCountryspecificVariablesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageAdvancedCountryspecificVariablesToolStripMenuItem.Text = "Manage Advanced Country-specific Variables"; this.manageAdvancedCountryspecificVariablesToolStripMenuItem.Click += new System.EventHandler(this.manageAdvancedCountryspecificVariablesToolStripMenuItem_Click); // // manageDerivedVariablesToolStripMenuItem // this.manageDerivedVariablesToolStripMenuItem.Name = "manageDerivedVariablesToolStripMenuItem"; - this.manageDerivedVariablesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageDerivedVariablesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageDerivedVariablesToolStripMenuItem.Text = "Manage Derived Variables"; this.manageDerivedVariablesToolStripMenuItem.Click += new System.EventHandler(this.manageDerivedVariablesToolStripMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(388, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(310, 6); // // manageReferenceTablesToolStripMenuItem // this.manageReferenceTablesToolStripMenuItem.Name = "manageReferenceTablesToolStripMenuItem"; - this.manageReferenceTablesToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.manageReferenceTablesToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.manageReferenceTablesToolStripMenuItem.Text = "Manage Reference Tables"; this.manageReferenceTablesToolStripMenuItem.Click += new System.EventHandler(this.manageReferenceTablesToolStripMenuItem_Click); // // saveCurrentSettingsAsDefaultToolStripMenuItem // this.saveCurrentSettingsAsDefaultToolStripMenuItem.Name = "saveCurrentSettingsAsDefaultToolStripMenuItem"; - this.saveCurrentSettingsAsDefaultToolStripMenuItem.Size = new System.Drawing.Size(391, 26); + this.saveCurrentSettingsAsDefaultToolStripMenuItem.Size = new System.Drawing.Size(313, 22); this.saveCurrentSettingsAsDefaultToolStripMenuItem.Text = "Save Settings as Default"; this.saveCurrentSettingsAsDefaultToolStripMenuItem.Click += new System.EventHandler(this.saveCurrentSettingsAsDefaultToolStripMenuItem_Click); // @@ -611,27 +615,27 @@ private void InitializeComponent() this.breakDownCountryYearToolStripMenuItem, this.budgetConstraintsToolStripMenuItem}); this.statisticsToolStripMenuItem.Name = "statisticsToolStripMenuItem"; - this.statisticsToolStripMenuItem.Size = new System.Drawing.Size(81, 34); + this.statisticsToolStripMenuItem.Size = new System.Drawing.Size(65, 27); this.statisticsToolStripMenuItem.Text = "Statistics"; // // breakDownTypesToolStripMenuItem // this.breakDownTypesToolStripMenuItem.Name = "breakDownTypesToolStripMenuItem"; - this.breakDownTypesToolStripMenuItem.Size = new System.Drawing.Size(309, 26); + this.breakDownTypesToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.breakDownTypesToolStripMenuItem.Text = "Break Down per Household Type"; this.breakDownTypesToolStripMenuItem.Click += new System.EventHandler(this.breakDownTypesToolStripMenuItem_Click); // // breakDownCountryYearToolStripMenuItem // this.breakDownCountryYearToolStripMenuItem.Name = "breakDownCountryYearToolStripMenuItem"; - this.breakDownCountryYearToolStripMenuItem.Size = new System.Drawing.Size(309, 26); + this.breakDownCountryYearToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.breakDownCountryYearToolStripMenuItem.Text = "Break Down per Country/Year"; this.breakDownCountryYearToolStripMenuItem.Click += new System.EventHandler(this.breakDownCountryYearToolStripMenuItem_Click); // // budgetConstraintsToolStripMenuItem // this.budgetConstraintsToolStripMenuItem.Name = "budgetConstraintsToolStripMenuItem"; - this.budgetConstraintsToolStripMenuItem.Size = new System.Drawing.Size(309, 26); + this.budgetConstraintsToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.budgetConstraintsToolStripMenuItem.Text = "Budget Constraints"; this.budgetConstraintsToolStripMenuItem.Click += new System.EventHandler(this.budgetConstraintsToolStripMenuItem_Click); // @@ -640,13 +644,13 @@ private void InitializeComponent() this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.aboutToolStripMenuItem}); this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - this.helpToolStripMenuItem.Size = new System.Drawing.Size(55, 34); + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 27); this.helpToolStripMenuItem.Text = "Help"; // // aboutToolStripMenuItem // this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(133, 26); + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(107, 22); this.aboutToolStripMenuItem.Text = "About"; this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); // @@ -658,19 +662,18 @@ private void InitializeComponent() this.panelRightTop.Controls.Add(this.panelCountries); this.panelRightTop.Dock = System.Windows.Forms.DockStyle.Top; this.panelRightTop.Location = new System.Drawing.Point(0, 0); - this.panelRightTop.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.panelRightTop.Margin = new System.Windows.Forms.Padding(2); this.panelRightTop.Name = "panelRightTop"; - this.panelRightTop.Size = new System.Drawing.Size(1044, 103); + this.panelRightTop.Size = new System.Drawing.Size(721, 84); this.panelRightTop.TabIndex = 11; // // separatorLine // this.separatorLine.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.separatorLine.Dock = System.Windows.Forms.DockStyle.Bottom; - this.separatorLine.Location = new System.Drawing.Point(0, 102); - this.separatorLine.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + this.separatorLine.Location = new System.Drawing.Point(0, 83); this.separatorLine.Name = "separatorLine"; - this.separatorLine.Size = new System.Drawing.Size(1044, 1); + this.separatorLine.Size = new System.Drawing.Size(721, 1); this.separatorLine.TabIndex = 9; // // panelYears @@ -678,19 +681,17 @@ private void InitializeComponent() this.panelYears.Controls.Add(this.labelControl5); this.panelYears.Controls.Add(this.labelSelectedYears); this.panelYears.Controls.Add(this.yearsCheckedComboBoxEdit); - this.panelYears.Location = new System.Drawing.Point(476, 0); - this.panelYears.Margin = new System.Windows.Forms.Padding(4); + this.panelYears.Location = new System.Drawing.Point(357, 0); this.panelYears.Name = "panelYears"; - this.panelYears.Size = new System.Drawing.Size(475, 103); + this.panelYears.Size = new System.Drawing.Size(356, 84); this.panelYears.TabIndex = 8; // // labelControl5 // this.labelControl5.Appearance.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(161))); - this.labelControl5.Location = new System.Drawing.Point(16, 16); - this.labelControl5.Margin = new System.Windows.Forms.Padding(4); + this.labelControl5.Location = new System.Drawing.Point(12, 13); this.labelControl5.Name = "labelControl5"; - this.labelControl5.Size = new System.Drawing.Size(43, 17); + this.labelControl5.Size = new System.Drawing.Size(35, 13); this.labelControl5.TabIndex = 5; this.labelControl5.Text = "Years:"; // @@ -699,24 +700,22 @@ private void InitializeComponent() this.labelSelectedYears.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Top; this.labelSelectedYears.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap; this.labelSelectedYears.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelSelectedYears.Location = new System.Drawing.Point(16, 44); - this.labelSelectedYears.Margin = new System.Windows.Forms.Padding(4); + this.labelSelectedYears.Location = new System.Drawing.Point(12, 36); this.labelSelectedYears.Name = "labelSelectedYears"; - this.labelSelectedYears.Size = new System.Drawing.Size(448, 55); + this.labelSelectedYears.Size = new System.Drawing.Size(336, 45); this.labelSelectedYears.TabIndex = 6; this.labelSelectedYears.Text = "No years selected!"; // // yearsCheckedComboBoxEdit // - this.yearsCheckedComboBoxEdit.Location = new System.Drawing.Point(71, 12); - this.yearsCheckedComboBoxEdit.Margin = new System.Windows.Forms.Padding(4); + this.yearsCheckedComboBoxEdit.Location = new System.Drawing.Point(53, 10); this.yearsCheckedComboBoxEdit.Name = "yearsCheckedComboBoxEdit"; this.yearsCheckedComboBoxEdit.Properties.AllowMultiSelect = true; this.yearsCheckedComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); this.yearsCheckedComboBoxEdit.Properties.DisplayMember = "Year"; this.yearsCheckedComboBoxEdit.Properties.ValueMember = "Year"; - this.yearsCheckedComboBoxEdit.Size = new System.Drawing.Size(151, 22); + this.yearsCheckedComboBoxEdit.Size = new System.Drawing.Size(113, 20); this.yearsCheckedComboBoxEdit.TabIndex = 4; this.yearsCheckedComboBoxEdit.EditValueChanged += new System.EventHandler(this.yearsCheckedComboBoxEdit_EditValueChanged); // @@ -726,32 +725,29 @@ private void InitializeComponent() this.panelCountries.Controls.Add(this.countriesCheckedComboBoxEdit); this.panelCountries.Controls.Add(this.labelSelectedCountries); this.panelCountries.Location = new System.Drawing.Point(0, 0); - this.panelCountries.Margin = new System.Windows.Forms.Padding(4); this.panelCountries.Name = "panelCountries"; - this.panelCountries.Size = new System.Drawing.Size(475, 103); + this.panelCountries.Size = new System.Drawing.Size(356, 84); this.panelCountries.TabIndex = 7; // // labelControl1 // this.labelControl1.Appearance.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(161))); - this.labelControl1.Location = new System.Drawing.Point(19, 16); - this.labelControl1.Margin = new System.Windows.Forms.Padding(4); + this.labelControl1.Location = new System.Drawing.Point(14, 13); this.labelControl1.Name = "labelControl1"; - this.labelControl1.Size = new System.Drawing.Size(72, 17); + this.labelControl1.Size = new System.Drawing.Size(57, 13); this.labelControl1.TabIndex = 2; this.labelControl1.Text = "Countries:"; // // countriesCheckedComboBoxEdit // - this.countriesCheckedComboBoxEdit.Location = new System.Drawing.Point(103, 12); - this.countriesCheckedComboBoxEdit.Margin = new System.Windows.Forms.Padding(4); + this.countriesCheckedComboBoxEdit.Location = new System.Drawing.Point(77, 10); this.countriesCheckedComboBoxEdit.Name = "countriesCheckedComboBoxEdit"; this.countriesCheckedComboBoxEdit.Properties.AllowMultiSelect = true; this.countriesCheckedComboBoxEdit.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)}); this.countriesCheckedComboBoxEdit.Properties.DisplayMember = "Country"; this.countriesCheckedComboBoxEdit.Properties.ValueMember = "Country"; - this.countriesCheckedComboBoxEdit.Size = new System.Drawing.Size(151, 22); + this.countriesCheckedComboBoxEdit.Size = new System.Drawing.Size(113, 20); this.countriesCheckedComboBoxEdit.TabIndex = 1; this.countriesCheckedComboBoxEdit.EditValueChanged += new System.EventHandler(this.countriesCheckedComboBoxEdit_EditValueChanged); // @@ -760,19 +756,17 @@ private void InitializeComponent() this.labelSelectedCountries.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Top; this.labelSelectedCountries.Appearance.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap; this.labelSelectedCountries.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; - this.labelSelectedCountries.Location = new System.Drawing.Point(19, 44); - this.labelSelectedCountries.Margin = new System.Windows.Forms.Padding(4); + this.labelSelectedCountries.Location = new System.Drawing.Point(14, 36); this.labelSelectedCountries.Name = "labelSelectedCountries"; - this.labelSelectedCountries.Size = new System.Drawing.Size(439, 55); + this.labelSelectedCountries.Size = new System.Drawing.Size(329, 45); this.labelSelectedCountries.TabIndex = 3; this.labelSelectedCountries.Text = "No countries selected!"; // // labelControl3 // - this.labelControl3.Location = new System.Drawing.Point(15, 12); - this.labelControl3.Margin = new System.Windows.Forms.Padding(4); + this.labelControl3.Location = new System.Drawing.Point(11, 10); this.labelControl3.Name = "labelControl3"; - this.labelControl3.Size = new System.Drawing.Size(85, 16); + this.labelControl3.Size = new System.Drawing.Size(69, 13); this.labelControl3.TabIndex = 2; this.labelControl3.Text = "Variable Filter:"; // @@ -780,10 +774,9 @@ private void InitializeComponent() // this.txtQuickFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txtQuickFilter.Location = new System.Drawing.Point(115, 9); - this.txtQuickFilter.Margin = new System.Windows.Forms.Padding(4); + this.txtQuickFilter.Location = new System.Drawing.Point(86, 7); this.txtQuickFilter.Name = "txtQuickFilter"; - this.txtQuickFilter.Size = new System.Drawing.Size(915, 22); + this.txtQuickFilter.Size = new System.Drawing.Size(624, 20); this.txtQuickFilter.TabIndex = 1; this.txtQuickFilter.EditValueChanged += new System.EventHandler(this.txtQuickFilter_EditValueChanged); // @@ -792,10 +785,10 @@ private void InitializeComponent() this.panelRightBottom.Controls.Add(this.gridHousehold); this.panelRightBottom.Controls.Add(this.panelFilter); this.panelRightBottom.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelRightBottom.Location = new System.Drawing.Point(0, 103); - this.panelRightBottom.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.panelRightBottom.Location = new System.Drawing.Point(0, 84); + this.panelRightBottom.Margin = new System.Windows.Forms.Padding(2); this.panelRightBottom.Name = "panelRightBottom"; - this.panelRightBottom.Size = new System.Drawing.Size(1044, 523); + this.panelRightBottom.Size = new System.Drawing.Size(721, 424); this.panelRightBottom.TabIndex = 10; // // gridHousehold @@ -850,8 +843,8 @@ private void InitializeComponent() this.gridHousehold.Appearance.VertLine.Options.UseBackColor = true; this.gridHousehold.Appearance.VertLine.Options.UseBorderColor = true; this.gridHousehold.Dock = System.Windows.Forms.DockStyle.Fill; - this.gridHousehold.Location = new System.Drawing.Point(0, 46); - this.gridHousehold.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.gridHousehold.Location = new System.Drawing.Point(0, 37); + this.gridHousehold.Margin = new System.Windows.Forms.Padding(2); this.gridHousehold.Name = "gridHousehold"; this.gridHousehold.OptionsBehavior.ResizeRowHeaders = false; this.gridHousehold.OptionsBehavior.ShowEditorOnMouseUp = true; @@ -861,7 +854,7 @@ private void InitializeComponent() this.editorFloat, this.repositoryItemPopupContainerEditNumeric}); this.gridHousehold.RowHeaderWidth = 150; - this.gridHousehold.Size = new System.Drawing.Size(1044, 477); + this.gridHousehold.Size = new System.Drawing.Size(721, 387); this.gridHousehold.TabIndex = 0; this.gridHousehold.ToolTipController = this.toolTipControllerGrid; this.gridHousehold.CellValueChanged += new DevExpress.XtraVerticalGrid.Events.CellValueChangedEventHandler(this.gridHousehold_CellValueChanged); @@ -900,9 +893,8 @@ private void InitializeComponent() this.panelFilter.Controls.Add(this.labelControl3); this.panelFilter.Dock = System.Windows.Forms.DockStyle.Top; this.panelFilter.Location = new System.Drawing.Point(0, 0); - this.panelFilter.Margin = new System.Windows.Forms.Padding(4); this.panelFilter.Name = "panelFilter"; - this.panelFilter.Size = new System.Drawing.Size(1044, 46); + this.panelFilter.Size = new System.Drawing.Size(721, 37); this.panelFilter.TabIndex = 8; // // panelTop @@ -910,18 +902,16 @@ private void InitializeComponent() this.panelTop.Controls.Add(this.mainMenuStrip); this.panelTop.Dock = System.Windows.Forms.DockStyle.Top; this.panelTop.Location = new System.Drawing.Point(0, 0); - this.panelTop.Margin = new System.Windows.Forms.Padding(4); this.panelTop.Name = "panelTop"; - this.panelTop.Size = new System.Drawing.Size(1299, 38); + this.panelTop.Size = new System.Drawing.Size(974, 31); this.panelTop.TabIndex = 5; // // splitMainInterface // this.splitMainInterface.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitMainInterface.Location = new System.Drawing.Point(0, 38); - this.splitMainInterface.Margin = new System.Windows.Forms.Padding(4); + this.splitMainInterface.Location = new System.Drawing.Point(0, 31); this.splitMainInterface.Name = "splitMainInterface"; - this.splitMainInterface.Padding = new System.Windows.Forms.Padding(3, 0, 3, 0); + this.splitMainInterface.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0); this.splitMainInterface.Panel1.Controls.Add(this.panelLeft); this.splitMainInterface.Panel1.MinSize = 180; this.splitMainInterface.Panel1.Text = "Panel1"; @@ -930,21 +920,62 @@ private void InitializeComponent() this.splitMainInterface.Panel2.Controls.Add(this.panelRightTop); this.splitMainInterface.Panel2.MinSize = 200; this.splitMainInterface.Panel2.Text = "Panel2"; - this.splitMainInterface.Size = new System.Drawing.Size(1299, 630); + this.splitMainInterface.Size = new System.Drawing.Size(974, 512); this.splitMainInterface.SplitterPosition = 240; this.splitMainInterface.TabIndex = 6; this.splitMainInterface.SplitterMoved += new System.EventHandler(this.splitMainInterface_SplitterMoved); // + // barManager + // + this.barManager.DockControls.Add(this.barDockControlTop); + this.barManager.DockControls.Add(this.barDockControlBottom); + this.barManager.DockControls.Add(this.barDockControlLeft); + this.barManager.DockControls.Add(this.barDockControlRight); + this.barManager.Form = this; + this.barManager.MaxItemId = 0; + // + // barDockControlTop + // + this.barDockControlTop.CausesValidation = false; + this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; + this.barDockControlTop.Location = new System.Drawing.Point(0, 0); + this.barDockControlTop.Size = new System.Drawing.Size(974, 0); + // + // barDockControlBottom + // + this.barDockControlBottom.CausesValidation = false; + this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; + this.barDockControlBottom.Location = new System.Drawing.Point(0, 615); + this.barDockControlBottom.Size = new System.Drawing.Size(974, 0); + // + // barDockControlLeft + // + this.barDockControlLeft.CausesValidation = false; + this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; + this.barDockControlLeft.Location = new System.Drawing.Point(0, 0); + this.barDockControlLeft.Size = new System.Drawing.Size(0, 615); + // + // barDockControlRight + // + this.barDockControlRight.CausesValidation = false; + this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; + this.barDockControlRight.Location = new System.Drawing.Point(974, 0); + this.barDockControlRight.Size = new System.Drawing.Size(0, 615); + // // InputForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1299, 757); + this.ClientSize = new System.Drawing.Size(974, 615); this.Controls.Add(this.splitMainInterface); this.Controls.Add(this.panelBottom); this.Controls.Add(this.panelTop); - this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.MinimumSize = new System.Drawing.Size(1314, 415); + this.Controls.Add(this.barDockControlLeft); + this.Controls.Add(this.barDockControlRight); + this.Controls.Add(this.barDockControlBottom); + this.Controls.Add(this.barDockControlTop); + this.Margin = new System.Windows.Forms.Padding(2); + this.MinimumSize = new System.Drawing.Size(990, 345); this.Name = "InputForm"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; @@ -980,6 +1011,7 @@ private void InitializeComponent() this.panelTop.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitMainInterface)).EndInit(); this.splitMainInterface.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.barManager)).EndInit(); this.ResumeLayout(false); } @@ -1061,5 +1093,9 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem importToolStripMenuItem; private System.Windows.Forms.Button resetAllAdvButton; protected DevExpress.XtraBars.BarManager barManager; + private DevExpress.XtraBars.BarDockControl barDockControlTop; + private DevExpress.XtraBars.BarDockControl barDockControlBottom; + private DevExpress.XtraBars.BarDockControl barDockControlLeft; + private DevExpress.XtraBars.BarDockControl barDockControlRight; } } \ No newline at end of file diff --git a/EM_Plugins/Hypothetical Household/InputForm.cs b/EM_Plugins/Hypothetical Household/InputForm.cs index 347d13c..21f2a64 100644 --- a/EM_Plugins/Hypothetical Household/InputForm.cs +++ b/EM_Plugins/Hypothetical Household/InputForm.cs @@ -866,16 +866,13 @@ private void importRefTabToolStripMenuItem_Click(object sender, EventArgs e) private string SelectImportFolder() { - FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog() - { - Description = "Please choose the folder of the HHOT project which serves as import source ...", - SelectedPath = Plugin.currentProjectPath - }; - if (folderBrowserDialog.ShowDialog() == DialogResult.Cancel) return null; + SelectFolderForm sff = new SelectFolderForm("HHoT plugin - Import", "Please choose the folder of the HHOT project which serves as import source ...", Plugin.currentProjectPath); + + if (sff.ShowDialog() == DialogResult.Cancel) return null; string error; - if (Plugin.IsHHotProjectPath(folderBrowserDialog.SelectedPath, out error)) return folderBrowserDialog.SelectedPath; - MessageBox.Show("Folder " + folderBrowserDialog.SelectedPath + " does not contain a valid HHOT project." + Environment.NewLine + error); + if (Plugin.IsHHotProjectPath(sff.selectedPath, out error)) return sff.selectedPath; + MessageBox.Show("Folder " + sff.selectedPath + " does not contain a valid HHOT project." + Environment.NewLine + error); return null; } diff --git a/EM_Plugins/Hypothetical Household/InputForm.resx b/EM_Plugins/Hypothetical Household/InputForm.resx index c18985b..a3a6e3b 100644 --- a/EM_Plugins/Hypothetical Household/InputForm.resx +++ b/EM_Plugins/Hypothetical Household/InputForm.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 186, 6 + 302, 17 @@ -232,10 +232,13 @@ - 26, 5 + 135, 17 - 269, 8 + 434, 17 + + + 17, 17 46 diff --git a/EM_Plugins/Hypothetical Household/NumericEditor.cs b/EM_Plugins/Hypothetical Household/NumericEditor.cs index 7568edf..73f6c80 100644 --- a/EM_Plugins/Hypothetical Household/NumericEditor.cs +++ b/EM_Plugins/Hypothetical Household/NumericEditor.cs @@ -30,6 +30,12 @@ public NumericEditor(Program _plugin, bool _isRange = true) labelStep.Visible = isRange; Height = isRange?140:90; labelStart.Text = isRange ? "Starting Value:" : "Value:"; + Enter += NumericEditor_Enter; + } + + private void NumericEditor_Enter(object sender, EventArgs e) + { + numericUpDownStartingValue.Select(0, numericUpDownStartingValue.Value.ToString().Length); } public string EditValue diff --git a/EM_Plugins/Hypothetical Household/OpenProjectForm.Designer.cs b/EM_Plugins/Hypothetical Household/SelectFolderForm.Designer.cs similarity index 99% rename from EM_Plugins/Hypothetical Household/OpenProjectForm.Designer.cs rename to EM_Plugins/Hypothetical Household/SelectFolderForm.Designer.cs index 7e594f2..61d530b 100644 --- a/EM_Plugins/Hypothetical Household/OpenProjectForm.Designer.cs +++ b/EM_Plugins/Hypothetical Household/SelectFolderForm.Designer.cs @@ -1,7 +1,7 @@  namespace HypotheticalHousehold { - partial class OpenProjectForm + partial class SelectFolderForm { /// /// Required designer variable. @@ -29,7 +29,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OpenProjectForm)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectFolderForm)); this.txtProjectPath = new System.Windows.Forms.TextBox(); this.buttonSelectPath = new DevExpress.XtraEditors.SimpleButton(); this.buttonOK = new DevExpress.XtraEditors.SimpleButton(); diff --git a/EM_Plugins/Hypothetical Household/OpenProjectForm.cs b/EM_Plugins/Hypothetical Household/SelectFolderForm.cs similarity index 79% rename from EM_Plugins/Hypothetical Household/OpenProjectForm.cs rename to EM_Plugins/Hypothetical Household/SelectFolderForm.cs index 346335a..a297079 100644 --- a/EM_Plugins/Hypothetical Household/OpenProjectForm.cs +++ b/EM_Plugins/Hypothetical Household/SelectFolderForm.cs @@ -11,14 +11,22 @@ namespace HypotheticalHousehold { - public partial class OpenProjectForm : Form + public partial class SelectFolderForm : Form { - private string projectPath = null; - public OpenProjectForm() + internal string selectedPath = null; + internal string label = null; + public SelectFolderForm() { InitializeComponent(); } + public SelectFolderForm(string title, string label, string path): this() + { + Text = title; + label1.Text = label; + txtProjectPath.Text = path; + } + private void buttonSelectPath_Click(object sender, EventArgs e) { FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog() @@ -45,7 +53,7 @@ private void buttonOK_Click(object sender, EventArgs e) return; } - projectPath = txtProjectPath.Text; + selectedPath = txtProjectPath.Text; } catch (Exception exception) { @@ -57,7 +65,7 @@ private void buttonOK_Click(object sender, EventArgs e) internal string GetProjectPath() { - return projectPath; + return selectedPath; } } diff --git a/EM_Plugins/Hypothetical Household/OpenProjectForm.resx b/EM_Plugins/Hypothetical Household/SelectFolderForm.resx similarity index 100% rename from EM_Plugins/Hypothetical Household/OpenProjectForm.resx rename to EM_Plugins/Hypothetical Household/SelectFolderForm.resx diff --git a/EM_Plugins/Hypothetical Household/Statistics/SimpleStatistics.cs b/EM_Plugins/Hypothetical Household/Statistics/SimpleStatistics.cs index 7b97a32..b4ae6e7 100644 --- a/EM_Plugins/Hypothetical Household/Statistics/SimpleStatistics.cs +++ b/EM_Plugins/Hypothetical Household/Statistics/SimpleStatistics.cs @@ -1,5 +1,4 @@ -using EM_Common; -using EM_Statistics; +using EM_Statistics; using System; using System.Collections.Generic; using System.IO; @@ -181,14 +180,13 @@ private static List GetPlainFileList(List hhTypes_files) private static void StartPresenter(string templateName, List filePackages, List userVariables) { - PiInterface statisticsPresenter = PiLoader.GetPlugIn("Statistics Presenter"); Dictionary args = new Dictionary() { { "templatename", Path.Combine(Program.getHHOTfolder(), templateName) }, { "userinput", userVariables }, { "FilePackages", filePackages } }; - statisticsPresenter.Run(args); + EM_Statistics.StatisticsPresenter.StatisticsPresenter.Run(args); } } } \ No newline at end of file diff --git a/EM_Plugins/Hypothetical Household/VariableDataSet.Designer.cs b/EM_Plugins/Hypothetical Household/VariableDataSet.Designer.cs index dc3d824..16a3e64 100644 --- a/EM_Plugins/Hypothetical Household/VariableDataSet.Designer.cs +++ b/EM_Plugins/Hypothetical Household/VariableDataSet.Designer.cs @@ -80,8 +80,6 @@ public partial class VariableDataSet : global::System.Data.DataSet { private global::System.Data.DataRelation relationCategories_DerivedVariables; - private global::System.Data.DataRelation relationDerivedVariables_DerivedVariablesDetail; - private global::System.Data.DataRelation relationCategories_AdvancedVariables2; private global::System.Data.DataRelation relationCategories_AdvancedVariables11; @@ -98,10 +96,12 @@ public partial class VariableDataSet : global::System.Data.DataSet { private global::System.Data.DataRelation relationDerivedVariables_DerivedVariablesDetail1; + private global::System.Data.DataRelation relationDerivedVariables_DerivedVariablesDetail; + private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public VariableDataSet() { this.BeginInit(); this.InitClass(); @@ -112,7 +112,7 @@ public VariableDataSet() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected VariableDataSet(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context, false) { if ((this.IsBinarySerialized(info, context) == true)) { @@ -208,7 +208,7 @@ protected VariableDataSet(global::System.Runtime.Serialization.SerializationInfo } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_BasicCountrySpecificDetailDataTable Cur_BasicCountrySpecificDetail { @@ -218,7 +218,7 @@ public Cur_BasicCountrySpecificDetailDataTable Cur_BasicCountrySpecificDetail { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_CategoriesDataTable Cur_Categories { @@ -228,7 +228,7 @@ public Cur_CategoriesDataTable Cur_Categories { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_CountriesDataTable Cur_Countries { @@ -238,7 +238,7 @@ public Cur_CountriesDataTable Cur_Countries { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_AdvancedVariablesDataTable Cur_AdvancedVariables { @@ -248,7 +248,7 @@ public Cur_AdvancedVariablesDataTable Cur_AdvancedVariables { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_AdvancedCountrySpecificVariablesDataTable Cur_AdvancedCountrySpecificVariables { @@ -258,7 +258,7 @@ public Cur_AdvancedCountrySpecificVariablesDataTable Cur_AdvancedCountrySpecific } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_BasicVariablesDataTable Cur_BasicVariables { @@ -268,7 +268,7 @@ public Cur_BasicVariablesDataTable Cur_BasicVariables { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_AdvancedCountrySpecificDetailDataTable Cur_AdvancedCountrySpecificDetail { @@ -278,7 +278,7 @@ public Cur_AdvancedCountrySpecificDetailDataTable Cur_AdvancedCountrySpecificDet } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_YearsDataTable Cur_Years { @@ -288,7 +288,7 @@ public Cur_YearsDataTable Cur_Years { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_DerivedVariablesDataTable Cur_DerivedVariables { @@ -298,7 +298,7 @@ public Cur_DerivedVariablesDataTable Cur_DerivedVariables { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Cur_DerivedVariablesDetailDataTable Cur_DerivedVariablesDetail { @@ -308,7 +308,7 @@ public Cur_DerivedVariablesDetailDataTable Cur_DerivedVariablesDetail { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_BasicCountrySpecificDetailDataTable Def_BasicCountrySpecificDetail { @@ -318,7 +318,7 @@ public Def_BasicCountrySpecificDetailDataTable Def_BasicCountrySpecificDetail { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_CategoriesDataTable Def_Categories { @@ -328,7 +328,7 @@ public Def_CategoriesDataTable Def_Categories { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_CountriesDataTable Def_Countries { @@ -338,7 +338,7 @@ public Def_CountriesDataTable Def_Countries { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_AdvancedVariablesDataTable Def_AdvancedVariables { @@ -348,7 +348,7 @@ public Def_AdvancedVariablesDataTable Def_AdvancedVariables { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_AdvancedCountrySpecificVariablesDataTable Def_AdvancedCountrySpecificVariables { @@ -358,7 +358,7 @@ public Def_AdvancedCountrySpecificVariablesDataTable Def_AdvancedCountrySpecific } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_BasicVariablesDataTable Def_BasicVariables { @@ -368,7 +368,7 @@ public Def_BasicVariablesDataTable Def_BasicVariables { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_AdvancedCountrySpecificDetailDataTable Def_AdvancedCountrySpecificDetail { @@ -378,7 +378,7 @@ public Def_AdvancedCountrySpecificDetailDataTable Def_AdvancedCountrySpecificDet } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_YearsDataTable Def_Years { @@ -388,7 +388,7 @@ public Def_YearsDataTable Def_Years { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_DerivedVariablesDataTable Def_DerivedVariables { @@ -398,7 +398,7 @@ public Def_DerivedVariablesDataTable Def_DerivedVariables { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public Def_DerivedVariablesDetailDataTable Def_DerivedVariablesDetail { @@ -408,7 +408,7 @@ public Def_DerivedVariablesDetailDataTable Def_DerivedVariablesDetail { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] public GeneralDataTable General { @@ -418,7 +418,7 @@ public GeneralDataTable General { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.BrowsableAttribute(true)] [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)] public override global::System.Data.SchemaSerializationMode SchemaSerializationMode { @@ -431,7 +431,7 @@ public GeneralDataTable General { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] public new global::System.Data.DataTableCollection Tables { get { @@ -440,7 +440,7 @@ public GeneralDataTable General { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] public new global::System.Data.DataRelationCollection Relations { get { @@ -449,7 +449,7 @@ public GeneralDataTable General { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void InitializeDerivedDataSet() { this.BeginInit(); this.InitClass(); @@ -457,7 +457,7 @@ protected override void InitializeDerivedDataSet() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataSet Clone() { VariableDataSet cln = ((VariableDataSet)(base.Clone())); cln.InitVars(); @@ -466,19 +466,19 @@ protected override void InitializeDerivedDataSet() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override bool ShouldSerializeTables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override bool ShouldSerializeRelations() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) { if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { this.Reset(); @@ -563,7 +563,7 @@ protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() { global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream(); this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null)); @@ -572,13 +572,13 @@ protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.InitVars(true); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars(bool initTable) { this.tableCur_BasicCountrySpecificDetail = ((Cur_BasicCountrySpecificDetailDataTable)(base.Tables["Cur_BasicCountrySpecificDetail"])); if ((initTable == true)) { @@ -713,7 +713,6 @@ internal void InitVars(bool initTable) { this.relationAdvancedCountrySpecificVariables_AdvancedCountrySpecificDetail = this.Relations["AdvancedCountrySpecificVariables_AdvancedCountrySpecificDetail"]; this.relationBasicVariables_BasicCountrySpecificDetail = this.Relations["BasicVariables_BasicCountrySpecificDetail"]; this.relationCategories_DerivedVariables = this.Relations["Categories_DerivedVariables"]; - this.relationDerivedVariables_DerivedVariablesDetail = this.Relations["DerivedVariables_DerivedVariablesDetail"]; this.relationCategories_AdvancedVariables2 = this.Relations["Categories_AdvancedVariables2"]; this.relationCategories_AdvancedVariables11 = this.Relations["Categories_AdvancedVariables11"]; this.relationCategories_Variables1 = this.Relations["Categories_Variables1"]; @@ -722,10 +721,11 @@ internal void InitVars(bool initTable) { this.relationBasicVariables_BasicCountrySpecificDetail1 = this.Relations["BasicVariables_BasicCountrySpecificDetail1"]; this.relationCategories_DerivedVariables1 = this.Relations["Categories_DerivedVariables1"]; this.relationDerivedVariables_DerivedVariablesDetail1 = this.Relations["DerivedVariables_DerivedVariablesDetail1"]; + this.relationDerivedVariables_DerivedVariablesDetail = this.Relations["DerivedVariables_DerivedVariablesDetail"]; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.DataSetName = "VariableDataSet"; this.Prefix = ""; @@ -802,10 +802,6 @@ private void InitClass() { this.tableCur_Categories.CategoryColumn}, new global::System.Data.DataColumn[] { this.tableCur_DerivedVariables.CategoryColumn}, false); this.Relations.Add(this.relationCategories_DerivedVariables); - this.relationDerivedVariables_DerivedVariablesDetail = new global::System.Data.DataRelation("DerivedVariables_DerivedVariablesDetail", new global::System.Data.DataColumn[] { - this.tableCur_DerivedVariables.VariableNameColumn}, new global::System.Data.DataColumn[] { - this.tableCur_DerivedVariablesDetail.VariableNameColumn}, false); - this.Relations.Add(this.relationDerivedVariables_DerivedVariablesDetail); this.relationCategories_AdvancedVariables2 = new global::System.Data.DataRelation("Categories_AdvancedVariables2", new global::System.Data.DataColumn[] { this.tableDef_Categories.CategoryColumn}, new global::System.Data.DataColumn[] { this.tableDef_AdvancedVariables.CategoryColumn}, false); @@ -838,136 +834,140 @@ private void InitClass() { this.tableDef_DerivedVariables.VariableNameColumn}, new global::System.Data.DataColumn[] { this.tableDef_DerivedVariablesDetail.VariableNameColumn}, false); this.Relations.Add(this.relationDerivedVariables_DerivedVariablesDetail1); + this.relationDerivedVariables_DerivedVariablesDetail = new global::System.Data.DataRelation("DerivedVariables_DerivedVariablesDetail", new global::System.Data.DataColumn[] { + this.tableCur_DerivedVariables.IdColumn}, new global::System.Data.DataColumn[] { + this.tableCur_DerivedVariablesDetail.VarIdColumn}, false); + this.Relations.Add(this.relationDerivedVariables_DerivedVariablesDetail); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_BasicCountrySpecificDetail() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_Categories() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_Countries() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_AdvancedVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_AdvancedCountrySpecificVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_BasicVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_AdvancedCountrySpecificDetail() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_Years() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_DerivedVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeCur_DerivedVariablesDetail() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_BasicCountrySpecificDetail() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_Categories() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_Countries() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_AdvancedVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_AdvancedCountrySpecificVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_BasicVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_AdvancedCountrySpecificDetail() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_Years() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_DerivedVariables() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeDef_DerivedVariablesDetail() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private bool ShouldSerializeGeneral() { return false; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) { if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) { this.InitVars(); @@ -975,7 +975,7 @@ private void SchemaChanged(object sender, global::System.ComponentModel.Collecti } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) { VariableDataSet ds = new VariableDataSet(); global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); @@ -1021,67 +1021,67 @@ private void SchemaChanged(object sender, global::System.ComponentModel.Collecti return type; } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_BasicCountrySpecificDetailRowChangeEventHandler(object sender, Cur_BasicCountrySpecificDetailRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_CategoriesRowChangeEventHandler(object sender, Cur_CategoriesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_CountriesRowChangeEventHandler(object sender, Cur_CountriesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_AdvancedVariablesRowChangeEventHandler(object sender, Cur_AdvancedVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_AdvancedCountrySpecificVariablesRowChangeEventHandler(object sender, Cur_AdvancedCountrySpecificVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_BasicVariablesRowChangeEventHandler(object sender, Cur_BasicVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_AdvancedCountrySpecificDetailRowChangeEventHandler(object sender, Cur_AdvancedCountrySpecificDetailRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_YearsRowChangeEventHandler(object sender, Cur_YearsRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_DerivedVariablesRowChangeEventHandler(object sender, Cur_DerivedVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Cur_DerivedVariablesDetailRowChangeEventHandler(object sender, Cur_DerivedVariablesDetailRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_BasicCountrySpecificDetailRowChangeEventHandler(object sender, Def_BasicCountrySpecificDetailRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_CategoriesRowChangeEventHandler(object sender, Def_CategoriesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_CountriesRowChangeEventHandler(object sender, Def_CountriesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_AdvancedVariablesRowChangeEventHandler(object sender, Def_AdvancedVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_AdvancedCountrySpecificVariablesRowChangeEventHandler(object sender, Def_AdvancedCountrySpecificVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_BasicVariablesRowChangeEventHandler(object sender, Def_BasicVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_AdvancedCountrySpecificDetailRowChangeEventHandler(object sender, Def_AdvancedCountrySpecificDetailRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_YearsRowChangeEventHandler(object sender, Def_YearsRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_DerivedVariablesRowChangeEventHandler(object sender, Def_DerivedVariablesRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void Def_DerivedVariablesDetailRowChangeEventHandler(object sender, Def_DerivedVariablesDetailRowChangeEvent e); - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void GeneralRowChangeEventHandler(object sender, GeneralRowChangeEvent e); /// @@ -1098,7 +1098,7 @@ public partial class Cur_BasicCountrySpecificDetailDataTable : global::System.Da private global::System.Data.DataColumn columnCountries; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicCountrySpecificDetailDataTable() { this.TableName = "Cur_BasicCountrySpecificDetail"; this.BeginInit(); @@ -1107,7 +1107,7 @@ public Cur_BasicCountrySpecificDetailDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_BasicCountrySpecificDetailDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -1124,14 +1124,14 @@ internal Cur_BasicCountrySpecificDetailDataTable(global::System.Data.DataTable t } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_BasicCountrySpecificDetailDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableNameColumn { get { return this.columnVariableName; @@ -1139,7 +1139,7 @@ protected Cur_BasicCountrySpecificDetailDataTable(global::System.Runtime.Seriali } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CountrySpecificVariableNameColumn { get { return this.columnCountrySpecificVariableName; @@ -1147,7 +1147,7 @@ protected Cur_BasicCountrySpecificDetailDataTable(global::System.Runtime.Seriali } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CountriesColumn { get { return this.columnCountries; @@ -1155,7 +1155,7 @@ protected Cur_BasicCountrySpecificDetailDataTable(global::System.Runtime.Seriali } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -1164,33 +1164,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicCountrySpecificDetailRow this[int index] { get { return ((Cur_BasicCountrySpecificDetailRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicCountrySpecificDetailRowChangeEventHandler Cur_BasicCountrySpecificDetailRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicCountrySpecificDetailRowChangeEventHandler Cur_BasicCountrySpecificDetailRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicCountrySpecificDetailRowChangeEventHandler Cur_BasicCountrySpecificDetailRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicCountrySpecificDetailRowChangeEventHandler Cur_BasicCountrySpecificDetailRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_BasicCountrySpecificDetailRow(Cur_BasicCountrySpecificDetailRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicCountrySpecificDetailRow AddCur_BasicCountrySpecificDetailRow(Cur_BasicVariablesRow parentCur_BasicVariablesRowByBasicVariables_BasicCountrySpecificDetail, string CountrySpecificVariableName, string Countries) { Cur_BasicCountrySpecificDetailRow rowCur_BasicCountrySpecificDetailRow = ((Cur_BasicCountrySpecificDetailRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -1206,7 +1206,7 @@ public Cur_BasicCountrySpecificDetailRow AddCur_BasicCountrySpecificDetailRow(Cu } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_BasicCountrySpecificDetailDataTable cln = ((Cur_BasicCountrySpecificDetailDataTable)(base.Clone())); cln.InitVars(); @@ -1214,13 +1214,13 @@ public Cur_BasicCountrySpecificDetailRow AddCur_BasicCountrySpecificDetailRow(Cu } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_BasicCountrySpecificDetailDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnVariableName = base.Columns["VariableName"]; this.columnCountrySpecificVariableName = base.Columns["CountrySpecificVariableName"]; @@ -1228,7 +1228,7 @@ internal void InitVars() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnVariableName = new global::System.Data.DataColumn("VariableName", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnVariableName); @@ -1241,25 +1241,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicCountrySpecificDetailRow NewCur_BasicCountrySpecificDetailRow() { return ((Cur_BasicCountrySpecificDetailRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_BasicCountrySpecificDetailRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_BasicCountrySpecificDetailRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_BasicCountrySpecificDetailRowChanged != null)) { @@ -1268,7 +1268,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_BasicCountrySpecificDetailRowChanging != null)) { @@ -1277,7 +1277,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_BasicCountrySpecificDetailRowDeleted != null)) { @@ -1286,7 +1286,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_BasicCountrySpecificDetailRowDeleting != null)) { @@ -1295,13 +1295,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_BasicCountrySpecificDetailRow(Cur_BasicCountrySpecificDetailRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -1374,7 +1374,7 @@ public partial class Cur_CategoriesDataTable : global::System.Data.TypedTableBas private global::System.Data.DataColumn columnCategory; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesDataTable() { this.TableName = "Cur_Categories"; this.BeginInit(); @@ -1383,7 +1383,7 @@ public Cur_CategoriesDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_CategoriesDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -1400,14 +1400,14 @@ internal Cur_CategoriesDataTable(global::System.Data.DataTable table) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_CategoriesDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CategoryColumn { get { return this.columnCategory; @@ -1415,7 +1415,7 @@ protected Cur_CategoriesDataTable(global::System.Runtime.Serialization.Serializa } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -1424,33 +1424,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesRow this[int index] { get { return ((Cur_CategoriesRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CategoriesRowChangeEventHandler Cur_CategoriesRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CategoriesRowChangeEventHandler Cur_CategoriesRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CategoriesRowChangeEventHandler Cur_CategoriesRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CategoriesRowChangeEventHandler Cur_CategoriesRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_CategoriesRow(Cur_CategoriesRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesRow AddCur_CategoriesRow(string Category) { Cur_CategoriesRow rowCur_CategoriesRow = ((Cur_CategoriesRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -1461,14 +1461,14 @@ public Cur_CategoriesRow AddCur_CategoriesRow(string Category) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesRow FindByCategory(string Category) { return ((Cur_CategoriesRow)(this.Rows.Find(new object[] { Category}))); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_CategoriesDataTable cln = ((Cur_CategoriesDataTable)(base.Clone())); cln.InitVars(); @@ -1476,19 +1476,19 @@ public Cur_CategoriesRow FindByCategory(string Category) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_CategoriesDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnCategory = base.Columns["Category"]; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnCategory = new global::System.Data.DataColumn("Category", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnCategory); @@ -1499,25 +1499,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesRow NewCur_CategoriesRow() { return ((Cur_CategoriesRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_CategoriesRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_CategoriesRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_CategoriesRowChanged != null)) { @@ -1526,7 +1526,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_CategoriesRowChanging != null)) { @@ -1535,7 +1535,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_CategoriesRowDeleted != null)) { @@ -1544,7 +1544,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_CategoriesRowDeleting != null)) { @@ -1553,13 +1553,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_CategoriesRow(Cur_CategoriesRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -1632,7 +1632,7 @@ public partial class Cur_CountriesDataTable : global::System.Data.TypedTableBase private global::System.Data.DataColumn columnCountry; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesDataTable() { this.TableName = "Cur_Countries"; this.BeginInit(); @@ -1641,7 +1641,7 @@ public Cur_CountriesDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_CountriesDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -1658,14 +1658,14 @@ internal Cur_CountriesDataTable(global::System.Data.DataTable table) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_CountriesDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CountryColumn { get { return this.columnCountry; @@ -1673,7 +1673,7 @@ protected Cur_CountriesDataTable(global::System.Runtime.Serialization.Serializat } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -1682,33 +1682,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesRow this[int index] { get { return ((Cur_CountriesRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CountriesRowChangeEventHandler Cur_CountriesRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CountriesRowChangeEventHandler Cur_CountriesRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CountriesRowChangeEventHandler Cur_CountriesRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_CountriesRowChangeEventHandler Cur_CountriesRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_CountriesRow(Cur_CountriesRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesRow AddCur_CountriesRow(string Country) { Cur_CountriesRow rowCur_CountriesRow = ((Cur_CountriesRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -1719,14 +1719,14 @@ public Cur_CountriesRow AddCur_CountriesRow(string Country) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesRow FindByCountry(string Country) { return ((Cur_CountriesRow)(this.Rows.Find(new object[] { Country}))); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_CountriesDataTable cln = ((Cur_CountriesDataTable)(base.Clone())); cln.InitVars(); @@ -1734,19 +1734,19 @@ public Cur_CountriesRow FindByCountry(string Country) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_CountriesDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnCountry = base.Columns["Country"]; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnCountry = new global::System.Data.DataColumn("Country", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnCountry); @@ -1757,25 +1757,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesRow NewCur_CountriesRow() { return ((Cur_CountriesRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_CountriesRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_CountriesRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_CountriesRowChanged != null)) { @@ -1784,7 +1784,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_CountriesRowChanging != null)) { @@ -1793,7 +1793,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_CountriesRowDeleted != null)) { @@ -1802,7 +1802,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_CountriesRowDeleting != null)) { @@ -1811,13 +1811,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_CountriesRow(Cur_CountriesRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -1910,7 +1910,7 @@ public partial class Cur_AdvancedVariablesDataTable : global::System.Data.TypedT private global::System.Data.DataColumn columnPrivate; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesDataTable() { this.TableName = "Cur_AdvancedVariables"; this.BeginInit(); @@ -1919,7 +1919,7 @@ public Cur_AdvancedVariablesDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_AdvancedVariablesDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -1936,14 +1936,14 @@ internal Cur_AdvancedVariablesDataTable(global::System.Data.DataTable table) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableNameColumn { get { return this.columnVariableName; @@ -1951,7 +1951,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CategoryColumn { get { return this.columnCategory; @@ -1959,7 +1959,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn DescriptionColumn { get { return this.columnDescription; @@ -1967,7 +1967,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableTypeColumn { get { return this.columnVariableType; @@ -1975,7 +1975,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn DefaultValueColumn { get { return this.columnDefaultValue; @@ -1983,7 +1983,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn ValueRangeColumn { get { return this.columnValueRange; @@ -1991,7 +1991,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn TextRangeColumn { get { return this.columnTextRange; @@ -1999,7 +1999,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CountriesColumn { get { return this.columnCountries; @@ -2007,7 +2007,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn IsHouseholdVarColumn { get { return this.columnIsHouseholdVar; @@ -2015,7 +2015,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CommentsColumn { get { return this.columnComments; @@ -2023,7 +2023,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn PrivateColumn { get { return this.columnPrivate; @@ -2031,7 +2031,7 @@ protected Cur_AdvancedVariablesDataTable(global::System.Runtime.Serialization.Se } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -2040,33 +2040,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesRow this[int index] { get { return ((Cur_AdvancedVariablesRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedVariablesRowChangeEventHandler Cur_AdvancedVariablesRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedVariablesRowChangeEventHandler Cur_AdvancedVariablesRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedVariablesRowChangeEventHandler Cur_AdvancedVariablesRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedVariablesRowChangeEventHandler Cur_AdvancedVariablesRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_AdvancedVariablesRow(Cur_AdvancedVariablesRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesRow AddCur_AdvancedVariablesRow(string VariableName, Cur_CategoriesRow parentCur_CategoriesRowByCategories_AdvancedVariables, string Description, string VariableType, string DefaultValue, string ValueRange, string TextRange, string Countries, bool IsHouseholdVar, string Comments, bool Private) { Cur_AdvancedVariablesRow rowCur_AdvancedVariablesRow = ((Cur_AdvancedVariablesRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -2090,14 +2090,14 @@ public Cur_AdvancedVariablesRow AddCur_AdvancedVariablesRow(string VariableName, } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesRow FindByVariableName(string VariableName) { return ((Cur_AdvancedVariablesRow)(this.Rows.Find(new object[] { VariableName}))); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_AdvancedVariablesDataTable cln = ((Cur_AdvancedVariablesDataTable)(base.Clone())); cln.InitVars(); @@ -2105,13 +2105,13 @@ public Cur_AdvancedVariablesRow FindByVariableName(string VariableName) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_AdvancedVariablesDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnVariableName = base.Columns["VariableName"]; this.columnCategory = base.Columns["Category"]; @@ -2127,7 +2127,7 @@ internal void InitVars() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnVariableName = new global::System.Data.DataColumn("VariableName", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnVariableName); @@ -2161,25 +2161,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesRow NewCur_AdvancedVariablesRow() { return ((Cur_AdvancedVariablesRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_AdvancedVariablesRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_AdvancedVariablesRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_AdvancedVariablesRowChanged != null)) { @@ -2188,7 +2188,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_AdvancedVariablesRowChanging != null)) { @@ -2197,7 +2197,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_AdvancedVariablesRowDeleted != null)) { @@ -2206,7 +2206,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_AdvancedVariablesRowDeleting != null)) { @@ -2215,13 +2215,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_AdvancedVariablesRow(Cur_AdvancedVariablesRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -2306,7 +2306,7 @@ public partial class Cur_AdvancedCountrySpecificVariablesDataTable : global::Sys private global::System.Data.DataColumn columnPrivate; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesDataTable() { this.TableName = "Cur_AdvancedCountrySpecificVariables"; this.BeginInit(); @@ -2315,7 +2315,7 @@ public Cur_AdvancedCountrySpecificVariablesDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -2332,14 +2332,14 @@ internal Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Data.DataT } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableNameColumn { get { return this.columnVariableName; @@ -2347,7 +2347,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CategoryColumn { get { return this.columnCategory; @@ -2355,7 +2355,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn DescriptionColumn { get { return this.columnDescription; @@ -2363,7 +2363,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableTypeColumn { get { return this.columnVariableType; @@ -2371,7 +2371,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn IsHouseholdVarColumn { get { return this.columnIsHouseholdVar; @@ -2379,7 +2379,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CommentsColumn { get { return this.columnComments; @@ -2387,7 +2387,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn PrivateColumn { get { return this.columnPrivate; @@ -2395,7 +2395,7 @@ protected Cur_AdvancedCountrySpecificVariablesDataTable(global::System.Runtime.S } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -2404,33 +2404,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesRow this[int index] { get { return ((Cur_AdvancedCountrySpecificVariablesRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificVariablesRowChangeEventHandler Cur_AdvancedCountrySpecificVariablesRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificVariablesRowChangeEventHandler Cur_AdvancedCountrySpecificVariablesRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificVariablesRowChangeEventHandler Cur_AdvancedCountrySpecificVariablesRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificVariablesRowChangeEventHandler Cur_AdvancedCountrySpecificVariablesRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_AdvancedCountrySpecificVariablesRow(Cur_AdvancedCountrySpecificVariablesRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesRow AddCur_AdvancedCountrySpecificVariablesRow(string VariableName, Cur_CategoriesRow parentCur_CategoriesRowByCategories_AdvancedVariables1, string Description, string VariableType, bool IsHouseholdVar, string Comments, bool Private) { Cur_AdvancedCountrySpecificVariablesRow rowCur_AdvancedCountrySpecificVariablesRow = ((Cur_AdvancedCountrySpecificVariablesRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -2450,14 +2450,14 @@ public Cur_AdvancedCountrySpecificVariablesRow AddCur_AdvancedCountrySpecificVar } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesRow FindByVariableName(string VariableName) { return ((Cur_AdvancedCountrySpecificVariablesRow)(this.Rows.Find(new object[] { VariableName}))); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_AdvancedCountrySpecificVariablesDataTable cln = ((Cur_AdvancedCountrySpecificVariablesDataTable)(base.Clone())); cln.InitVars(); @@ -2465,13 +2465,13 @@ public Cur_AdvancedCountrySpecificVariablesRow FindByVariableName(string Variabl } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_AdvancedCountrySpecificVariablesDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnVariableName = base.Columns["VariableName"]; this.columnCategory = base.Columns["Category"]; @@ -2483,7 +2483,7 @@ internal void InitVars() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnVariableName = new global::System.Data.DataColumn("VariableName", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnVariableName); @@ -2509,25 +2509,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesRow NewCur_AdvancedCountrySpecificVariablesRow() { return ((Cur_AdvancedCountrySpecificVariablesRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_AdvancedCountrySpecificVariablesRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_AdvancedCountrySpecificVariablesRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_AdvancedCountrySpecificVariablesRowChanged != null)) { @@ -2536,7 +2536,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_AdvancedCountrySpecificVariablesRowChanging != null)) { @@ -2545,7 +2545,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_AdvancedCountrySpecificVariablesRowDeleted != null)) { @@ -2554,7 +2554,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_AdvancedCountrySpecificVariablesRowDeleting != null)) { @@ -2563,13 +2563,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_AdvancedCountrySpecificVariablesRow(Cur_AdvancedCountrySpecificVariablesRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -2658,7 +2658,7 @@ public partial class Cur_BasicVariablesDataTable : global::System.Data.TypedTabl private global::System.Data.DataColumn columnPrivate; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesDataTable() { this.TableName = "Cur_BasicVariables"; this.BeginInit(); @@ -2667,7 +2667,7 @@ public Cur_BasicVariablesDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_BasicVariablesDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -2684,14 +2684,14 @@ internal Cur_BasicVariablesDataTable(global::System.Data.DataTable table) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableNameColumn { get { return this.columnVariableName; @@ -2699,7 +2699,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CategoryColumn { get { return this.columnCategory; @@ -2707,7 +2707,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn DescriptionColumn { get { return this.columnDescription; @@ -2715,7 +2715,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableTypeColumn { get { return this.columnVariableType; @@ -2723,7 +2723,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn ValueRangeColumn { get { return this.columnValueRange; @@ -2731,7 +2731,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn TextRangeColumn { get { return this.columnTextRange; @@ -2739,7 +2739,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn IsHouseholdVarColumn { get { return this.columnIsHouseholdVar; @@ -2747,7 +2747,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CommentsColumn { get { return this.columnComments; @@ -2755,7 +2755,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn PrivateColumn { get { return this.columnPrivate; @@ -2763,7 +2763,7 @@ protected Cur_BasicVariablesDataTable(global::System.Runtime.Serialization.Seria } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -2772,33 +2772,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesRow this[int index] { get { return ((Cur_BasicVariablesRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicVariablesRowChangeEventHandler Cur_BasicVariablesRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicVariablesRowChangeEventHandler Cur_BasicVariablesRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicVariablesRowChangeEventHandler Cur_BasicVariablesRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_BasicVariablesRowChangeEventHandler Cur_BasicVariablesRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_BasicVariablesRow(Cur_BasicVariablesRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesRow AddCur_BasicVariablesRow(string VariableName, Cur_CategoriesRow parentCur_CategoriesRowByCategories_Variables, string Description, string VariableType, string ValueRange, string TextRange, bool IsHouseholdVar, string Comments, bool Private) { Cur_BasicVariablesRow rowCur_BasicVariablesRow = ((Cur_BasicVariablesRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -2820,14 +2820,14 @@ public Cur_BasicVariablesRow AddCur_BasicVariablesRow(string VariableName, Cur_C } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesRow FindByVariableName(string VariableName) { return ((Cur_BasicVariablesRow)(this.Rows.Find(new object[] { VariableName}))); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_BasicVariablesDataTable cln = ((Cur_BasicVariablesDataTable)(base.Clone())); cln.InitVars(); @@ -2835,13 +2835,13 @@ public Cur_BasicVariablesRow FindByVariableName(string VariableName) { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_BasicVariablesDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnVariableName = base.Columns["VariableName"]; this.columnCategory = base.Columns["Category"]; @@ -2855,7 +2855,7 @@ internal void InitVars() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnVariableName = new global::System.Data.DataColumn("VariableName", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnVariableName); @@ -2886,25 +2886,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesRow NewCur_BasicVariablesRow() { return ((Cur_BasicVariablesRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_BasicVariablesRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_BasicVariablesRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_BasicVariablesRowChanged != null)) { @@ -2913,7 +2913,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_BasicVariablesRowChanging != null)) { @@ -2922,7 +2922,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_BasicVariablesRowDeleted != null)) { @@ -2931,7 +2931,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_BasicVariablesRowDeleting != null)) { @@ -2940,13 +2940,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_BasicVariablesRow(Cur_BasicVariablesRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -3027,7 +3027,7 @@ public partial class Cur_AdvancedCountrySpecificDetailDataTable : global::System private global::System.Data.DataColumn columnCountry; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailDataTable() { this.TableName = "Cur_AdvancedCountrySpecificDetail"; this.BeginInit(); @@ -3036,7 +3036,7 @@ public Cur_AdvancedCountrySpecificDetailDataTable() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Cur_AdvancedCountrySpecificDetailDataTable(global::System.Data.DataTable table) { this.TableName = table.TableName; if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { @@ -3053,14 +3053,14 @@ internal Cur_AdvancedCountrySpecificDetailDataTable(global::System.Data.DataTabl } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected Cur_AdvancedCountrySpecificDetailDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : base(info, context) { this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn VariableNameColumn { get { return this.columnVariableName; @@ -3068,7 +3068,7 @@ protected Cur_AdvancedCountrySpecificDetailDataTable(global::System.Runtime.Seri } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn DefaultValueColumn { get { return this.columnDefaultValue; @@ -3076,7 +3076,7 @@ protected Cur_AdvancedCountrySpecificDetailDataTable(global::System.Runtime.Seri } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn ValueRangeColumn { get { return this.columnValueRange; @@ -3084,7 +3084,7 @@ protected Cur_AdvancedCountrySpecificDetailDataTable(global::System.Runtime.Seri } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn TextRangeColumn { get { return this.columnTextRange; @@ -3092,7 +3092,7 @@ protected Cur_AdvancedCountrySpecificDetailDataTable(global::System.Runtime.Seri } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataColumn CountryColumn { get { return this.columnCountry; @@ -3100,7 +3100,7 @@ protected Cur_AdvancedCountrySpecificDetailDataTable(global::System.Runtime.Seri } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.Browsable(false)] public int Count { get { @@ -3109,33 +3109,33 @@ public int Count { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailRow this[int index] { get { return ((Cur_AdvancedCountrySpecificDetailRow)(this.Rows[index])); } } - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificDetailRowChangeEventHandler Cur_AdvancedCountrySpecificDetailRowChanging; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificDetailRowChangeEventHandler Cur_AdvancedCountrySpecificDetailRowChanged; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificDetailRowChangeEventHandler Cur_AdvancedCountrySpecificDetailRowDeleting; - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public event Cur_AdvancedCountrySpecificDetailRowChangeEventHandler Cur_AdvancedCountrySpecificDetailRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void AddCur_AdvancedCountrySpecificDetailRow(Cur_AdvancedCountrySpecificDetailRow row) { this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailRow AddCur_AdvancedCountrySpecificDetailRow(Cur_AdvancedCountrySpecificVariablesRow parentCur_AdvancedCountrySpecificVariablesRowByAdvancedCountrySpecificVariables_AdvancedCountrySpecificDetail, string DefaultValue, string ValueRange, string TextRange, Cur_CountriesRow parentCur_CountriesRowByCountries_CountrySpecific) { Cur_AdvancedCountrySpecificDetailRow rowCur_AdvancedCountrySpecificDetailRow = ((Cur_AdvancedCountrySpecificDetailRow)(this.NewRow())); object[] columnValuesArray = new object[] { @@ -3156,7 +3156,7 @@ public Cur_AdvancedCountrySpecificDetailRow AddCur_AdvancedCountrySpecificDetail } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailRow FindByCountryVariableName(string Country, string VariableName) { return ((Cur_AdvancedCountrySpecificDetailRow)(this.Rows.Find(new object[] { Country, @@ -3164,7 +3164,7 @@ public Cur_AdvancedCountrySpecificDetailRow FindByCountryVariableName(string Cou } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public override global::System.Data.DataTable Clone() { Cur_AdvancedCountrySpecificDetailDataTable cln = ((Cur_AdvancedCountrySpecificDetailDataTable)(base.Clone())); cln.InitVars(); @@ -3172,13 +3172,13 @@ public Cur_AdvancedCountrySpecificDetailRow FindByCountryVariableName(string Cou } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataTable CreateInstance() { return new Cur_AdvancedCountrySpecificDetailDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal void InitVars() { this.columnVariableName = base.Columns["VariableName"]; this.columnDefaultValue = base.Columns["DefaultValue"]; @@ -3188,7 +3188,7 @@ internal void InitVars() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void InitClass() { this.columnVariableName = new global::System.Data.DataColumn("VariableName", typeof(string), null, global::System.Data.MappingType.Element); base.Columns.Add(this.columnVariableName); @@ -3209,25 +3209,25 @@ private void InitClass() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailRow NewCur_AdvancedCountrySpecificDetailRow() { return ((Cur_AdvancedCountrySpecificDetailRow)(this.NewRow())); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { return new Cur_AdvancedCountrySpecificDetailRow(builder); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override global::System.Type GetRowType() { return typeof(Cur_AdvancedCountrySpecificDetailRow); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanged(e); if ((this.Cur_AdvancedCountrySpecificDetailRowChanged != null)) { @@ -3236,7 +3236,7 @@ protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { base.OnRowChanging(e); if ((this.Cur_AdvancedCountrySpecificDetailRowChanging != null)) { @@ -3245,7 +3245,7 @@ protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleted(e); if ((this.Cur_AdvancedCountrySpecificDetailRowDeleted != null)) { @@ -3254,7 +3254,7 @@ protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { base.OnRowDeleting(e); if ((this.Cur_AdvancedCountrySpecificDetailRowDeleting != null)) { @@ -3263,13 +3263,13 @@ protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void RemoveCur_AdvancedCountrySpecificDetailRow(Cur_AdvancedCountrySpecificDetailRow row) { this.Rows.Remove(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); @@ -3342,7 +3342,7 @@ public partial class Cur_YearsDataTable : global::System.Data.TypedTableBase @@ -9037,14 +9169,14 @@ public partial class Def_BasicCountrySpecificDetailRow : global::System.Data.Dat private Def_BasicCountrySpecificDetailDataTable tableDef_BasicCountrySpecificDetail; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_BasicCountrySpecificDetailRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_BasicCountrySpecificDetail = ((Def_BasicCountrySpecificDetailDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { try { @@ -9061,7 +9193,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string CountrySpecificVariableName { get { return ((string)(this[this.tableDef_BasicCountrySpecificDetail.CountrySpecificVariableNameColumn])); @@ -9072,7 +9204,7 @@ public string CountrySpecificVariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Countries { get { return ((string)(this[this.tableDef_BasicCountrySpecificDetail.CountriesColumn])); @@ -9083,7 +9215,7 @@ public string Countries { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicVariablesRow Def_BasicVariablesRow { get { return ((Def_BasicVariablesRow)(this.GetParentRow(this.Table.ParentRelations["BasicVariables_BasicCountrySpecificDetail1"]))); @@ -9094,13 +9226,13 @@ public Def_BasicVariablesRow Def_BasicVariablesRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsVariableNameNull() { return this.IsNull(this.tableDef_BasicCountrySpecificDetail.VariableNameColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetVariableNameNull() { this[this.tableDef_BasicCountrySpecificDetail.VariableNameColumn] = global::System.Convert.DBNull; } @@ -9114,14 +9246,14 @@ public partial class Def_CategoriesRow : global::System.Data.DataRow { private Def_CategoriesDataTable tableDef_Categories; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_CategoriesRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_Categories = ((Def_CategoriesDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Category { get { return ((string)(this[this.tableDef_Categories.CategoryColumn])); @@ -9132,7 +9264,7 @@ public string Category { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedVariablesRow[] GetDef_AdvancedVariablesRows() { if ((this.Table.ChildRelations["Categories_AdvancedVariables2"] == null)) { return new Def_AdvancedVariablesRow[0]; @@ -9143,7 +9275,7 @@ public Def_AdvancedVariablesRow[] GetDef_AdvancedVariablesRows() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificVariablesRow[] GetDef_AdvancedCountrySpecificVariablesRows() { if ((this.Table.ChildRelations["Categories_AdvancedVariables11"] == null)) { return new Def_AdvancedCountrySpecificVariablesRow[0]; @@ -9154,7 +9286,7 @@ public Def_AdvancedCountrySpecificVariablesRow[] GetDef_AdvancedCountrySpecificV } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicVariablesRow[] GetDef_BasicVariablesRows() { if ((this.Table.ChildRelations["Categories_Variables1"] == null)) { return new Def_BasicVariablesRow[0]; @@ -9165,7 +9297,7 @@ public Def_BasicVariablesRow[] GetDef_BasicVariablesRows() { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesRow[] GetDef_DerivedVariablesRows() { if ((this.Table.ChildRelations["Categories_DerivedVariables1"] == null)) { return new Def_DerivedVariablesRow[0]; @@ -9184,14 +9316,14 @@ public partial class Def_CountriesRow : global::System.Data.DataRow { private Def_CountriesDataTable tableDef_Countries; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_CountriesRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_Countries = ((Def_CountriesDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Country { get { return ((string)(this[this.tableDef_Countries.CountryColumn])); @@ -9202,7 +9334,7 @@ public string Country { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificDetailRow[] GetDef_AdvancedCountrySpecificDetailRows() { if ((this.Table.ChildRelations["Countries_CountrySpecific1"] == null)) { return new Def_AdvancedCountrySpecificDetailRow[0]; @@ -9221,14 +9353,14 @@ public partial class Def_AdvancedVariablesRow : global::System.Data.DataRow { private Def_AdvancedVariablesDataTable tableDef_AdvancedVariables; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_AdvancedVariablesRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_AdvancedVariables = ((Def_AdvancedVariablesDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { return ((string)(this[this.tableDef_AdvancedVariables.VariableNameColumn])); @@ -9239,7 +9371,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Category { get { try { @@ -9255,7 +9387,7 @@ public string Category { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Description { get { try { @@ -9271,7 +9403,7 @@ public string Description { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableType { get { try { @@ -9287,7 +9419,7 @@ public string VariableType { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string DefaultValue { get { try { @@ -9303,7 +9435,7 @@ public string DefaultValue { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string ValueRange { get { try { @@ -9319,7 +9451,7 @@ public string ValueRange { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string TextRange { get { try { @@ -9335,7 +9467,7 @@ public string TextRange { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Countries { get { try { @@ -9351,7 +9483,7 @@ public string Countries { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsHouseholdVar { get { try { @@ -9368,7 +9500,7 @@ public bool IsHouseholdVar { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Comments { get { try { @@ -9384,7 +9516,23 @@ public string Comments { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool Private { + get { + try { + return ((bool)(this[this.tableDef_AdvancedVariables.PrivateColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'Private\' in table \'Def_AdvancedVariables\' is DBNull.", e); + } + } + set { + this[this.tableDef_AdvancedVariables.PrivateColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CategoriesRow Categories_defRow { get { return ((Def_CategoriesRow)(this.GetParentRow(this.Table.ParentRelations["Categories_AdvancedVariables2"]))); @@ -9395,112 +9543,124 @@ public Def_CategoriesRow Categories_defRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCategoryNull() { return this.IsNull(this.tableDef_AdvancedVariables.CategoryColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCategoryNull() { this[this.tableDef_AdvancedVariables.CategoryColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDescriptionNull() { return this.IsNull(this.tableDef_AdvancedVariables.DescriptionColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDescriptionNull() { this[this.tableDef_AdvancedVariables.DescriptionColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsVariableTypeNull() { return this.IsNull(this.tableDef_AdvancedVariables.VariableTypeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetVariableTypeNull() { this[this.tableDef_AdvancedVariables.VariableTypeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDefaultValueNull() { return this.IsNull(this.tableDef_AdvancedVariables.DefaultValueColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDefaultValueNull() { this[this.tableDef_AdvancedVariables.DefaultValueColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsValueRangeNull() { return this.IsNull(this.tableDef_AdvancedVariables.ValueRangeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetValueRangeNull() { this[this.tableDef_AdvancedVariables.ValueRangeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsTextRangeNull() { return this.IsNull(this.tableDef_AdvancedVariables.TextRangeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetTextRangeNull() { this[this.tableDef_AdvancedVariables.TextRangeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCountriesNull() { return this.IsNull(this.tableDef_AdvancedVariables.CountriesColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCountriesNull() { this[this.tableDef_AdvancedVariables.CountriesColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsIsHouseholdVarNull() { return this.IsNull(this.tableDef_AdvancedVariables.IsHouseholdVarColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetIsHouseholdVarNull() { this[this.tableDef_AdvancedVariables.IsHouseholdVarColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCommentsNull() { return this.IsNull(this.tableDef_AdvancedVariables.CommentsColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCommentsNull() { this[this.tableDef_AdvancedVariables.CommentsColumn] = global::System.Convert.DBNull; } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsPrivateNull() { + return this.IsNull(this.tableDef_AdvancedVariables.PrivateColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetPrivateNull() { + this[this.tableDef_AdvancedVariables.PrivateColumn] = global::System.Convert.DBNull; + } } /// @@ -9511,14 +9671,14 @@ public partial class Def_AdvancedCountrySpecificVariablesRow : global::System.Da private Def_AdvancedCountrySpecificVariablesDataTable tableDef_AdvancedCountrySpecificVariables; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_AdvancedCountrySpecificVariablesRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_AdvancedCountrySpecificVariables = ((Def_AdvancedCountrySpecificVariablesDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { return ((string)(this[this.tableDef_AdvancedCountrySpecificVariables.VariableNameColumn])); @@ -9529,7 +9689,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Category { get { try { @@ -9546,7 +9706,7 @@ public string Category { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Description { get { try { @@ -9563,7 +9723,7 @@ public string Description { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableType { get { try { @@ -9580,7 +9740,7 @@ public string VariableType { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsHouseholdVar { get { try { @@ -9597,7 +9757,7 @@ public bool IsHouseholdVar { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Comments { get { try { @@ -9614,7 +9774,24 @@ public string Comments { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool Private { + get { + try { + return ((bool)(this[this.tableDef_AdvancedCountrySpecificVariables.PrivateColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'Private\' in table \'Def_AdvancedCountrySpecificVariables\' is" + + " DBNull.", e); + } + } + set { + this[this.tableDef_AdvancedCountrySpecificVariables.PrivateColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CategoriesRow Categories_defRow { get { return ((Def_CategoriesRow)(this.GetParentRow(this.Table.ParentRelations["Categories_AdvancedVariables11"]))); @@ -9625,67 +9802,79 @@ public Def_CategoriesRow Categories_defRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCategoryNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificVariables.CategoryColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCategoryNull() { this[this.tableDef_AdvancedCountrySpecificVariables.CategoryColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDescriptionNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificVariables.DescriptionColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDescriptionNull() { this[this.tableDef_AdvancedCountrySpecificVariables.DescriptionColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsVariableTypeNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificVariables.VariableTypeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetVariableTypeNull() { this[this.tableDef_AdvancedCountrySpecificVariables.VariableTypeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsIsHouseholdVarNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificVariables.IsHouseholdVarColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetIsHouseholdVarNull() { this[this.tableDef_AdvancedCountrySpecificVariables.IsHouseholdVarColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCommentsNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificVariables.CommentsColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCommentsNull() { this[this.tableDef_AdvancedCountrySpecificVariables.CommentsColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsPrivateNull() { + return this.IsNull(this.tableDef_AdvancedCountrySpecificVariables.PrivateColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetPrivateNull() { + this[this.tableDef_AdvancedCountrySpecificVariables.PrivateColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificDetailRow[] GetDef_AdvancedCountrySpecificDetailRows() { if ((this.Table.ChildRelations["AdvancedCountrySpecificVariables_AdvancedCountrySpecificDetail1"] == null)) { return new Def_AdvancedCountrySpecificDetailRow[0]; @@ -9704,14 +9893,14 @@ public partial class Def_BasicVariablesRow : global::System.Data.DataRow { private Def_BasicVariablesDataTable tableDef_BasicVariables; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_BasicVariablesRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_BasicVariables = ((Def_BasicVariablesDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { return ((string)(this[this.tableDef_BasicVariables.VariableNameColumn])); @@ -9722,7 +9911,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Category { get { try { @@ -9738,7 +9927,7 @@ public string Category { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Description { get { try { @@ -9754,7 +9943,7 @@ public string Description { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableType { get { try { @@ -9770,7 +9959,7 @@ public string VariableType { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string ValueRange { get { try { @@ -9786,7 +9975,7 @@ public string ValueRange { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string TextRange { get { try { @@ -9802,7 +9991,7 @@ public string TextRange { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsHouseholdVar { get { try { @@ -9818,7 +10007,7 @@ public bool IsHouseholdVar { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Comments { get { try { @@ -9834,7 +10023,23 @@ public string Comments { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool Private { + get { + try { + return ((bool)(this[this.tableDef_BasicVariables.PrivateColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'Private\' in table \'Def_BasicVariables\' is DBNull.", e); + } + } + set { + this[this.tableDef_BasicVariables.PrivateColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CategoriesRow Categories_defRow { get { return ((Def_CategoriesRow)(this.GetParentRow(this.Table.ParentRelations["Categories_Variables1"]))); @@ -9845,91 +10050,103 @@ public Def_CategoriesRow Categories_defRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCategoryNull() { return this.IsNull(this.tableDef_BasicVariables.CategoryColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCategoryNull() { this[this.tableDef_BasicVariables.CategoryColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDescriptionNull() { return this.IsNull(this.tableDef_BasicVariables.DescriptionColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDescriptionNull() { this[this.tableDef_BasicVariables.DescriptionColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsVariableTypeNull() { return this.IsNull(this.tableDef_BasicVariables.VariableTypeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetVariableTypeNull() { this[this.tableDef_BasicVariables.VariableTypeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsValueRangeNull() { return this.IsNull(this.tableDef_BasicVariables.ValueRangeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetValueRangeNull() { this[this.tableDef_BasicVariables.ValueRangeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsTextRangeNull() { return this.IsNull(this.tableDef_BasicVariables.TextRangeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetTextRangeNull() { this[this.tableDef_BasicVariables.TextRangeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsIsHouseholdVarNull() { return this.IsNull(this.tableDef_BasicVariables.IsHouseholdVarColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetIsHouseholdVarNull() { this[this.tableDef_BasicVariables.IsHouseholdVarColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCommentsNull() { return this.IsNull(this.tableDef_BasicVariables.CommentsColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCommentsNull() { this[this.tableDef_BasicVariables.CommentsColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsPrivateNull() { + return this.IsNull(this.tableDef_BasicVariables.PrivateColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetPrivateNull() { + this[this.tableDef_BasicVariables.PrivateColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicCountrySpecificDetailRow[] GetBasicCountrySpecificDetail_defRows() { if ((this.Table.ChildRelations["BasicVariables_BasicCountrySpecificDetail1"] == null)) { return new Def_BasicCountrySpecificDetailRow[0]; @@ -9948,14 +10165,14 @@ public partial class Def_AdvancedCountrySpecificDetailRow : global::System.Data. private Def_AdvancedCountrySpecificDetailDataTable tableDef_AdvancedCountrySpecificDetail; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_AdvancedCountrySpecificDetailRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_AdvancedCountrySpecificDetail = ((Def_AdvancedCountrySpecificDetailDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { return ((string)(this[this.tableDef_AdvancedCountrySpecificDetail.VariableNameColumn])); @@ -9966,7 +10183,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string DefaultValue { get { try { @@ -9983,7 +10200,7 @@ public string DefaultValue { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string ValueRange { get { try { @@ -10000,7 +10217,7 @@ public string ValueRange { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string TextRange { get { try { @@ -10017,7 +10234,7 @@ public string TextRange { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Country { get { return ((string)(this[this.tableDef_AdvancedCountrySpecificDetail.CountryColumn])); @@ -10028,7 +10245,7 @@ public string Country { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CountriesRow Countries_defRow { get { return ((Def_CountriesRow)(this.GetParentRow(this.Table.ParentRelations["Countries_CountrySpecific1"]))); @@ -10039,7 +10256,7 @@ public Def_CountriesRow Countries_defRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificVariablesRow AdvancedCountrySpecificVariables_defRow { get { return ((Def_AdvancedCountrySpecificVariablesRow)(this.GetParentRow(this.Table.ParentRelations["AdvancedCountrySpecificVariables_AdvancedCountrySpecificDetail1"]))); @@ -10050,37 +10267,37 @@ public Def_AdvancedCountrySpecificVariablesRow AdvancedCountrySpecificVariables_ } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDefaultValueNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificDetail.DefaultValueColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDefaultValueNull() { this[this.tableDef_AdvancedCountrySpecificDetail.DefaultValueColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsValueRangeNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificDetail.ValueRangeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetValueRangeNull() { this[this.tableDef_AdvancedCountrySpecificDetail.ValueRangeColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsTextRangeNull() { return this.IsNull(this.tableDef_AdvancedCountrySpecificDetail.TextRangeColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetTextRangeNull() { this[this.tableDef_AdvancedCountrySpecificDetail.TextRangeColumn] = global::System.Convert.DBNull; } @@ -10094,14 +10311,14 @@ public partial class Def_YearsRow : global::System.Data.DataRow { private Def_YearsDataTable tableDef_Years; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_YearsRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_Years = ((Def_YearsDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Year { get { return ((string)(this[this.tableDef_Years.YearColumn])); @@ -10120,14 +10337,14 @@ public partial class Def_DerivedVariablesRow : global::System.Data.DataRow { private Def_DerivedVariablesDataTable tableDef_DerivedVariables; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_DerivedVariablesRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_DerivedVariables = ((Def_DerivedVariablesDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { return ((string)(this[this.tableDef_DerivedVariables.VariableNameColumn])); @@ -10138,7 +10355,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Category { get { try { @@ -10154,7 +10371,7 @@ public string Category { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Description { get { try { @@ -10170,15 +10387,10 @@ public string Description { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Countries { get { - try { - return ((string)(this[this.tableDef_DerivedVariables.CountriesColumn])); - } - catch (global::System.InvalidCastException e) { - throw new global::System.Data.StrongTypingException("The value for column \'Countries\' in table \'Def_DerivedVariables\' is DBNull.", e); - } + return ((string)(this[this.tableDef_DerivedVariables.CountriesColumn])); } set { this[this.tableDef_DerivedVariables.CountriesColumn] = value; @@ -10186,7 +10398,7 @@ public string Countries { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string DefaultValue { get { try { @@ -10202,7 +10414,7 @@ public string DefaultValue { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Comments { get { try { @@ -10218,7 +10430,23 @@ public string Comments { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool Private { + get { + try { + return ((bool)(this[this.tableDef_DerivedVariables.PrivateColumn])); + } + catch (global::System.InvalidCastException e) { + throw new global::System.Data.StrongTypingException("The value for column \'Private\' in table \'Def_DerivedVariables\' is DBNull.", e); + } + } + set { + this[this.tableDef_DerivedVariables.PrivateColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CategoriesRow Categories_defRow { get { return ((Def_CategoriesRow)(this.GetParentRow(this.Table.ParentRelations["Categories_DerivedVariables1"]))); @@ -10229,67 +10457,67 @@ public Def_CategoriesRow Categories_defRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCategoryNull() { return this.IsNull(this.tableDef_DerivedVariables.CategoryColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCategoryNull() { this[this.tableDef_DerivedVariables.CategoryColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDescriptionNull() { return this.IsNull(this.tableDef_DerivedVariables.DescriptionColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDescriptionNull() { this[this.tableDef_DerivedVariables.DescriptionColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] - public bool IsCountriesNull() { - return this.IsNull(this.tableDef_DerivedVariables.CountriesColumn); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] - public void SetCountriesNull() { - this[this.tableDef_DerivedVariables.CountriesColumn] = global::System.Convert.DBNull; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDefaultValueNull() { return this.IsNull(this.tableDef_DerivedVariables.DefaultValueColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDefaultValueNull() { this[this.tableDef_DerivedVariables.DefaultValueColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsCommentsNull() { return this.IsNull(this.tableDef_DerivedVariables.CommentsColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetCommentsNull() { this[this.tableDef_DerivedVariables.CommentsColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsPrivateNull() { + return this.IsNull(this.tableDef_DerivedVariables.PrivateColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetPrivateNull() { + this[this.tableDef_DerivedVariables.PrivateColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesDetailRow[] GetDef_DerivedVariablesDetailRows() { if ((this.Table.ChildRelations["DerivedVariables_DerivedVariablesDetail1"] == null)) { return new Def_DerivedVariablesDetailRow[0]; @@ -10308,14 +10536,14 @@ public partial class Def_DerivedVariablesDetailRow : global::System.Data.DataRow private Def_DerivedVariablesDetailDataTable tableDef_DerivedVariablesDetail; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal Def_DerivedVariablesDetailRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableDef_DerivedVariablesDetail = ((Def_DerivedVariablesDetailDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string VariableName { get { try { @@ -10332,7 +10560,7 @@ public string VariableName { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string Condition { get { try { @@ -10349,7 +10577,7 @@ public string Condition { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public string DerivedValue { get { try { @@ -10366,7 +10594,7 @@ public string DerivedValue { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesRow DerivedVariables_defRow { get { return ((Def_DerivedVariablesRow)(this.GetParentRow(this.Table.ParentRelations["DerivedVariables_DerivedVariablesDetail1"]))); @@ -10377,37 +10605,37 @@ public Def_DerivedVariablesRow DerivedVariables_defRow { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsVariableNameNull() { return this.IsNull(this.tableDef_DerivedVariablesDetail.VariableNameColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetVariableNameNull() { this[this.tableDef_DerivedVariablesDetail.VariableNameColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsConditionNull() { return this.IsNull(this.tableDef_DerivedVariablesDetail.ConditionColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetConditionNull() { this[this.tableDef_DerivedVariablesDetail.ConditionColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsDerivedValueNull() { return this.IsNull(this.tableDef_DerivedVariablesDetail.DerivedValueColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetDerivedValueNull() { this[this.tableDef_DerivedVariablesDetail.DerivedValueColumn] = global::System.Convert.DBNull; } @@ -10421,14 +10649,14 @@ public partial class GeneralRow : global::System.Data.DataRow { private GeneralDataTable tableGeneral; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] internal GeneralRow(global::System.Data.DataRowBuilder rb) : base(rb) { this.tableGeneral = ((GeneralDataTable)(this.Table)); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool PublicVersion { get { try { @@ -10444,13 +10672,13 @@ public bool PublicVersion { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public bool IsPublicVersionNull() { return this.IsNull(this.tableGeneral.PublicVersionColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public void SetPublicVersionNull() { this[this.tableGeneral.PublicVersionColumn] = global::System.Convert.DBNull; } @@ -10459,7 +10687,7 @@ public void SetPublicVersionNull() { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_BasicCountrySpecificDetailRowChangeEvent : global::System.EventArgs { private Cur_BasicCountrySpecificDetailRow eventRow; @@ -10467,14 +10695,14 @@ public class Cur_BasicCountrySpecificDetailRowChangeEvent : global::System.Event private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicCountrySpecificDetailRowChangeEvent(Cur_BasicCountrySpecificDetailRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicCountrySpecificDetailRow Row { get { return this.eventRow; @@ -10482,7 +10710,7 @@ public Cur_BasicCountrySpecificDetailRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10493,7 +10721,7 @@ public Cur_BasicCountrySpecificDetailRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_CategoriesRowChangeEvent : global::System.EventArgs { private Cur_CategoriesRow eventRow; @@ -10501,14 +10729,14 @@ public class Cur_CategoriesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesRowChangeEvent(Cur_CategoriesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CategoriesRow Row { get { return this.eventRow; @@ -10516,7 +10744,7 @@ public Cur_CategoriesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10527,7 +10755,7 @@ public Cur_CategoriesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_CountriesRowChangeEvent : global::System.EventArgs { private Cur_CountriesRow eventRow; @@ -10535,14 +10763,14 @@ public class Cur_CountriesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesRowChangeEvent(Cur_CountriesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_CountriesRow Row { get { return this.eventRow; @@ -10550,7 +10778,7 @@ public Cur_CountriesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10561,7 +10789,7 @@ public Cur_CountriesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_AdvancedVariablesRowChangeEvent : global::System.EventArgs { private Cur_AdvancedVariablesRow eventRow; @@ -10569,14 +10797,14 @@ public class Cur_AdvancedVariablesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesRowChangeEvent(Cur_AdvancedVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedVariablesRow Row { get { return this.eventRow; @@ -10584,7 +10812,7 @@ public Cur_AdvancedVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10595,7 +10823,7 @@ public Cur_AdvancedVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_AdvancedCountrySpecificVariablesRowChangeEvent : global::System.EventArgs { private Cur_AdvancedCountrySpecificVariablesRow eventRow; @@ -10603,14 +10831,14 @@ public class Cur_AdvancedCountrySpecificVariablesRowChangeEvent : global::System private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesRowChangeEvent(Cur_AdvancedCountrySpecificVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificVariablesRow Row { get { return this.eventRow; @@ -10618,7 +10846,7 @@ public Cur_AdvancedCountrySpecificVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10629,7 +10857,7 @@ public Cur_AdvancedCountrySpecificVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_BasicVariablesRowChangeEvent : global::System.EventArgs { private Cur_BasicVariablesRow eventRow; @@ -10637,14 +10865,14 @@ public class Cur_BasicVariablesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesRowChangeEvent(Cur_BasicVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_BasicVariablesRow Row { get { return this.eventRow; @@ -10652,7 +10880,7 @@ public Cur_BasicVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10663,7 +10891,7 @@ public Cur_BasicVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_AdvancedCountrySpecificDetailRowChangeEvent : global::System.EventArgs { private Cur_AdvancedCountrySpecificDetailRow eventRow; @@ -10671,14 +10899,14 @@ public class Cur_AdvancedCountrySpecificDetailRowChangeEvent : global::System.Ev private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailRowChangeEvent(Cur_AdvancedCountrySpecificDetailRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_AdvancedCountrySpecificDetailRow Row { get { return this.eventRow; @@ -10686,7 +10914,7 @@ public Cur_AdvancedCountrySpecificDetailRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10697,7 +10925,7 @@ public Cur_AdvancedCountrySpecificDetailRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_YearsRowChangeEvent : global::System.EventArgs { private Cur_YearsRow eventRow; @@ -10705,14 +10933,14 @@ public class Cur_YearsRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_YearsRowChangeEvent(Cur_YearsRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_YearsRow Row { get { return this.eventRow; @@ -10720,7 +10948,7 @@ public Cur_YearsRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10731,7 +10959,7 @@ public Cur_YearsRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_DerivedVariablesRowChangeEvent : global::System.EventArgs { private Cur_DerivedVariablesRow eventRow; @@ -10739,14 +10967,14 @@ public class Cur_DerivedVariablesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_DerivedVariablesRowChangeEvent(Cur_DerivedVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_DerivedVariablesRow Row { get { return this.eventRow; @@ -10754,7 +10982,7 @@ public Cur_DerivedVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10765,7 +10993,7 @@ public Cur_DerivedVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Cur_DerivedVariablesDetailRowChangeEvent : global::System.EventArgs { private Cur_DerivedVariablesDetailRow eventRow; @@ -10773,14 +11001,14 @@ public class Cur_DerivedVariablesDetailRowChangeEvent : global::System.EventArgs private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_DerivedVariablesDetailRowChangeEvent(Cur_DerivedVariablesDetailRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Cur_DerivedVariablesDetailRow Row { get { return this.eventRow; @@ -10788,7 +11016,7 @@ public Cur_DerivedVariablesDetailRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10799,7 +11027,7 @@ public Cur_DerivedVariablesDetailRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_BasicCountrySpecificDetailRowChangeEvent : global::System.EventArgs { private Def_BasicCountrySpecificDetailRow eventRow; @@ -10807,14 +11035,14 @@ public class Def_BasicCountrySpecificDetailRowChangeEvent : global::System.Event private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicCountrySpecificDetailRowChangeEvent(Def_BasicCountrySpecificDetailRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicCountrySpecificDetailRow Row { get { return this.eventRow; @@ -10822,7 +11050,7 @@ public Def_BasicCountrySpecificDetailRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10833,7 +11061,7 @@ public Def_BasicCountrySpecificDetailRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_CategoriesRowChangeEvent : global::System.EventArgs { private Def_CategoriesRow eventRow; @@ -10841,14 +11069,14 @@ public class Def_CategoriesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CategoriesRowChangeEvent(Def_CategoriesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CategoriesRow Row { get { return this.eventRow; @@ -10856,7 +11084,7 @@ public Def_CategoriesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10867,7 +11095,7 @@ public Def_CategoriesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_CountriesRowChangeEvent : global::System.EventArgs { private Def_CountriesRow eventRow; @@ -10875,14 +11103,14 @@ public class Def_CountriesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CountriesRowChangeEvent(Def_CountriesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_CountriesRow Row { get { return this.eventRow; @@ -10890,7 +11118,7 @@ public Def_CountriesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10901,7 +11129,7 @@ public Def_CountriesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_AdvancedVariablesRowChangeEvent : global::System.EventArgs { private Def_AdvancedVariablesRow eventRow; @@ -10909,14 +11137,14 @@ public class Def_AdvancedVariablesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedVariablesRowChangeEvent(Def_AdvancedVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedVariablesRow Row { get { return this.eventRow; @@ -10924,7 +11152,7 @@ public Def_AdvancedVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10935,7 +11163,7 @@ public Def_AdvancedVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_AdvancedCountrySpecificVariablesRowChangeEvent : global::System.EventArgs { private Def_AdvancedCountrySpecificVariablesRow eventRow; @@ -10943,14 +11171,14 @@ public class Def_AdvancedCountrySpecificVariablesRowChangeEvent : global::System private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificVariablesRowChangeEvent(Def_AdvancedCountrySpecificVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificVariablesRow Row { get { return this.eventRow; @@ -10958,7 +11186,7 @@ public Def_AdvancedCountrySpecificVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -10969,7 +11197,7 @@ public Def_AdvancedCountrySpecificVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_BasicVariablesRowChangeEvent : global::System.EventArgs { private Def_BasicVariablesRow eventRow; @@ -10977,14 +11205,14 @@ public class Def_BasicVariablesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicVariablesRowChangeEvent(Def_BasicVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_BasicVariablesRow Row { get { return this.eventRow; @@ -10992,7 +11220,7 @@ public Def_BasicVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -11003,7 +11231,7 @@ public Def_BasicVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_AdvancedCountrySpecificDetailRowChangeEvent : global::System.EventArgs { private Def_AdvancedCountrySpecificDetailRow eventRow; @@ -11011,14 +11239,14 @@ public class Def_AdvancedCountrySpecificDetailRowChangeEvent : global::System.Ev private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificDetailRowChangeEvent(Def_AdvancedCountrySpecificDetailRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_AdvancedCountrySpecificDetailRow Row { get { return this.eventRow; @@ -11026,7 +11254,7 @@ public Def_AdvancedCountrySpecificDetailRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -11037,7 +11265,7 @@ public Def_AdvancedCountrySpecificDetailRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_YearsRowChangeEvent : global::System.EventArgs { private Def_YearsRow eventRow; @@ -11045,14 +11273,14 @@ public class Def_YearsRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_YearsRowChangeEvent(Def_YearsRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_YearsRow Row { get { return this.eventRow; @@ -11060,7 +11288,7 @@ public Def_YearsRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -11071,7 +11299,7 @@ public Def_YearsRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_DerivedVariablesRowChangeEvent : global::System.EventArgs { private Def_DerivedVariablesRow eventRow; @@ -11079,14 +11307,14 @@ public class Def_DerivedVariablesRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesRowChangeEvent(Def_DerivedVariablesRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesRow Row { get { return this.eventRow; @@ -11094,7 +11322,7 @@ public Def_DerivedVariablesRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -11105,7 +11333,7 @@ public Def_DerivedVariablesRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class Def_DerivedVariablesDetailRowChangeEvent : global::System.EventArgs { private Def_DerivedVariablesDetailRow eventRow; @@ -11113,14 +11341,14 @@ public class Def_DerivedVariablesDetailRowChangeEvent : global::System.EventArgs private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesDetailRowChangeEvent(Def_DerivedVariablesDetailRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public Def_DerivedVariablesDetailRow Row { get { return this.eventRow; @@ -11128,7 +11356,7 @@ public Def_DerivedVariablesDetailRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; @@ -11139,7 +11367,7 @@ public Def_DerivedVariablesDetailRow Row { /// ///Row event argument class /// - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public class GeneralRowChangeEvent : global::System.EventArgs { private GeneralRow eventRow; @@ -11147,14 +11375,14 @@ public class GeneralRowChangeEvent : global::System.EventArgs { private global::System.Data.DataRowAction eventAction; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public GeneralRowChangeEvent(GeneralRow row, global::System.Data.DataRowAction action) { this.eventRow = row; this.eventAction = action; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public GeneralRow Row { get { return this.eventRow; @@ -11162,7 +11390,7 @@ public GeneralRow Row { } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public global::System.Data.DataRowAction Action { get { return this.eventAction; diff --git a/EM_Plugins/Hypothetical Household/VariableDataSet.xsd b/EM_Plugins/Hypothetical Household/VariableDataSet.xsd index 148df0a..b89f5e8 100644 --- a/EM_Plugins/Hypothetical Household/VariableDataSet.xsd +++ b/EM_Plugins/Hypothetical Household/VariableDataSet.xsd @@ -12,7 +12,7 @@ - + @@ -21,21 +21,21 @@ - + - + - + @@ -52,7 +52,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -80,7 +80,7 @@ - + @@ -91,14 +91,14 @@ - + - + @@ -108,19 +108,21 @@ + - + + - + @@ -129,21 +131,21 @@ - + - + - + @@ -160,7 +162,7 @@ - + @@ -173,7 +175,7 @@ - + @@ -188,7 +190,7 @@ - + @@ -199,27 +201,27 @@ - + - + - + - + @@ -228,7 +230,7 @@ - + @@ -268,7 +270,7 @@ - + @@ -306,22 +308,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EM_Plugins/Hypothetical Household/VariableDataSet.xss b/EM_Plugins/Hypothetical Household/VariableDataSet.xss index c71c927..3eee2ea 100644 --- a/EM_Plugins/Hypothetical Household/VariableDataSet.xss +++ b/EM_Plugins/Hypothetical Household/VariableDataSet.xss @@ -4,43 +4,43 @@ Changes to this file may cause incorrect behavior and will be lost if the code is regenerated. --> - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + 300 - 119 + 87 300 182 - 292 + 257 182 @@ -49,11 +49,11 @@ 259 - 119 + 87 259 - 345 + 363 @@ -61,11 +61,11 @@ 307 - 119 + 87 307 - 174 + 192 @@ -76,7 +76,7 @@ 644 - 513 + 445 644 @@ -84,19 +84,19 @@ - 502 - 555 + 462 + 507 521 - 555 + 507 521 606 - 513 + 445 606 @@ -104,7 +104,7 @@ - 496 + 468 219 @@ -116,7 +116,7 @@ - 353 + 324 67 @@ -125,19 +125,7 @@ - - - - 647 - 85 - - - 695 - 85 - - - - + 1539 @@ -145,15 +133,15 @@ 1539 - 160 + 161 1531 - 160 + 161 - + 1633 @@ -161,15 +149,15 @@ 1633 - 172 + 173 1694 - 172 + 173 - + 1579 @@ -177,15 +165,15 @@ 1579 - 420 + 421 1405 - 420 + 421 - + 2179 @@ -193,11 +181,11 @@ 2179 - 188 + 206 - + 1987 @@ -209,7 +197,7 @@ - + 1405 @@ -221,7 +209,7 @@ - + 1602 @@ -229,15 +217,15 @@ 1602 - 377 + 378 1610 - 377 + 378 - + 1800 @@ -249,5 +237,17 @@ + + + + 615 + 96 + + + 695 + 96 + + + \ No newline at end of file diff --git a/EM_Plugins/Hypothetical Household/data/HouseholdData.xml b/EM_Plugins/Hypothetical Household/data/HouseholdData.xml index 42be5fa..88ec8e1 100644 --- a/EM_Plugins/Hypothetical Household/data/HouseholdData.xml +++ b/EM_Plugins/Hypothetical Household/data/HouseholdData.xml @@ -585,6 +585,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1156,6 +1182,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1727,6 +1779,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2298,6 +2376,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2869,6 +2973,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3440,6 +3570,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3689,7 +3845,7 @@ 0 1 7 - Reference|RefTable_1837444076|100|False|200|5 + Reference|RefTable_761107280|100|False|200|5 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|0|0 Value|RefTable_1927503380|40|False|0|0 @@ -4205,6 +4361,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1140293655 @@ -4222,7 +4394,7 @@ 0 1 7 - Reference|RefTable_1837444076|150|False|5000|10 + Reference|RefTable_761107280|150|False|5000|10 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|| Value|RefTable_1927503380|40|False|0|0 @@ -4738,6 +4910,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1862539434 @@ -5271,6 +5459,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1745140455 @@ -5804,6 +6008,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1767758501 @@ -5821,7 +6041,7 @@ 0 1 7 - Reference|RefTable_1837444076|100|False|0|0 + Reference|RefTable_761107280|100|False|0|0 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|0|0 Value|RefTable_1927503380|40|False|0|0 @@ -6337,6 +6557,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 767614029 @@ -6354,7 +6590,7 @@ 0 1 7 - Reference|RefTable_1837444076|150|False|5000|10 + Reference|RefTable_761107280|150|False|5000|10 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|| Value|RefTable_1927503380|40|False|0|0 @@ -6870,6 +7106,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1168192836 @@ -6887,7 +7139,7 @@ 0 1 7 - Reference|RefTable_1837444076|100|False|0|0 + Reference|RefTable_761107280|100|False|0|0 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|0|0 Value|RefTable_1927503380|40|False|0|0 @@ -7403,6 +7655,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1614233384 @@ -7936,6 +8204,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 651414319 @@ -8469,6 +8753,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 786763316 @@ -8486,7 +8786,7 @@ 0 1 7 - Reference|RefTable_1837444076|100|False|0|0 + Reference|RefTable_761107280|100|False|0|0 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|0|0 Value|RefTable_1927503380|40|False|0|0 @@ -9002,6 +9302,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1488549350 @@ -9019,7 +9335,7 @@ 0 1 7 - Reference|RefTable_1837444076|100|False|0|0 + Reference|RefTable_761107280|100|False|0|0 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|0|0 Value|RefTable_1927503380|40|False|0|0 @@ -9535,6 +9851,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 987413781 @@ -10068,6 +10400,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 855049006 @@ -10601,6 +10949,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 936121353 @@ -11134,6 +11498,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 216693497 @@ -11151,7 +11531,7 @@ 0 1 7 - Reference|RefTable_1837444076|100|False|0|0 + Reference|RefTable_761107280|100|False|0|0 Value|RefTable_1188845774|0|False|| Value|RefTable_1188845774|0|False|0|0 Value|RefTable_1927503380|40|False|0|0 @@ -11667,6 +12047,22 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 1986903142 @@ -12200,5 +12596,21 @@ Value|RefTable_1927503380|0|False|0|0 1 1 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|95|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + Value|RefTable_1837444076|0|False|0|0 + 2 + 1 + 1 + Value|RefTable_761107280|75|False|0|0 \ No newline at end of file diff --git a/EM_Plugins/Hypothetical Household/data/ReferenceTables.xml b/EM_Plugins/Hypothetical Household/data/ReferenceTables.xml index 764a3fa..d4fb9bb 100644 --- a/EM_Plugins/Hypothetical Household/data/ReferenceTables.xml +++ b/EM_Plugins/Hypothetical Household/data/ReferenceTables.xml @@ -28,7 +28,7 @@ - + @@ -45,6 +45,7 @@ + @@ -53,11 +54,12 @@ - RefTable_1837444076 + RefTable_761107280 EU-SILC average wage - Own calculations based on EU-SILC, see the HHoT manual for more information, update 07-12-2021 + + Own calculations based on EU-SILC, see the HHoT manual for more information, update 05-12-2022 - + AT <_x0032_009>2854.6318 <_x0032_010>2796.5198 @@ -70,10 +72,11 @@ <_x0032_017>3374.3754 <_x0032_018>3487.144 <_x0032_019>3557.86 - <_x0032_020>3599.096063 - <_x0032_021>3640.852783 - - + <_x0032_020>3652.098982 + <_x0032_021>3755.293271 + <_x0032_022>3976.885043 + + BE <_x0032_009>3077.6188 <_x0032_010>3184.5994 @@ -86,10 +89,11 @@ <_x0032_017>3695.6823 <_x0032_018>3477.709 <_x0032_019>3568.242 - <_x0032_020>3702.743361 - <_x0032_021>3766.03812 - - + <_x0032_020>3570.837085 + <_x0032_021>3760.278297 + <_x0032_022>4050.927827 + + BG <_x0032_009>630.363943 <_x0032_010>616.8842565 @@ -102,10 +106,11 @@ <_x0032_017>951.0442843 <_x0032_018>1172.477457 <_x0032_019>1213.59737 - <_x0032_020>1327.936469 - <_x0032_021>1412.927161 - - + <_x0032_020>1331.527221 + <_x0032_021>1484.818792 + <_x0032_022>1605.085025 + + CY <_x0032_009>1880.5124 <_x0032_010>1943.4984 @@ -120,8 +125,9 @@ <_x0032_019>1938.144 <_x0032_020>1977.102801 <_x0032_021>1999.427947 - - + <_x0032_022>2022.00779 + + CZ <_x0032_009>21846.01591 <_x0032_010>22616.62624 @@ -134,10 +140,11 @@ <_x0032_017>28540.56945 <_x0032_018>30557.24639 <_x0032_019>33300.30482 - <_x0032_020>34750.39282 - <_x0032_021>35849.1809 - - + <_x0032_020>34800.16031 + <_x0032_021>36924.54898 + <_x0032_022>38604.9336 + + DE <_x0032_009>2901.515 <_x0032_010>2926.9205 @@ -149,11 +156,12 @@ <_x0032_016>3363.3832 <_x0032_017>3493.2534 <_x0032_018>3637.692 - <_x0032_019>3746.816916 - <_x0032_020>3768.107546 - <_x0032_021>3871.688548 - - + <_x0032_019>3745.620962 + <_x0032_020>3741.166108 + <_x0032_021>3871.774326 + <_x0032_022>4212.145418 + + DK <_x0032_009>27023.39088 <_x0032_010>28209.69023 @@ -166,10 +174,11 @@ <_x0032_017>30885.47037 <_x0032_018>32817.43088 <_x0032_019>34336.22806 - <_x0032_020>35310.99678 - <_x0032_021>35822.75035 - - + <_x0032_020>35063.05333 + <_x0032_021>35789.87859 + <_x0032_022>36566.82974 + + EE <_x0032_009>12794.33701 <_x0032_010>12946.37298 @@ -183,9 +192,10 @@ <_x0032_018>1254.644 <_x0032_019>1451.894 <_x0032_020>1494.202212 - <_x0032_021>1500.393657 - - + <_x0032_021>1597.392972 + <_x0032_022>1705.743271 + + EL <_x0032_009>1816.7519 <_x0032_010>1746.9625 @@ -198,10 +208,11 @@ <_x0032_017>1514.0201 <_x0032_018>1473.398 <_x0032_019>1539.79 - <_x0032_020>1539.79 - <_x0032_021>1539.79 - - + <_x0032_020>1512.300587 + <_x0032_021>1544.665984 + <_x0032_022>1544.665984 + + ES <_x0032_009>1968.1556 <_x0032_010>1943.9633 @@ -215,9 +226,10 @@ <_x0032_018>1874.648 <_x0032_019>2047.354 <_x0032_020>1995.497588 - <_x0032_021>1991.904305 - - + <_x0032_021>2118.004433 + <_x0032_022>2162.475235 + + FI <_x0032_009>2795.3671 <_x0032_010>2853.6475 @@ -230,10 +242,11 @@ <_x0032_017>3263.9674 <_x0032_018>3334.083 <_x0032_019>3433.123 - <_x0032_020>3494.428768 - <_x0032_021>3582.709074 - - + <_x0032_020>3501.73645 + <_x0032_021>3582.602303 + <_x0032_022>3680.621517 + + FR <_x0032_009>2450.1208 <_x0032_010>2417.9722 @@ -246,10 +259,11 @@ <_x0032_017>2780.5434 <_x0032_018>2885.647 <_x0032_019>2969.869811 - <_x0032_020>2803.949461 - <_x0032_021>2954.62876 - - + <_x0032_020>2852.500641 + <_x0032_021>3026.624911 + <_x0032_022>3145.531393 + + HU <_x0032_009>153020.432 <_x0032_010>157403.9056 @@ -262,10 +276,11 @@ <_x0032_017>165534.2875 <_x0032_018>206364.1148 <_x0032_019>266583.3825 - <_x0032_020>266583.3825 - <_x0032_021>285504.2491 - - + <_x0032_020>292374.9548 + <_x0032_021>317849.4176 + <_x0032_022>317849.4176 + + HR <_x0032_009>6546.366317 <_x0032_010>6569.495557 @@ -279,9 +294,10 @@ <_x0032_018>7731.522513 <_x0032_019>8207.045242 <_x0032_020>8628.120313 - <_x0032_021>8800.540223 - - + <_x0032_021>8987.209713 + <_x0032_022>9639.840448 + + IE <_x0032_009>3588.2625 <_x0032_010>3809.851 @@ -293,11 +309,12 @@ <_x0032_016>3690.9119 <_x0032_017>3998.9267 <_x0032_018>3828.51 - <_x0032_019>3967.98465 - <_x0032_020>4171.600737 - <_x0032_021>4317.055433 - - + <_x0032_019>3584.134 + <_x0032_020>3768.052891 + <_x0032_021>3899.436747 + <_x0032_022>4181.520511 + + IT <_x0032_009>2150.0709 <_x0032_010>2203.7211 @@ -309,11 +326,12 @@ <_x0032_016>2373.3955 <_x0032_017>2362.0647 <_x0032_018>2349.907 - <_x0032_019>2369.259175 - <_x0032_020>2384.464456 - <_x0032_021>2398.287438 - - + <_x0032_019>2473.199 + <_x0032_020>2489.071339 + <_x0032_021>2512.398867 + <_x0032_022>2532.359536 + + LT <_x0032_009>1955.514273 <_x0032_010>1854.735328 @@ -326,10 +344,11 @@ <_x0032_017>838.57521 <_x0032_018>913.5438 <_x0032_019>1260.007 - <_x0032_020>1394.892848 - <_x0032_021>1505.083765 - - + <_x0032_020>1388.551017 + <_x0032_021>1524.111082 + <_x0032_022>1707.02947 + + LU <_x0032_009>4387.1155 <_x0032_010>4344.2807 @@ -344,8 +363,9 @@ <_x0032_019>5652.766 <_x0032_020>5846.249937 <_x0032_021>6009.847443 - - + <_x0032_022>6160.016524 + + LV <_x0032_009>458.9523479 <_x0032_010>431.8570464 @@ -359,9 +379,10 @@ <_x0032_018>1108.648 <_x0032_019>1155.196 <_x0032_020>1227.127349 - <_x0032_021>1263.94117 - - + <_x0032_021>1370.990048 + <_x0032_022>1480.669252 + + MT <_x0032_009>1444.504 <_x0032_010>1527.9823 @@ -374,10 +395,11 @@ <_x0032_017>1871.9675 <_x0032_018>1924.42 <_x0032_019>2087.889 - <_x0032_020>2011.940586 - <_x0032_021>2048.37026 - - + <_x0032_020>2014.177496 + <_x0032_021>2086.717285 + <_x0032_022>2232.755539 + + NL <_x0032_009>3087.2321 <_x0032_010>3324.9566 @@ -390,10 +412,11 @@ <_x0032_017>3733.0484 <_x0032_018>3793.876 <_x0032_019>3994.217 - <_x0032_020>4036.173061 - <_x0032_021>4036.173061 - - + <_x0032_020>4120.350168 + <_x0032_021>4212.847825 + <_x0032_022>4212.847825 + + PL <_x0032_009>2900.097431 <_x0032_010>2956.079278 @@ -405,11 +428,12 @@ <_x0032_016>3665.927436 <_x0032_017>3941.581672 <_x0032_018>4242.732354 - <_x0032_019>4541.304316 - <_x0032_020>4715.139714 - <_x0032_021>5121.950581 - - + <_x0032_019>4788.390218 + <_x0032_020>4971.683752 + <_x0032_021>5446.679586 + <_x0032_022>5597.854204 + + PT <_x0032_009>1266.2018 <_x0032_010>1296.1321 @@ -423,9 +447,10 @@ <_x0032_018>1379.943 <_x0032_019>1482.457 <_x0032_020>1506.192744 - <_x0032_021>1521.255813 - - + <_x0032_021>1525.820379 + <_x0032_022>1615.057649 + + RO <_x0032_009>1361.982356 <_x0032_010>1379.48994 @@ -439,9 +464,10 @@ <_x0032_018>3695.243422 <_x0032_019>3929.842972 <_x0032_020>4221.362336 - <_x0032_021>4293.432401 - - + <_x0032_021>4680.019467 + <_x0032_022>5107.459734 + + SE <_x0032_009>26410.92502 <_x0032_010>26176.51611 @@ -454,10 +480,11 @@ <_x0032_017>31422.3109 <_x0032_018>32671.24934 <_x0032_019>33565.19152 - <_x0032_020>34490.26431 - <_x0032_021>35219.10954 - - + <_x0032_020>35188.24081 + <_x0032_021>35946.55073 + <_x0032_022>36957.63062 + + SI <_x0032_009>1380.3734 <_x0032_010>1415.2489 @@ -471,9 +498,10 @@ <_x0032_018>1641.289 <_x0032_019>1709.179 <_x0032_020>1808.932434 - <_x0032_021>1930.768838 - - + <_x0032_021>1919.434992 + <_x0032_022>1915.166527 + + SK <_x0032_009>671.63838 <_x0032_010>689.41069 @@ -487,9 +515,10 @@ <_x0032_018>928.7319 <_x0032_019>945.9066 <_x0032_020>981.4214082 - <_x0032_021>1042.056447 - - + <_x0032_021>1048.986165 + <_x0032_022>1136.473864 + + UK <_x0032_009>2532.604219 <_x0032_010>2589.569157 @@ -504,5 +533,6 @@ <_x0032_019>3131.386885 <_x0032_020>3142.112057 <_x0032_021>3258.452915 - + <_x0032_022>3258.452915 + \ No newline at end of file diff --git a/EM_Plugins/Hypothetical Household/data/VariableSettings.xml b/EM_Plugins/Hypothetical Household/data/VariableSettings.xml index 3953166..abf2704 100644 --- a/EM_Plugins/Hypothetical Household/data/VariableSettings.xml +++ b/EM_Plugins/Hypothetical Household/data/VariableSettings.xml @@ -100,6 +100,7 @@ + @@ -109,6 +110,7 @@ + @@ -148,6 +150,7 @@ + @@ -160,6 +163,7 @@ + @@ -174,6 +178,7 @@ + @@ -201,9 +206,10 @@ - + + @@ -256,7 +262,7 @@ - + @@ -301,7 +307,6 @@ - @@ -310,6 +315,7 @@ + @@ -557,7 +563,7 @@ financial capital Numeric Value|RefTable_1188845774|0|False|0|0 - AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK + AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK false @@ -1418,17 +1424,6 @@ UK false - - bdimy - BENEFIT/PENSION - disability : months per year - Numeric - Value|RefTable_1927503380|0|False|0|0 - - - AT - false - bdinc BENEFIT/PENSION @@ -1602,7 +1597,7 @@ Value|RefTable_1188845774|0|False|0|0 - AT, PL + AT, LV, PL false @@ -2254,17 +2249,6 @@ MT, UK false - - boanc - BENEFIT/PENSION - old age : non-contributory - Numeric - Value|RefTable_1188845774|0|False|0|0 - - - EL - false - boawr BENEFIT/PENSION @@ -3310,17 +3294,6 @@ FI false - - pdimy - BENEFIT/PENSION - disability : months per year - Numeric - Value|RefTable_1927503380|0|False|0|0 - - - BE, FI, LU, RO, SK - false - pdinc BENEFIT/PENSION @@ -3794,17 +3767,6 @@ PL, SI, SK false - - psumy - BENEFIT/PENSION - survivors : months per year - Numeric - Value|RefTable_1927503380|0|False|0|0 - - - AT, FI, IT, LU, RO - false - psuor BENEFIT/PENSION @@ -4077,7 +4039,7 @@ Value|RefTable_1188845774|0|False|0|0 - BE, ES, PL, PT, UK + BE, ES, IT, PL, PT, UK false @@ -4850,17 +4812,6 @@ PL false - - yptmp - INCOME - private transfers : maintenance payment - Numeric - Value|RefTable_1188845774|0|False|0|0 - - - PL, RO, UK - false - yptmpnt INCOME @@ -5135,6 +5086,91 @@ false false + + bdimy + BENEFIT/PENSION + disability : months per year + Numeric + Value|RefTable_1927503380|0|False|0|0 + + + AT, HR + false + + + boanc + BENEFIT/PENSION + old age : non-contributory + Numeric + Value|RefTable_1188845774|0|False|0|0 + + + EL, MT + false + + + pdimy + BENEFIT/PENSION + disability : months per year + Numeric + Value|RefTable_1927503380|0|False|0|0 + + + BE, FI, HR, LU, LV, MT, RO, SK + false + + + yptmp + INCOME + private transfers : maintenance payment + Numeric + Value|RefTable_1188845774|0|False|0|0 + + + LV, MT, PL, RO, UK + false + + + xed00 + EXPENDITURE + education + Numeric + Value|RefTable_1837444076|0|False|0|0 + AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK + false + false + + + xhl00 + EXPENDITURE + health care + Numeric + Value|RefTable_1837444076|0|False|0|0 + AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK + false + false + + + bched05 + BENEFIT/PENSION + child : education : 05 + Numeric + Value|RefTable_1837444076|0|False|0|0 + LU + false + false + + + psumy + BENEFIT/PENSION + survivors : months per year + Numeric + Value|RefTable_1927503380|0|False|0|0 + + + AT, FI, HR, IT, LU, MT, RO + false + drg01 DEMOGRAPHIC @@ -5177,13 +5213,6 @@ Categorical false - - amrar - ASSETS - main residence : area in m2 - Numeric - true - tpceepx TAX @@ -5421,6 +5450,93 @@ true false + + amrar + ASSETS + main residence : area in m2 + Numeric + true + + + lemhw02 + LABOUR MARKET + Hours worked per week : Other jobs + Numeric + false + false + + + yemajmy + INCOME + Employment : Months per Year : Other jobs + Numeric + false + false + + + yemmy01 + INCOME + Employment : Months per Year : part time job + Numeric + false + false + + + lemhw01 + LABOUR MARKET + weekly hours worked in part time job + Numeric + false + false + + + decrg + DEMOGRAPHIC + DEMOGRAPHIC : study and live abroad + Categorical + false + false + + + yemls + INCOME + Income: employment: lump sum + Numeric + false + false + + + bot01 + INCOME + childbirth related benefits 01 + Numeric + false + false + + + bot02 + INCOME + childbirth related benefits 02 + Numeric + false + false + + + amrtn00 + ASSETS + Main Residence : Tenure : Main/Basic + Categorical + true + false + + + dmc + DEMOGRAPHIC + Municipality of Residence + Categorical + false + false + dgn DEMOGRAPHIC @@ -5640,21 +5756,6 @@ CENTRALNY (Central)#POŁUDNIOWY (Southern)#WSCHODNI (Eastern)#PÓŁNOCNO-ZACHODNI (North-Western)#POŁUDNIOWO-ZACHODNI (South-Western)#PÓŁNOCNY (Northern) PL - - amrar - Value|RefTable_1927503380|70.8|False|0|0 - EE - - - amrar - Value|RefTable_1927503380|75|False|0|0 - EL - - - amrar - Value|RefTable_1927503380|65|False|0|0 - PL - lcl 1 @@ -6067,31 +6168,119 @@ yes#no, cannot afford#no, other reason RO - - 2009 - - - 2010 - - - 2011 - - - 2012 - - - 2013 - - - 2014 - - - 2015 - - - 2016 - - + + amrar + Value|RefTable_1927503380|70.8|False|0|0 + EE + + + amrar + Value|RefTable_1927503380|75|False|0|0 + EL + + + amrar + Value|RefTable_1927503380|65|False|0|0 + PL + + + amrar + Value|RefTable_1837444076|95|False|0|0 + FI + + + lemhw02 + Value|RefTable_1837444076|0|False|0|0 + HR + + + yemajmy + Value|RefTable_1837444076|0|False|0|0 + HR + + + yemmy01 + Value|RefTable_1837444076|0|False|0|0 + HR + + + lemhw01 + Value|RefTable_1837444076|0|False|0|0 + HR + + + decrg + 0 + 0#1 + no#yes + LU + + + yemls + Value|RefTable_1837444076|0|False|0|0 + MT + + + bot01 + Value|RefTable_1837444076|0|False|0|0 + MT + + + bot02 + Value|RefTable_1837444076|0|False|0|0 + MT + + + amrtn00 + 2 + 1#2#3#4#5 + social rented#private rented#owned on mortage#owned outright#other + LU + + + dmc + 1 + 1 # 2 # 3 # 4 # 5 # 6 # 7 # 8 # 9 # 10 + Riga # Daugavpils # Jelgava # Jēkabpils # Jūrmala # Liepāja # Rēzekne # Valmiera # Ventspils # Other + LV + + + lct + 1 + 0#1 + temporary contract # Permanent contract + LT + + + amrar + Value|RefTable_761107280|75|False|0|0 + LT + + + 2009 + + + 2010 + + + 2011 + + + 2012 + + + 2013 + + + 2014 + + + 2015 + + + 2016 + + 2017 @@ -6106,12 +6295,16 @@ 2021 + + 2022 + bun BENEFIT/PENSION unemployment BE, CY, CZ, DE, DK, EE, ES, FI, FR, HU, IT, LT, LV, MT, NL, PL, PT, RO, SE, SI, SK 0 + -99 bun00 @@ -6119,6 +6312,7 @@ unemployment : main/basic LV 0 + -100 bunct @@ -6126,6 +6320,7 @@ unemployment : contributory AT, BG, CY, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, NL, PT, SE, SI, SK, UK 0 + -101 bunct02 @@ -6133,6 +6328,7 @@ unemployment : contributory : 02 IT 0 + -102 bunctmy @@ -6140,6 +6336,7 @@ unemployment : contributory : months per year AT, EE, EL, ES, FI, HR 0 + -103 bunctmy02 @@ -6147,6 +6344,7 @@ unemployment : contributory : months per year : 02 IT 0 + -104 bunctnm @@ -6154,6 +6352,7 @@ unemployment : contributory : not means-tested MT 0 + -105 bunmy @@ -6161,6 +6360,7 @@ unemployment : months per year BE, BG, CY, CZ, DE, DK, FI, FR, HU, IE, LT, LU, LV, MT, NL, PL, RO, SE, SI, SK 0 + -106 bunss @@ -6168,6 +6368,7 @@ unemployment : social security LU 0 + -107 bunssmy @@ -6175,6 +6376,7 @@ unemployment : social security : months per year LU 0 + -108 dag00 @@ -6182,6 +6384,7 @@ age : main/basic LU, LV dag + -109 dcu @@ -6189,6 +6392,7 @@ consensual union BE 0 + -110 dhr01 @@ -6196,6 +6400,7 @@ nr of people responsible for home EL 1 + -111 drsyy @@ -6203,6 +6408,7 @@ resident : number of years LU dag + -112 lftmy @@ -6210,6 +6416,7 @@ full time worker : months per year AT 0 + -113 liamy @@ -6217,6 +6424,7 @@ inactive : months per year IE 0 + -114 liwftmy @@ -6224,13 +6432,7 @@ in work : full time worker : months per year LV 0 - - - liwmy - LABOUR MARKET - in work : months per year - AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, IE, LT, LU, LV, NL, PL, PT, RO, SI, SK - 0 + -115 lowas @@ -6238,6 +6440,7 @@ out of work : actively seeking CZ, DE, LT, PL, PT 0 + -116 lpemy @@ -6245,6 +6448,7 @@ pensioner : months per year FI 0 + -117 lpmfc @@ -6252,6 +6456,7 @@ pension membership : social insurance fund (contributing to) EL -1 + -118 lpmfr @@ -6259,6 +6464,7 @@ pension membership : social insurance fund (receiving from) EL 0 + -119 lse @@ -6266,6 +6472,7 @@ self employed AT, BG, DE, EE, HU, HR, SE 0 + -120 lserg @@ -6273,6 +6480,7 @@ self employed : registered EE 0 + -121 poa @@ -6280,6 +6488,7 @@ old age AT, CY, DE, DK, ES, FI, LV, MT, NL, PL, PT, SI, SK, SL, UK poa* - poa*my + -122 poa00 @@ -6287,6 +6496,7 @@ old age : main/basic BG, DK, PT 0 + -123 poact @@ -6294,13 +6504,7 @@ old age : contributory SI 0 - - - poamy - BENEFIT/PENSION - old age : months per year - AT, DE, FI, FR, IT, LU, PT, RO, SK - 0 + -124 poaps @@ -6308,6 +6512,7 @@ old age : private sector DE, IE 0 + -125 tintaoxyn @@ -6315,6 +6520,7 @@ income tax : tax allowance : other expenses : is? yes/no IT 0 + -126 tintccdyn @@ -6322,6 +6528,7 @@ income tax : tax credit : charitable donations : is? yes/no IT 0 + -127 tintcfuyn @@ -6329,6 +6536,7 @@ income tax : tax credit : funeral : is? yes/no IT 0 + -128 tintchlyn @@ -6336,6 +6544,7 @@ income tax : tax credit : health : is? yes/no IT 0 + -129 tintclfyn @@ -6343,6 +6552,7 @@ income tax : tax credit : life insurance : is? yes/no IT 0 + -130 tintcoxyn @@ -6350,6 +6560,7 @@ income tax : tax credit : other expenses : is? yes/no IT 0 + -131 tintcstyn @@ -6357,6 +6568,7 @@ income tax : tax credit : student : is? yes/no IT 0 + -132 xhc @@ -6364,6 +6576,7 @@ housing cost AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK xhcot + xhcrt* + xhcmo* + -133 xivhc @@ -6371,13 +6584,15 @@ imputed value : housing cost DK xhcot + xhcrt* + xhcmo* + -134 yem INCOME employment - EL, FR, PL, SI, SK + SI, SK 0 + -135 yem00 @@ -6385,6 +6600,7 @@ employment : main/basic DE, EL, FI, IT, LT, PL, RO, SI 0 + -136 yem01 @@ -6392,6 +6608,7 @@ employment : 01 BG yem + -137 yemmy @@ -6399,6 +6616,7 @@ employment : months per year AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK 0 + -138 yemtx @@ -6406,6 +6624,7 @@ employment : taxable BG, HR yem + -139 yemwg @@ -6413,6 +6632,7 @@ employment : wage/salary SI 0 + -140 yemxp @@ -6420,6 +6640,7 @@ employment : extra pay AT yem * 2 / 14 + -141 yivwg @@ -6427,6 +6648,7 @@ imputed value : wage/salary AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK 0 + -142 yse @@ -6434,6 +6656,7 @@ self employment EE, EL, FI, HR, PL, SI 0 + -143 yse00 @@ -6441,13 +6664,7 @@ self employment : main/basic SK 0 - - - ysemy - INCOME - self employment : months per year - AT, BG, CY, CZ, DE, DK, EL, ES, FR, HR, LT, LU, LV, PT, RO, SK - 0 + -144 ysepv @@ -6455,6 +6672,7 @@ self employment : previous CZ yse + -145 yxy01 @@ -6462,6 +6680,7 @@ annually : 01 DE yxy + -146 yxy02 @@ -6469,6 +6688,7 @@ annually : 02 DE yxy + -147 yxy03 @@ -6476,6 +6696,7 @@ annually : 03 DE yxy + -148 yxy04 @@ -6483,6 +6704,7 @@ annually : 04 DE yxy + -149 yxy05 @@ -6490,6 +6712,7 @@ annually : 05 DE yxy + -150 yxy06 @@ -6497,6 +6720,7 @@ annually : 06 DE yxy + -151 pyr @@ -6504,6 +6728,7 @@ benefit/pension: early retirement AT, DK, IE, PL, SK 0 + -152 lnu @@ -6511,6 +6736,7 @@ labour market: new unemployed AT, BG, DE, DK, FI, FR, HU, HR, IE, IT, LV, MT, NL, PL, RO, SK, UK 0 + -153 tis @@ -6518,6 +6744,7 @@ income tax and SICS BG, DE, EL, HR, PT 0 + -154 tad @@ -6525,6 +6752,7 @@ tax: repayments receipts AT, DE, EL, FR, HR, PT 0 + -155 yds @@ -6532,6 +6760,7 @@ income: dispossable DE, EL, HR, PT 0 + -156 tpceepi @@ -6539,6 +6768,7 @@ n/a IE 0 + -157 tpcee @@ -6546,6 +6776,7 @@ n/a IT 0 + -158 tpcpe @@ -6553,6 +6784,7 @@ n/a NL 0 + -159 tmu @@ -6560,6 +6792,7 @@ municipal government tax HR, UK 0 + -160 yempv_a @@ -6567,6 +6800,7 @@ employment : previous : add onn UK 0 + -161 kcc @@ -6574,6 +6808,7 @@ company car EL kfbcc + -162 tintace @@ -6581,6 +6816,7 @@ n/a DE 0 + -163 tintadp @@ -6588,6 +6824,7 @@ n/a DE 0 + -164 tintadt @@ -6595,6 +6832,7 @@ n/a DE 0 + -165 tintaee @@ -6602,6 +6840,7 @@ n/a DE 0 + -166 tintals @@ -6609,6 +6848,7 @@ n/a DE 0 + -167 tintaox @@ -6616,6 +6856,7 @@ n/a DE 0 + -168 tintape @@ -6623,6 +6864,7 @@ n/a DE 0 + -169 tintasp @@ -6630,6 +6872,7 @@ n/a DE 0 + -170 ydses_o @@ -6637,6 +6880,7 @@ n/a DE, HR 0 + -171 yemse @@ -6644,6 +6888,7 @@ n/a DE yem + yse + -172 lemmy @@ -6651,6 +6896,7 @@ employed: months per year HR 0 + -173 lsemy @@ -6658,6 +6904,7 @@ self employed : months per year HR 0 + -174 tin @@ -6665,6 +6912,7 @@ income tax HR 0 + -175 tscee @@ -6672,6 +6920,7 @@ sic : employee HR 0 + -176 tscer @@ -6679,6 +6928,7 @@ sic : employer HR 0 + -177 tscse @@ -6687,6 +6937,7 @@ HR 0 false + -178 bhoro @@ -6695,6 +6946,7 @@ UK amrrm - 1 false + -179 yiy @@ -6703,6 +6955,7 @@ UK yiynt + yiytx false + -180 afc @@ -6711,6 +6964,7 @@ UK (yiynt + yiytx) / 0.001 false + -181 yemmy00 @@ -6719,14 +6973,7 @@ HR, NL 0 false - - - lemhw00 - LABOUR MARKET - hours worked per week in main employment - HR - 0 - false + -182 lunmy @@ -6734,6 +6981,7 @@ unemployed : months per year AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK 0 + -183 liwwhny10_h @@ -6742,6 +6990,7 @@ AT 0 false + -184 liwwhny15_h @@ -6750,6 +6999,7 @@ AT 0 false + -185 afciv @@ -6758,6 +7008,7 @@ IT afc false + -186 ysetx @@ -6766,6 +7017,7 @@ BG yse false + -187 kfbtx @@ -6774,6 +7026,7 @@ HR kfb false + -188 lesse @@ -6782,6 +7035,7 @@ HR 0 false + -189 drgur @@ -6790,6 +7044,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK 0 false + -190 drgmd @@ -6798,6 +7053,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK 0 false + -191 drgru @@ -6806,211 +7062,313 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK 0 false + -192 + + + liwmy + LABOUR MARKET + in work : months per year + AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, NL, PL, PT, RO, SI, SK + 0 + -193 + + + poamy + BENEFIT/PENSION + old age : months per year + AT, DE, FI, FR, HR, IT, LU, LV, MT, PT, RO, SK + 0 + -194 + + + ysemy + INCOME + self employment : months per year + AT, BG, CY, CZ, DE, DK, EL, ES, FR, HR, LT, LU, LV, MT, PT, RO, SK + 0 + -195 + + + lemhw00 + LABOUR MARKET + hours worked per week in main employment + HR + 0 + false + -196 + + + yem + INCOME + employment income + PL + yempj + yemtj + false + -896 + + + yem + INCOME + employment income + EL + yemre +yemnr + false + -897 + + + yem + INCOME + employment income + FR + yem* - yemmy* + false + -898 bun les = 5 1 + -99 bun00 les = 5 1 + -100 bunct les = 5 1 + -101 bunct02 les = 5 1 + -102 bunctmy les = 5 12 + -103 bunctmy02 les = 5 12 + -104 bunctnm les = 5 1 + -105 bunmy les = 5 12 + -106 bunss les = 5 1 + -107 bunssmy les = 5 12 + -108 dcu dms = 2 1 + -110 liamy les = 7 12 - - - liwmy - les = 2 - 12 + -114 lowas les = 5 1 + -116 lpemy les = 4 12 + -117 lpmfc les = 3 1 + -118 lpmfr les = 4 1 + -119 lse les = 2 2 - - - poamy - les = 4 - 12 + -120 yemmy les = 3 12 - - - ysemy - les = 2 - 12 - - - liwmy - les = 3 - 12 + -138 liwftmy les = 2 12 + -115 lftmy les = 2 12 + -113 lftmy les = 3 12 + -113 lpmfc les = 2 3 + -118 yivwg lhw > 0 yem / (lhw * 4.35) + -142 lemmy les = 3 12 + -173 lsemy les = 2 12 + -174 bhoro amrrm = 1 1 + -179 bhoro amrrm > 1 amrrm - 1 + -179 yemmy00 les = 3 12 - - - lemhw00 - les = 3 - 40 + -182 lunmy les = 5 12 + -183 liwwhny10_h dag >= 40 72 + -184 liwwhny15_h dag >= 50 108 + -185 lserg les = 2 1 + -121 lesse les = 2 6 + -189 drgur drgud = 1 1 + -190 drgmd drgud = 2 1 + -191 drgru drgud = 3 1 + -192 + + + liwmy + les = 2 + 12 + -193 + + + liwmy + les = 3 + 12 + -193 + + + poamy + les = 4 + 12 + -194 + + + ysemy + les = 2 + 12 + -195 + + + lemhw00 + les = 3 + lhw + -196 yem @@ -7258,6 +7616,7 @@ Value|RefTable_1188845774|0|False|0|0 AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false aiv @@ -7269,6 +7628,7 @@ DK false + false aldagar @@ -7280,6 +7640,7 @@ LT false + false aldagariv @@ -7291,6 +7652,7 @@ PL false + false aldar @@ -7302,6 +7664,7 @@ LT, PL false + false aldnaar @@ -7313,6 +7676,7 @@ PL false + false amolv @@ -7324,6 +7688,7 @@ BE, EL false + false amoyl @@ -7335,6 +7700,7 @@ BE, EL false + false amriv @@ -7346,6 +7712,7 @@ IT true + false amrmv @@ -7357,6 +7724,7 @@ IE, LT true + false amrrm @@ -7368,6 +7736,7 @@ EE, EL, UK true + false amrtp @@ -7379,6 +7748,7 @@ House#Flat LT true + false aobiv @@ -7390,6 +7760,7 @@ IT false + false aoc @@ -7401,6 +7772,7 @@ BG, PL, RO false + false bac @@ -7412,6 +7784,7 @@ AT false + false bac00 @@ -7423,6 +7796,7 @@ AT false + false bac01 @@ -7434,6 +7808,7 @@ AT false + false bacot @@ -7445,6 +7820,7 @@ AT false + false bacpm @@ -7456,6 +7832,7 @@ LU false + false bca01 @@ -7467,6 +7844,7 @@ LU false + false bca02 @@ -7478,6 +7856,7 @@ LU false + false bcc @@ -7489,6 +7868,7 @@ AT, FI, SK false + false bcc00 @@ -7500,6 +7880,7 @@ AT, EE false + false bcc01my @@ -7511,6 +7892,7 @@ AT false + false bcc02my @@ -7522,6 +7904,7 @@ AT false + false bcc03my @@ -7533,6 +7916,7 @@ AT false + false bcc04my @@ -7544,6 +7928,7 @@ AT false + false bcc05 @@ -7555,6 +7940,7 @@ AT false + false bcc05my @@ -7566,6 +7952,7 @@ AT false + false bcc06 @@ -7577,6 +7964,7 @@ AT false + false bcc06my @@ -7588,6 +7976,7 @@ AT false + false bcclg @@ -7599,6 +7988,7 @@ EE false + false bccmy @@ -7610,6 +8000,7 @@ FI false + false bccnw @@ -7621,6 +8012,7 @@ RO false + false bccrd @@ -7632,6 +8024,7 @@ AT false + false bcctuyn @@ -7643,6 +8036,7 @@ no#yes AT false + false bch @@ -7654,6 +8048,7 @@ AT, BE, CY, CZ, DE, EE, ES, FI, IE, LT, PL, PT, SK, UK false + false bch00 @@ -7665,6 +8060,7 @@ BE, CZ, EE, ES, FR, LT, PL false + false bchab @@ -7676,6 +8072,7 @@ EE false + false bcham @@ -7687,6 +8084,7 @@ EE false + false bchas01 @@ -7698,6 +8096,7 @@ AT false + false bchas02 @@ -7709,6 +8108,7 @@ AT false + false bchas03 @@ -7720,6 +8120,7 @@ AT false + false bchasxc @@ -7731,6 +8132,7 @@ AT false + false bchba @@ -7742,6 +8144,7 @@ BE, BG, CY, EE, EL, LT, PL, RO, SI, SK false + false bchbals @@ -7753,6 +8156,7 @@ BG false + false bchcc @@ -7764,6 +8168,7 @@ SI false + false bchdi @@ -7775,6 +8180,7 @@ ES false + false bchdied @@ -7786,6 +8192,7 @@ PL false + false bchdiyn @@ -7797,6 +8204,7 @@ no#yes AT false + false bched @@ -7808,6 +8216,7 @@ BG, EE, EL, FR, NL, PL false + false bched01 @@ -7819,6 +8228,7 @@ LU false + false bched02 @@ -7830,6 +8240,7 @@ LU false + false bched03 @@ -7841,6 +8252,7 @@ LU false + false bched04 @@ -7852,6 +8264,7 @@ LU false + false bchlg @@ -7863,6 +8276,7 @@ EE, EL, FR, PL, SI false + false bchlp @@ -7874,6 +8288,7 @@ EE, FR, PL false + false bchlp00 @@ -7885,6 +8300,7 @@ PL false + false bchmt @@ -7896,6 +8312,7 @@ BG, CZ, RO, SI false + false bchnm @@ -7907,6 +8324,7 @@ RO false + false bchor @@ -7918,6 +8336,7 @@ LT false + false bchot @@ -7929,6 +8348,7 @@ DE, EE, ES, FR, IT, PL false + false bchpl @@ -7940,6 +8360,7 @@ PL false + false bchprls @@ -7951,6 +8372,7 @@ BG false + false bchuc @@ -7962,6 +8384,7 @@ PL false + false bchunlp @@ -7973,6 +8396,7 @@ PL false + false bchyc @@ -7984,6 +8408,7 @@ FR false + false bcrbafh @@ -7995,6 +8420,7 @@ SI false + false bcrchdi @@ -8006,6 +8432,7 @@ PL false + false bcrdi @@ -8017,6 +8444,7 @@ SK, UK false + false bcrsvcc @@ -8028,6 +8456,7 @@ SI false + false bdi @@ -8039,6 +8468,7 @@ AT, EL, FR, HR, LT, RO, SI false + false bdica @@ -8050,6 +8480,7 @@ SI false + false bdicc @@ -8061,6 +8492,7 @@ SI false + false bdict @@ -8072,6 +8504,7 @@ IE, UK false + false bdict01 @@ -8083,6 +8516,7 @@ UK false + false bdict02 @@ -8094,6 +8528,7 @@ UK false + false bdictiv01 @@ -8105,6 +8540,7 @@ UK false + false bdimb @@ -8116,6 +8552,7 @@ UK false + false bdimy @@ -8127,6 +8564,7 @@ AT false + false bdinc @@ -8138,6 +8576,7 @@ IE false + false bdioa @@ -8149,6 +8588,7 @@ UK false + false bdiot @@ -8160,6 +8600,7 @@ SK false + false bdirw @@ -8171,6 +8612,7 @@ SI false + false bdisc @@ -8182,6 +8624,7 @@ UK false + false bdisv @@ -8193,6 +8636,7 @@ LU, UK false + false bdiwi @@ -8204,6 +8648,7 @@ UK false + false bdixp @@ -8215,6 +8660,7 @@ SI false + false bed @@ -8226,6 +8672,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false bed00 @@ -8237,6 +8684,7 @@ FI false + false bedes @@ -8248,6 +8696,7 @@ UK false + false bedet @@ -8259,6 +8708,7 @@ CY false + false bedot @@ -8270,6 +8720,7 @@ FI false + false bedsl @@ -8281,6 +8732,7 @@ CY, UK false + false bfa @@ -8292,6 +8744,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, HU, HR, IT, LT, LV, MT, NL, PL, PT, RO, SI, SK false + false bfaam @@ -8303,6 +8756,7 @@ AT, PL false + false bfaba @@ -8314,6 +8768,7 @@ LV false + false bfacc @@ -8325,6 +8780,7 @@ LV false + false bfach00 @@ -8336,6 +8792,7 @@ DK false + false bfached @@ -8347,6 +8804,7 @@ DK false + false bfachnm @@ -8358,6 +8816,7 @@ DK false + false bfachot @@ -8369,6 +8828,7 @@ DK false + false bfacp @@ -8380,6 +8840,7 @@ RO false + false bfacs @@ -8391,6 +8852,7 @@ EL false + false bfafp @@ -8402,6 +8864,7 @@ CZ, EE false + false bfalg @@ -8413,6 +8876,7 @@ EL false + false bfalp @@ -8424,6 +8888,7 @@ IE false + false bfama @@ -8435,6 +8900,7 @@ LV false + false bfamh @@ -8446,6 +8912,7 @@ CY false + false bfamt @@ -8457,6 +8924,7 @@ AT, UK false + false bfana @@ -8468,6 +8936,7 @@ LV false + false bfaot @@ -8479,6 +8948,7 @@ BG, CZ, EL, FI, IE, LV, PL, SI, SK false + false bfapl @@ -8490,6 +8960,7 @@ BE, CZ, LU, LV false + false bfapt @@ -8501,6 +8972,7 @@ SI false + false bfauc @@ -8512,6 +8984,7 @@ LU false + false bfawk @@ -8523,6 +8996,7 @@ LV false + false bhl @@ -8534,6 +9008,7 @@ AT, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false bhl00 @@ -8545,6 +9020,7 @@ AT, FI, MT false + false bhl01 @@ -8556,6 +9032,7 @@ DE false + false bhlac @@ -8567,6 +9044,7 @@ DE false + false bhlmt @@ -8578,6 +9056,7 @@ MT false + false bhlmy @@ -8589,6 +9068,7 @@ RO false + false bhlot @@ -8600,6 +9080,7 @@ AT, FI false + false bhlps @@ -8611,6 +9092,7 @@ DE false + false bhlwk @@ -8622,6 +9104,7 @@ UK false + false bhlxp @@ -8633,6 +9116,7 @@ AT false + false bho @@ -8644,6 +9128,7 @@ AT, BE, BG, CY, CZ, DE, DK, EL, ES, FI, FR, HU, HR, IT, LT, LU, LV, MT, NL, PL, PT, RO, SI, SK, UK false + false bho00 @@ -8655,6 +9140,7 @@ FI, IE false + false bho01 @@ -8666,6 +9152,7 @@ DK false + false bho02 @@ -8677,6 +9164,7 @@ DK false + false bhoht @@ -8688,6 +9176,7 @@ IE false + false bhomy @@ -8699,6 +9188,7 @@ UK false + false bhoot @@ -8710,6 +9200,7 @@ FI, FR false + false bhope @@ -8721,6 +9212,7 @@ FI false + false bhoro @@ -8732,6 +9224,7 @@ UK false + false bhosd @@ -8743,6 +9236,7 @@ FI false + false bhotn @@ -8754,6 +9248,7 @@ FR false + false bhout @@ -8765,6 +9260,7 @@ IE false + false bma @@ -8776,6 +9272,7 @@ AT, BE, ES, FI, FR, IE, LT, MT, PL, RO, SK false + false bmaab @@ -8787,6 +9284,7 @@ EE false + false bmaba @@ -8798,6 +9296,7 @@ LU false + false bmact @@ -8809,6 +9308,7 @@ BG, DE, EE, EL, SI false + false bmaer @@ -8820,6 +9320,7 @@ UK false + false bmals @@ -8831,6 +9332,7 @@ IT, LU false + false bmamy @@ -8842,6 +9344,7 @@ RO, SK false + false bmana @@ -8853,6 +9356,7 @@ UK false + false bmanc @@ -8864,6 +9368,7 @@ BG, SI false + false bmapr @@ -8875,6 +9380,7 @@ EE false + false bmase @@ -8886,6 +9392,7 @@ IT false + false bmawk @@ -8897,6 +9404,7 @@ LU false + false bml @@ -8908,6 +9416,7 @@ CY false + false bmu @@ -8919,6 +9428,7 @@ UK false + false boact @@ -8930,6 +9440,7 @@ EL false + false boactcm @@ -8941,6 +9452,7 @@ UK false + false boaht @@ -8952,6 +9464,7 @@ UK false + false boamt @@ -8963,6 +9476,7 @@ MT, UK false + false boanc @@ -8974,6 +9488,7 @@ EL false + false boawr @@ -8985,6 +9500,7 @@ DE, UK false + false bot @@ -8996,6 +9512,7 @@ PL, UK false + false botre @@ -9007,6 +9524,7 @@ HU false + false bpl @@ -9018,6 +9536,7 @@ SE false + false bplct @@ -9029,6 +9548,7 @@ DE, LT false + false bsa @@ -9040,6 +9560,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, HU, HR, IT, LT, LV, MT, NL, PL, PT, RO, SI, SK, UK false + false bsa00 @@ -9051,6 +9572,7 @@ BG, DE, EE, FI, FR, HR, IE, LT, NL, PT, SI, SK false + false bsaab @@ -9062,6 +9584,7 @@ IE false + false bsaam @@ -9073,6 +9596,7 @@ DE false + false bsacm @@ -9084,6 +9608,7 @@ LU, SI false + false bsafu @@ -9095,6 +9620,7 @@ LV false + false bsaht @@ -9106,6 +9632,7 @@ BG, LU false + false bsals @@ -9117,6 +9644,7 @@ EE, LT false + false bsamm @@ -9128,6 +9656,7 @@ LV false + false bsaoa @@ -9139,6 +9668,7 @@ DE, FR, PT false + false bsaot @@ -9150,6 +9680,7 @@ BG, DE, EL, FI, FR, HR, IE, LU, LV, NL, PL, PT, SK false + false bsapm @@ -9161,6 +9692,7 @@ PL, SI false + false bsapmot @@ -9172,6 +9704,7 @@ PL false + false bsapu @@ -9183,6 +9716,7 @@ DE false + false bsatm @@ -9194,6 +9728,7 @@ PL false + false bsatmpb @@ -9205,6 +9740,7 @@ PL false + false bsu @@ -9216,6 +9752,7 @@ LT, SK false + false bsuwd @@ -9227,6 +9764,7 @@ FR, UK false + false buncm @@ -9238,6 +9776,7 @@ AT false + false bunct01 @@ -9249,6 +9788,7 @@ IT false + false bunctmt @@ -9260,6 +9800,7 @@ MT false + false bunctmy01 @@ -9271,6 +9812,7 @@ IT false + false bunls @@ -9282,6 +9824,7 @@ MT false + false bunmt @@ -9293,6 +9836,7 @@ FI, FR, SI false + false bunmtmy @@ -9304,6 +9848,7 @@ FI false + false bunnc @@ -9315,6 +9860,7 @@ AT, DE, EE, EL, ES, FI, IE, PT false + false bunncmt @@ -9326,6 +9872,7 @@ MT false + false bunncmy @@ -9337,6 +9884,7 @@ AT, EE, ES, FI false + false bunot @@ -9348,6 +9896,7 @@ AT, BG, CY, DE, DK, EE, EL, ES, FI, HR, LV, SK false + false bunpe01 @@ -9359,6 +9908,7 @@ BE false + false bunpe02 @@ -9370,6 +9920,7 @@ BE false + false bunst @@ -9381,6 +9932,7 @@ IT, NL false + false buntr @@ -9392,6 +9944,7 @@ AT, DE, EE, IE, UK false + false bwkmt @@ -9403,6 +9956,7 @@ IE, UK false + false byr @@ -9414,6 +9968,7 @@ BE, DE, LT, LU, PL false + false dcz @@ -9425,6 +9980,7 @@ Same country as country of residence#Any European country except country of residence#Any other country AT, CY, FI, LU false + false ddi @@ -9436,6 +9992,7 @@ Yes#No AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false ddi01 @@ -9447,6 +10004,7 @@ UK false + false ddi02 @@ -9458,6 +10016,7 @@ 2009#2010#2011#2012#2013#2014#n/a UK false + false ddilv @@ -9469,6 +10028,7 @@ AT, BG, DE, PL false + false ddipd @@ -9480,6 +10040,7 @@ n/a#never#28 weeks or less#More than 28 weeks, up to one year#More than 1 year UK false + false ddipd00 @@ -9491,6 +10052,7 @@ n/a#never#28 weeks or less#More than 28 weeks, up to one year#More than 1 year UK false + false ddita @@ -9502,6 +10064,7 @@ Yes#No EL false + false dmp @@ -9513,6 +10076,7 @@ 1-199#200-499#500-999#1000-1999#2000-4999#5000-9999#10000-49999#50000-99999#>=100000 CZ true + false dmsyy03 @@ -9524,6 +10088,7 @@ Not concerned/divorced for more than 3 years#divorced for less than 3 years LU false + false dqb @@ -9535,6 +10100,7 @@ First#Second#Third#Fourth LT, RO false + false drgur @@ -9546,6 +10112,7 @@ densely populated area#intermediate area#thinly populated area EL, ES, HR, LT, LV, RO true + false drgur00 @@ -9557,6 +10124,7 @@ Riga#Other cities#Thinly populated area LV true + false ked @@ -9568,6 +10136,7 @@ UK false + false kfb @@ -9579,6 +10148,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false kfbcc @@ -9590,6 +10160,7 @@ BE, BG, CY, CZ, DE, EE, EL, ES, FI, FR, HR, IE, LT, LU, LV, MT, PT, RO, SK false + false khl @@ -9601,6 +10172,7 @@ UK false + false khooo @@ -9612,6 +10184,7 @@ BE false + false kivho @@ -9623,6 +10196,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SI, SK, UK false + false l01 @@ -9634,6 +10208,7 @@ No#Yes CY false + false l02 @@ -9645,6 +10220,7 @@ No#Yes CY false + false lap @@ -9656,6 +10232,7 @@ n/a#apprentice IT false + false lap00 @@ -9667,6 +10244,7 @@ n/a#temporaryworker IT false + false lbl @@ -9678,6 +10256,7 @@ No#Yes LT false + false lcd01 @@ -9689,6 +10268,7 @@ EL false + false lcd02 @@ -9700,6 +10280,7 @@ EL false + false lcd03 @@ -9711,6 +10292,7 @@ EL false + false lcd04 @@ -9722,6 +10304,7 @@ EL false + false lcd05 @@ -9733,6 +10316,7 @@ EL false + false lcr @@ -9744,6 +10328,7 @@ No#Yes UK false + false lcr01 @@ -9755,6 +10340,7 @@ No#Yes UK false + false lcs @@ -9766,6 +10352,7 @@ Yes#No AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, SL, UK false + false lcs10 @@ -9777,6 +10364,7 @@ No#Yes CY false + false lct @@ -9788,6 +10376,7 @@ Employee for whom the employer does not pay contribution to Annual Holidays fund#Employee for whom the employer pays contribution to Annual Holidays fund CY false + false lemiw @@ -9799,6 +10388,7 @@ 2012#2014#n/a UK false + false lfs @@ -9810,6 +10400,7 @@ BE, IT false + false lhw00 @@ -9821,6 +10412,7 @@ UK false + false lhw01 @@ -9832,6 +10424,7 @@ UK false + false lhwiv00 @@ -9843,6 +10436,7 @@ UK false + false lhwiv01 @@ -9854,6 +10448,7 @@ UK false + false lim @@ -9865,6 +10460,7 @@ contracted in#contracted out UK false + false limiv @@ -9876,6 +10472,7 @@ n/a#contracted in#contracted out UK false + false lindi @@ -9887,6 +10484,7 @@ Agriculture and Fishing#Mining, Manufacturing and Utilities#Construction#Wholesale and retail trade#Hotels and restaurants#Transport and communication#Financial intermediation#Real estate and business activities#Public administration and defence#Education#Health and social work#Other#Not applicable DE, ES, FI, FR, HR, IT, LT, PT false + false liwivwh @@ -9898,6 +10496,7 @@ UK false + false lle @@ -9909,6 +10508,7 @@ No#Yes UK false + false loc @@ -9920,6 +10520,7 @@ armed forces#senior officials and managers#professionals#technicians and associate professionals#clerks#service and sales workers#skilled agricultural#craft and trades workers#plant and machine operators#elementary occupations#not applicable AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false lochz @@ -9931,6 +10532,7 @@ non hazardous#hazardous EL false + false lpf @@ -9942,6 +10544,7 @@ no#yes AT, IT false + false lpm01 @@ -9953,6 +10556,7 @@ No#Yes EE false + false lptmy @@ -9964,6 +10568,7 @@ AT false + false lrg @@ -9975,6 +10580,7 @@ no#yes DK false + false lsdmy @@ -9986,6 +10592,7 @@ EE false + false lseor @@ -9997,6 +10604,7 @@ No#Yes LT false + false lsepf @@ -10008,6 +10616,7 @@ No#Yes AT, LT, SI false + false pdi @@ -10019,6 +10628,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false pdi00 @@ -10030,6 +10640,7 @@ BG, DE, FI, FR, LU, PL, RO, SI, SK false + false pdica @@ -10041,6 +10652,7 @@ FI false + false pdida @@ -10052,6 +10664,7 @@ FI false + false pdimy @@ -10063,6 +10676,7 @@ BE, FI, LU, RO, SK false + false pdinc @@ -10074,6 +10688,7 @@ BG false + false pdint @@ -10085,6 +10700,7 @@ LV false + false pdinw @@ -10096,6 +10712,7 @@ PL false + false pdiot @@ -10107,6 +10724,7 @@ DE false + false pdiss @@ -10118,6 +10736,7 @@ DE, LV false + false pdiss01 @@ -10129,6 +10748,7 @@ LV false + false pdiss02 @@ -10140,6 +10760,7 @@ LV false + false pditx @@ -10151,6 +10772,7 @@ LV false + false pdiuc @@ -10162,6 +10784,7 @@ PL false + false pfa @@ -10173,6 +10796,7 @@ EL false + false phl @@ -10184,6 +10808,7 @@ BE, HU, IT false + false phlmy @@ -10195,6 +10820,7 @@ IT false + false pls @@ -10206,6 +10832,7 @@ SI false + false poa01 @@ -10217,6 +10844,7 @@ DK false + false poa02 @@ -10228,6 +10856,7 @@ DK false + false poa03 @@ -10239,6 +10868,7 @@ DK false + false poaab @@ -10250,6 +10880,7 @@ DE, EE, PL false + false poaca @@ -10261,6 +10892,7 @@ FI false + false poacc @@ -10272,6 +10904,7 @@ LU false + false poacm @@ -10283,6 +10916,7 @@ EL, ES, LU, NL, PL, SI false + false poacmdi @@ -10294,6 +10928,7 @@ PL false + false poacmoa @@ -10305,6 +10940,7 @@ PL false + false poacmsu @@ -10316,6 +10952,7 @@ PL false + false poacs @@ -10327,6 +10964,7 @@ AT, DE false + false poafr @@ -10338,6 +10976,7 @@ PL false + false poals @@ -10349,6 +10988,7 @@ IE false + false poaml @@ -10360,6 +11000,7 @@ SK false + false poamr @@ -10371,6 +11012,7 @@ LU false + false poamt @@ -10382,6 +11024,7 @@ BG, IT false + false poanc @@ -10393,6 +11036,7 @@ ES, IE, PT, SI false + false poant @@ -10404,6 +11048,7 @@ CY false + false poaot @@ -10415,6 +11060,7 @@ AT, EL, ES, PL, SK false + false poaps01 @@ -10426,6 +11072,7 @@ DE false + false poaps02 @@ -10437,6 +11084,7 @@ DE false + false poapu @@ -10448,6 +11096,7 @@ DE, IE, LU false + false poasp @@ -10459,6 +11108,7 @@ CY false + false poass @@ -10470,6 +11120,7 @@ DE, LV false + false poawr @@ -10481,6 +11132,7 @@ LU false + false poaxp @@ -10492,6 +11144,7 @@ LU false + false powpt @@ -10503,6 +11156,7 @@ AT false + false psact @@ -10514,6 +11168,7 @@ SI false + false psu @@ -10525,6 +11180,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, HU, HR, IT, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false psu00 @@ -10536,6 +11192,7 @@ PL, SI, SK false + false psumy @@ -10547,6 +11204,7 @@ AT, FI, IT, LU, RO false + false psuor @@ -10558,6 +11216,7 @@ BG, CY, DE, EL, PL, SK false + false psuot @@ -10569,6 +11228,7 @@ CY, ES, PL false + false psups @@ -10580,6 +11240,7 @@ LU false + false psupu @@ -10591,6 +11252,7 @@ LU false + false psuss @@ -10602,6 +11264,7 @@ LV false + false psutx @@ -10613,6 +11276,7 @@ LV false + false psuwd @@ -10624,6 +11288,7 @@ CY, DE, EL, PL, SK false + false psuwd00 @@ -10635,6 +11300,7 @@ ES false + false psuwdcm @@ -10646,6 +11312,7 @@ ES false + false psuwdct @@ -10657,6 +11324,7 @@ IE false + false psuwdnc @@ -10668,6 +11336,7 @@ IE false + false pxp @@ -10679,6 +11348,7 @@ AT false + false pxp00 @@ -10690,6 +11360,7 @@ AT false + false pxpot @@ -10701,6 +11372,7 @@ AT false + false tintcho @@ -10712,6 +11384,7 @@ IT false + false tpr @@ -10723,6 +11396,7 @@ BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false xcc @@ -10734,6 +11408,7 @@ BE, ES, MT, PL, UK false + false xcd @@ -10745,6 +11420,7 @@ CZ, EL, PL false + false xched @@ -10756,6 +11432,7 @@ MT false + false xcmie @@ -10767,6 +11444,7 @@ PL false + false xed @@ -10778,6 +11456,7 @@ EE, EL, PT false + false xhc00 @@ -10789,6 +11468,7 @@ PL false + false xhchm @@ -10800,6 +11480,7 @@ IT, PL false + false xhcmo @@ -10811,6 +11492,7 @@ ES, PL false + false xhcmomc @@ -10822,6 +11504,7 @@ BE, ES, PL, PT, UK false + false xhcmomi @@ -10833,6 +11516,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false xhcnhrt @@ -10844,6 +11528,7 @@ EL false + false xhcrh @@ -10855,6 +11540,7 @@ PT false + false xhcsc @@ -10866,6 +11552,7 @@ PL, UK false + false xhcscel @@ -10877,6 +11564,7 @@ PL false + false xhcscht @@ -10888,6 +11576,7 @@ PL false + false xhcscrf @@ -10899,6 +11588,7 @@ PL false + false xhcscwt @@ -10910,6 +11600,7 @@ PL false + false xhl @@ -10921,6 +11612,7 @@ EL, PT false + false xhl01 @@ -10932,6 +11624,7 @@ EL false + false xht @@ -10943,6 +11636,7 @@ EL false + false xishl @@ -10954,6 +11648,7 @@ PL, PT false + false xislf @@ -10965,6 +11660,7 @@ CZ, PT false + false xivhcrt @@ -10976,6 +11672,7 @@ PL false + false xmp @@ -10987,6 +11684,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false xmp00 @@ -10998,6 +11696,7 @@ NL false + false xmpam @@ -11009,6 +11708,7 @@ AT, EL false + false xmpot @@ -11020,6 +11720,7 @@ EL false + false xog @@ -11031,6 +11732,7 @@ EL false + false xpp @@ -11042,6 +11744,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false xuf @@ -11053,6 +11756,7 @@ CZ false + false yag @@ -11064,6 +11768,7 @@ BG false + false yag01 @@ -11075,6 +11780,7 @@ BG false + false yag02 @@ -11086,6 +11792,7 @@ BG false + false yaj @@ -11097,6 +11804,7 @@ SI false + false yem01 @@ -11108,6 +11816,7 @@ FR false + false yem02 @@ -11119,6 +11828,7 @@ BG false + false yemab @@ -11130,6 +11840,7 @@ SI, SK false + false yemaj @@ -11141,6 +11852,7 @@ SK false + false yemcs @@ -11152,6 +11864,7 @@ RO, SK false + false yemhl @@ -11163,6 +11876,7 @@ SI false + false yemiv @@ -11174,6 +11888,7 @@ UK false + false yemnr @@ -11185,6 +11900,7 @@ BG, EL false + false yemnt @@ -11196,6 +11912,7 @@ IT, SI false + false yemot @@ -11207,6 +11924,7 @@ SI, SK false + false yempv01 @@ -11218,6 +11936,7 @@ LV false + false yemtj @@ -11229,6 +11948,7 @@ IT, PL, SK false + false yemxp @@ -11240,6 +11960,7 @@ FR, IT false + false yfb00 @@ -11251,6 +11972,7 @@ SK false + false yivwg01 @@ -11262,6 +11984,7 @@ LV, SI false + false yivwg02 @@ -11273,6 +11996,7 @@ LV false + false yiy @@ -11284,6 +12008,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false yiy00 @@ -11295,6 +12020,7 @@ SK false + false yiydv @@ -11306,6 +12032,7 @@ EE, HU, IT, SI, SK false + false yiyit @@ -11317,6 +12044,7 @@ EE, SI false + false yiyitdp @@ -11328,6 +12056,7 @@ BE, IT false + false yiyitob @@ -11339,6 +12068,7 @@ IT false + false yiyitsb @@ -11350,6 +12080,7 @@ IT false + false yiynt @@ -11361,6 +12092,7 @@ FI, LV, UK false + false yiyot @@ -11372,6 +12104,7 @@ DE, EE false + false yiytx @@ -11383,6 +12116,7 @@ LV, UK false + false yiytx00 @@ -11394,6 +12128,7 @@ FI false + false yiytx01 @@ -11405,6 +12140,7 @@ FI false + false yls @@ -11416,6 +12152,7 @@ MT, SK, UK false + false ymp @@ -11427,6 +12164,7 @@ MT false + false yot @@ -11438,6 +12176,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false yot01 @@ -11449,6 +12188,7 @@ UK false + false yot02 @@ -11460,6 +12200,7 @@ UK false + false ypp @@ -11471,6 +12212,7 @@ BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false ypp01 @@ -11482,6 +12224,7 @@ AT, IT false + false ypp02 @@ -11493,6 +12236,7 @@ AT, IT false + false ypr @@ -11504,6 +12248,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, UK false + false yprld @@ -11515,6 +12260,7 @@ BG, SI false + false yprmr @@ -11526,6 +12272,7 @@ IT false + false yprnt @@ -11537,6 +12284,7 @@ UK false + false yprro @@ -11548,6 +12296,7 @@ EE, SI false + false yprrt @@ -11559,6 +12308,7 @@ BE, BG, EE, ES, FR, HU, IT, LT, LV, NL, PL, RO, SI false + false yprtx @@ -11570,6 +12320,7 @@ UK false + false ypt @@ -11581,6 +12332,7 @@ AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK false + false ypt00 @@ -11592,6 +12344,7 @@ PL false + false yptmp @@ -11603,6 +12356,7 @@ PL, RO, UK false + false yptmpnt @@ -11614,6 +12368,7 @@ EE, NL false + false yptmptx @@ -11625,6 +12380,7 @@ EE, NL false + false yptot @@ -11636,6 +12392,7 @@ UK false + false yse01 @@ -11647,6 +12404,7 @@ FI, SK false + false yseag @@ -11658,6 +12416,7 @@ EE, PL false + false ysebs @@ -11669,6 +12428,7 @@ BG, EE false + false yseev @@ -11680,6 +12440,7 @@ DE, IT false + false yseil @@ -11691,6 +12452,7 @@ RO false + false yseiv @@ -11702,6 +12464,7 @@ UK false + false ysena @@ -11713,6 +12476,7 @@ EE, SE false + false ysenr @@ -11724,6 +12488,7 @@ BG, EL, IT false + false ysetx @@ -11735,6 +12500,7 @@ BG false + false yst @@ -11746,6 +12512,7 @@ SI false + false ysv @@ -11757,6 +12524,7 @@ DE, ES, HR, LU, PL, SK false + false yunsv @@ -11768,6 +12536,7 @@ EE, IE, IT, LT, RO false + false dmsyy04 @@ -11779,6 +12548,7 @@ not concerned or widowhood > 3 years#divorced or widowhood <= 3 years LU false + false dmb @@ -11788,6 +12558,7 @@ Value|RefTable_1927503380|5|False|0|0 HR false + false ysenr00 @@ -11797,6 +12568,7 @@ Value|RefTable_1927503380|0|False|0|0 HR false + false ysenr01 @@ -11806,6 +12578,7 @@ Value|RefTable_1927503380|0|False|0|0 HR false + false ysere01 @@ -11815,6 +12588,7 @@ Value|RefTable_1927503380|0|False|0|0 HR false + false pdiac @@ -11824,6 +12598,7 @@ Value|RefTable_1927503380|0|False|0|0 DE false + false pdiwr @@ -11833,6 +12608,7 @@ Value|RefTable_1927503380|0|False|0|0 DE false + false drg01 @@ -11840,6 +12616,7 @@ region : 01 Categorical true + false drgn1 @@ -11847,6 +12624,7 @@ region : nuts level 1 Categorical true + false drgn2 @@ -11854,6 +12632,7 @@ region : nuts level 2 Categorical true + false lpm @@ -11861,6 +12640,7 @@ pension membership Categorical false + false lcl @@ -11868,6 +12648,7 @@ collar Categorical false + false lse00 @@ -11875,6 +12656,7 @@ self employed : main/basic Categorical false + false amrar @@ -11882,6 +12664,7 @@ main residence : area in m2 Numeric true + false tpceepx @@ -11889,6 +12672,7 @@ comp prvt ctrb : employee : proportional amount Numeric false + false dgn @@ -11898,6 +12682,7 @@ 1#0 Male#Female false + false dag @@ -11907,6 +12692,7 @@ false + false yem @@ -11914,6 +12700,7 @@ Main employment income Numeric false + false yse @@ -11921,6 +12708,7 @@ Main self-employment income Numeric false + false poa @@ -11928,6 +12716,7 @@ Main contributory old-age pension Numeric false + false idfather @@ -11937,6 +12726,7 @@ false + false idmother @@ -11946,6 +12736,7 @@ false + false idpartner @@ -11955,6 +12746,7 @@ false + false amrtn @@ -11964,6 +12756,7 @@ 2#3 Owned outright#Rented true + false dec @@ -11973,6 +12766,7 @@ 0#1#2#3#4#5#6 Not in education#Pre-school#Primary#Lower Secondary#Upper Secondary#Post Secondary#Tertiary false + false deh @@ -11982,6 +12776,7 @@ 0#1#2#3#4#5 Not completed primary education#Primary#Lower Secondary#Upper Secondary#Post Secondary#Tertiary false + false dms @@ -11991,6 +12786,7 @@ 1#2#3#4#5 Single#Married#Separated#Divorced#Widowed false + false les @@ -12000,6 +12796,7 @@ 0#2#3#4#5#6#7 Pre-school#Employer or self-employed#Employee#Pensioner#Unemployed#Pupil/Student#Inactive false + false lhw @@ -12009,6 +12806,7 @@ false + false liwwh @@ -12018,6 +12816,7 @@ false + false xhcrt @@ -12027,6 +12826,7 @@ false + false xhcot @@ -12036,6 +12836,7 @@ false + false yempv @@ -12045,6 +12846,7 @@ false + false drg01 @@ -12216,6 +13018,7 @@ unemployment BE, CY, CZ, DE, DK, EE, ES, FI, FR, HU, IT, LT, LV, MT, NL, PL, PT, RO, SE, SI, SK 0 + false bun00 @@ -12223,6 +13026,7 @@ unemployment : main/basic LV 0 + false bunct @@ -12230,6 +13034,7 @@ unemployment : contributory AT, BG, CY, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, NL, PT, SE, SI, SK, UK 0 + false bunct02 @@ -12237,6 +13042,7 @@ unemployment : contributory : 02 IT 0 + false bunctmy @@ -12244,6 +13050,7 @@ unemployment : contributory : months per year AT, EE, EL, ES, FI, HR 0 + false bunctmy02 @@ -12251,6 +13058,7 @@ unemployment : contributory : months per year : 02 IT 0 + false bunctnm @@ -12258,6 +13066,7 @@ unemployment : contributory : not means-tested MT 0 + false bunmy @@ -12265,6 +13074,7 @@ unemployment : months per year BE, BG, CY, CZ, DE, DK, FI, FR, HU, IE, LT, LU, LV, MT, NL, PL, RO, SE, SI, SK 0 + false bunss @@ -12272,6 +13082,7 @@ unemployment : social security LU 0 + false bunssmy @@ -12279,6 +13090,7 @@ unemployment : social security : months per year LU 0 + false dag00 @@ -12286,6 +13098,7 @@ age : main/basic LU, LV dag + false dcu @@ -12293,6 +13106,7 @@ consensual union BE 0 + false dhr01 @@ -12300,6 +13114,7 @@ nr of people responsible for home EL 1 + false drsyy @@ -12307,6 +13122,7 @@ resident : number of years LU dag + false lftmy @@ -12314,6 +13130,7 @@ full time worker : months per year AT 0 + false liamy @@ -12321,6 +13138,7 @@ inactive : months per year IE 0 + false liwftmy @@ -12328,6 +13146,7 @@ in work : full time worker : months per year LV 0 + false liwmy @@ -12335,6 +13154,7 @@ in work : months per year AT, BE, BG, CZ, DE, EE, EL, ES, FI, FR, HU, IE, LT, LU, LV, NL, PL, PT, RO, SI, SK 0 + false lowas @@ -12342,6 +13162,7 @@ out of work : actively seeking CZ, DE, LT, PL, PT 0 + false lpemy @@ -12349,6 +13170,7 @@ pensioner : months per year FI 0 + false lpmfc @@ -12356,6 +13178,7 @@ pension membership : social insurance fund (contributing to) EL -1 + false lpmfr @@ -12363,6 +13186,7 @@ pension membership : social insurance fund (receiving from) EL 0 + false lse @@ -12370,6 +13194,7 @@ self employed AT, BG, DE, EE, HR, SE 0 + false lserg @@ -12377,6 +13202,7 @@ self employed : registered EE 0 + false lunmy @@ -12384,6 +13210,7 @@ unemployed : months per year AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SI, SK 0 + false poa @@ -12391,6 +13218,7 @@ old age AT, CY, DE, DK, ES, FI, LV, MT, NL, PL, PT, SI, SK, SL, UK poa* - poa*my + false poa00 @@ -12398,6 +13226,7 @@ old age : main/basic BG, DK, PT 0 + false poact @@ -12405,6 +13234,7 @@ old age : contributory SI 0 + false poamy @@ -12412,6 +13242,7 @@ old age : months per year AT, DE, FI, FR, IT, LU, PT, RO, SK 0 + false poaps @@ -12419,6 +13250,7 @@ old age : private sector DE, IE 0 + false tintaoxyn @@ -12426,6 +13258,7 @@ income tax : tax allowance : other expenses : is? yes/no IT 0 + false tintccdyn @@ -12433,6 +13266,7 @@ income tax : tax credit : charitable donations : is? yes/no IT 0 + false tintcfuyn @@ -12440,6 +13274,7 @@ income tax : tax credit : funeral : is? yes/no IT 0 + false tintchlyn @@ -12447,6 +13282,7 @@ income tax : tax credit : health : is? yes/no IT 0 + false tintclfyn @@ -12454,6 +13290,7 @@ income tax : tax credit : life insurance : is? yes/no IT 0 + false tintcoxyn @@ -12461,6 +13298,7 @@ income tax : tax credit : other expenses : is? yes/no IT 0 + false tintcstyn @@ -12468,6 +13306,7 @@ income tax : tax credit : student : is? yes/no IT 0 + false xhc @@ -12475,6 +13314,7 @@ housing cost AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK xhcot + xhcrt* + xhcmo* + false xivhc @@ -12482,6 +13322,7 @@ imputed value : housing cost DK xhcot + xhcrt* + xhcmo* + false yem @@ -12489,6 +13330,7 @@ employment EL, FR, PL, SI, SK 0 + false yem00 @@ -12496,6 +13338,7 @@ employment : main/basic DE, EL, FI, IT, LT, PL, RO, SI 0 + false yem01 @@ -12503,6 +13346,7 @@ employment : 01 BG yem + false yemmy @@ -12510,6 +13354,7 @@ employment : months per year AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK 0 + false yemtx @@ -12517,6 +13362,7 @@ employment : taxable BG yem + false yemwg @@ -12524,6 +13370,7 @@ employment : wage/salary SI 0 + false yemxp @@ -12531,6 +13378,7 @@ employment : extra pay AT yem * 2 / 14 + false yivwg @@ -12538,6 +13386,7 @@ imputed value : wage/salary AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HU, HR, IE, LT, LU, LV, MT, NL, PL, PT, RO, SI, SK, UK 0 + false yse @@ -12545,6 +13394,7 @@ self employment EE, EL, FI, HR, PL, SI 0 + false yse00 @@ -12552,6 +13402,7 @@ self employment : main/basic SK 0 + false ysemy @@ -12559,6 +13410,7 @@ self employment : months per year AT, BG, CY, CZ, DE, DK, ES, FR, LT, LU, LV, PT, RO, SK 0 + false ysepv @@ -12566,6 +13418,7 @@ self employment : previous CZ yse + false yxy01 @@ -12573,6 +13426,7 @@ annually : 01 DE yxy + false yxy02 @@ -12580,6 +13434,7 @@ annually : 02 DE yxy + false yxy03 @@ -12587,6 +13442,7 @@ annually : 03 DE yxy + false yxy04 @@ -12594,6 +13450,7 @@ annually : 04 DE yxy + false yxy05 @@ -12601,6 +13458,7 @@ annually : 05 DE yxy + false yxy06 @@ -12608,6 +13466,7 @@ annually : 06 DE yxy + false pyr @@ -12615,6 +13474,7 @@ benefit/pension: early retirement AT, DK, IE, PL, SK 0 + false lnu @@ -12622,6 +13482,7 @@ labour market: new unemployed AT, BG, DE, DK, FI, FR, HU, HR, IE, IT, LV, MT, NL, PL, RO, SK, UK 0 + false tis @@ -12629,6 +13490,7 @@ income tax and SICS BG, DE, EL, HR, PT 0 + false tad @@ -12636,6 +13498,7 @@ tax: repayments receipts AT, DE, EL, FR, HR, PT 0 + false yds @@ -12643,6 +13506,7 @@ income: dispossable DE, EL, HR, PT 0 + false tpceepi @@ -12650,6 +13514,7 @@ n/a IE 0 + false tpcee @@ -12657,6 +13522,7 @@ n/a IT 0 + false tpcpe @@ -12664,6 +13530,7 @@ n/a NL 0 + false tmu @@ -12671,6 +13538,7 @@ municipal government tax HR, UK 0 + false yempv_a @@ -12678,6 +13546,7 @@ employment : previous : add onn UK 0 + false kcc @@ -12685,6 +13554,7 @@ company car EL kfbcc + false tintace @@ -12692,6 +13562,7 @@ n/a DE 0 + false tintadp @@ -12699,6 +13570,7 @@ n/a DE 0 + false tintadt @@ -12706,6 +13578,7 @@ n/a DE 0 + false tintaee @@ -12713,6 +13586,7 @@ n/a DE 0 + false tintals @@ -12720,6 +13594,7 @@ n/a DE 0 + false tintaox @@ -12727,6 +13602,7 @@ n/a DE 0 + false tintape @@ -12734,6 +13610,7 @@ n/a DE 0 + false tintasp @@ -12741,6 +13618,7 @@ n/a DE 0 + false ydses_o @@ -12748,6 +13626,7 @@ n/a DE, HR 0 + false yemse @@ -12755,6 +13634,7 @@ n/a DE yem + yse + false lemmy @@ -12762,6 +13642,7 @@ employed: months per year HR 0 + false lsemy @@ -12769,6 +13650,7 @@ self employed : months per year HR 0 + false tin @@ -12776,6 +13658,7 @@ income tax HR 0 + false tscee @@ -12783,6 +13666,7 @@ sic : employee HR 0 + false tscer @@ -12790,6 +13674,7 @@ sic : employer HR 0 + false tscse @@ -12797,6 +13682,7 @@ sic : self-employed HR 0 + false bun diff --git a/EM_Plugins/InDepthAnalysis/Help.chm b/EM_Plugins/InDepthAnalysis/Help.chm deleted file mode 100644 index f23864551766c7dcb5c8a3874c0aabdd35b21e70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44589 zcmeFZRdgJ|vMtzRwis$E@`} z9KEtKBVuP}cP7|o}0aZ{_P!y5^_$lY2e`ty_vSI=X zKq0U40eBy(lDy;x9w;<`A_Vl0s>m-16zXg5&jv$FBrIm^XeOm+W(^dyZsYH307XkA z!!Ir-t)K`LG_08T8I_huMTO77!N$N$&(X};NYc#O!r^y>*#D(N*51a}$llTIqq8h1 z;%|tAk(-N+z2U$6Vg4uM|I$Yi6pB{V$kLX^)YJe7Py&oYt6=2lXl8BVpu?}{U}R}# zZR8+tWNc$^y}h*=xiIq6xNIl9T(IR9S5pBd^va)goo1NED#e>h5j`)HtP9UR>(jc5!U z9DssK1hS!EXchJJEsg#e+!9-j57s{|I{!sz{!eB(lGy(>K!<_;AJYV+Gbf_`w-|;$ zm>P*_xc?Tz_y^Oi8m;i(VwnD5rYYl?{#y+5AI!E+6vKauVfll(K#Wwz`R~@n%Jv8J zYLe!J^e@o=vRnK^S^eQr|L+bR`af*=hYJ_L{U_fa7W}Ie(kTCv@6YP}N4!%w{*&*| zs{OawQ|bP_qW}6^5SXG_jf(fLnEn$+hw)E%fx~v`IR6vuPo#mn@R1<@6YNjWffq;- zT>lg7PyB%|GBNo76YS593yQG)X7fM6{_MM;6rE^8l&@a}^&IsSZ1oI`Xr=Y6K7REM zjsO5B+5c)+aI~@4Gclr-QV_7Qvb8sIa4<5Y6|k{(G_rOCg4^3z{+FEVOTKo*G)O2)wbOP-3LhJ&p0$#LY)((z()&@quSMd9&X!if}6!Jz6MvnhD#sK`l zWj`kTD}NdI%fMd-{xa~Ffxis=W#BIZ|EDtW1j-ER1abz<3S15Z3ls(52G9d=J~9Zf z040DmzyM$aumacu>;XmqhmVgD!0=-sumCB50zlxu^mzbS0m2_X1^^p?9l!*j15kg| zf&j*kaj8EF{YRS)5DD=+M*#qUe-ue|Re|5yzsf%o9skh5KI|V!6ad*r`B$HtZy(BU z@%_j4-y15dKg}odKXu+ePecV0APUMnSzgnfdNc^ zH$E~W|FHbd9efb?k$w3PxQ{fABB6p5blpDQ?-BnQ`M(o3zit0Y#{75n?{WSe&2Qze z{AJ)T1AiI#%fMd-{xa~Ffxis=W#BIZe;N48z+VRbGVp&K1MvUM1t1`R03ZMiOty>w z0KD=m0qLX0Pp!PouL)_u4ZOm5NZ=qqd-r|6?9qTN+Q%g~oX@(=!QZ{i816`K;{o{s z5Jda{SzAD=@nzGvRgz@-Xq@HNKI{Gk?Rv0&T($;&9Zj-JyT)DHC=m2m{xrz>jL5#< zI%n}?39h22jg8LF1rDX~)eP>*{Oiu8*@cyn)riJuTs$fMtcu!FXf4SMMTlO?Ja`BeZa}v;5Y#9LK;Oel z_Z~;=N7H9Vj~t4D9{f-Mf4ZK$nImE{+jX7qd?WOJ{XTlWK9%qF7KF3&K<;!X8`$A| zv zPNFtJ!vPjZ`C)^6B9wVFLXYk>HMqCVX(nmypfzLQi-!xKp{T!Z2hl<|P0T{V%Ycgz z6n$!;KPyj4Q8BaeW<8ztYO|8PHOjeLRk2F;xq%8!DUGrl**m+Y=ftPF1L~*oqLukP zLHZms!U~#=HESH+O&w^pNwa-3(;_hvw_`y%-&WVy8CUS~yUEW*f=Iw;_+f4y{8_fDJq ztM*mg>gfK^#OLtN*jx4+PmO{Mdp>CY0y=J}_XLy};-1cggFf^uWv15xSGs7fVpREI zoBOcOJN#5PmK6)G#pekOY~ao$CM0Gkt{>do*$1JXd`DgaOO|v*qH^dU3`Y9VR~`L? zcyLYJ52^xyR@TSQKZ$NsP(sm%A61F6J%4Zuad==lzGWOmLrP)XI30G=L6sif(BQ4_ z9SDXSTqOtjs6K;-%5Os}ah-#F?v6{*ZMPXV%p$-B9<^m;c2JuZfU(kdwO0(@@3tt; zD7NEE;2`aR`s~ZSz>sTVocLoboVu2^Rk*u?Z26gz#Ln%BK>U+-BN?c4s?9R9Iu4bm z?m6aD(w>sd4}W!9{w#~*DiCtEkSws+05m|$z!7R9QQeps9f{sZStoNPP3j9NZmeM) zu!yGKSgtucZD31d1>dCy^HTzmZ+#%126?n(s?iX1dB25DG|`fVw4zMOh&HG6qiRWy znrXI5JhR@Mj!NJqZ4j?`USuuobYbnV zut~MI$inVlJJ_~E$ z2a8fQ;@)G3kD3e8G)`ZmGDXQo)069#0gqGW1VDA@d#-$9nlwJNyslbmK~5+W06qt| z`#uitnhL4Ei=P6FD^Y`T{tK!@^_Q$Lxah{6c<7uEcnV967 z_X?zg6tX2|%;UF0&;Z{1{Q%#hpgiJuepUDrn`~bBbTW}`^+b>_9jXom3IlVeqwd4A zK`a?guJ{gANM#szx6+hsr9fxdjwzrE)ovrzGl%usCv?uHhsP(`3}NS)zcPxE?eO(c z*%0GR-El@@Vs&Lfi~R?ijEo2y#kUPTBtO5a7`EtV)0hbGsA zAf4LH=d1?!hT^yx`IeMLPT!{Ynb8^_&Vo?aIWTxN=Ue;B6;Sqe_cMHn^NsIE+EM)K zGr5Wo%1kFP;Q2Ez`Z)wq?bE8E<)_eCpw(*r%&AqH!FzEJlrAUJXz!olbeN6SIVbvm zIGM1k?oaZ12X-yI?pG<};UaKIcHtuM%Q4G1QoELlYfsvwXMj=RSbQ3U?8y2dv|=Wx z3Iw##<9&lVd=@Ls!lmeeToum=C>ny|9N*6f}mN+`-`GBNyT)I2&yS!Za&SqWNkaCNmA zK?|Z-{ntI?&QW=&z6}n;WAqnWGWHGbL)cUWVK*H7vO~)fXR=RK3u)OuQ#_{yTx!4z zf*Nq)B^TuzS@1}mmIS6@=kQE6OCXcAyM>O<)u&b0#CaF&c8oKE8|}M4Cs@Zfg{(9+ z_GpC@N+iA6s0I!S;QAP)oK!N+i{LyFd?^F-E6U&)Cb0bqZ8>ihrzB*OS=-cru!R#L zP(%9-CRQc+h?z-rqXz@~_VxgguKocFS$$@eH;2h!77E*?E=H+^c%2BL8m@ZjdN2tk zmhS7JE&EJ;d{A9T{xt>S73sX%Doh{AlO28tFLc0EsZv|`80IhiXQo7D%4WW1oSL?y zYem~%SERl)cGPzKy_x{|4#g@pH=wA(9CdtxZ9J(mPx5iiSzqNimZ?u$+{lNswk(`p zWf&}Z)=pSlP70mW13YM)92Rx}^rZ~RFHt*&Xn1kWW#2K@zp3~Lb!`(n{e=CB_L+#3 zGlwy2FpMsX$`{Ehu6+LTl&U;LRejOn+=eB{2%2bfUoVp*&X3ha}fK?T7?Bgqnd zo`!5tDgXi{6WlR4ATgRFwOV7K;49v~BJRVL8q%T3TSf9YcmU*>+ff0ArlL^i`Ts3mqmn|Bp_N|+g6H6>v8L^YmTGM8DVwzA{&&{N! zu`4$4O_u3l=cSxS_@X1Y1Q0eIcp>f(0+i+wHSpPBKBbnwNnm0r8-2e)DhZ+zYnwL9 z`n5P_e7nq3b=HF73+%g)o|?w|{Aizsx&+!j9!j%J>T?F>~yxK-O8Fi22r{ z)H#DXI^vOTHnPXt=K3aooRs&1MhxSa>Xwx#s0WUFCOrCleZE74$om`+)~1~u29 zFGfY_jT*A9f%A2=A{zp`XPsJ$M{sSo46p{P-P_GZ4tXP+T#?jy#w=IFEBbK(3ux#H zI01!Zg#&{HJ3Vv7g*r$DVQYob1b;Y)dV#B8g~?4HzXtJ{)>@WZBzB&~E@wA?bHBZ? z1{3ylR+$p7t0~Uji?h5G^xjS<>JI&KKOn*fLpUu0%d0xgdZJ2^HbH?Z+PvY1b)~7( zQ>@Hn+Wj@2)7RFJ^)4x4ri}4E<2qVODev0@oL}>haXG(CT4NGb%~3H68-SuWE5$QG zQNz=36=Ha4U1eD>qI%HEMADKsMT_|ihs-My^U2Ej6-QtWdV2h-YYR9PKQZWvUP8ek zSJOMR6_H1pSDNnaI5C=(e_u&`80f&4ah}p%JTA;mfKd%w1TSdrIiW}2)0T@K0<8=x zT--t6{`qrLVb6o(GnXl-l~&ehlPHa*!P3n}@w5Fc+a=Gq99$(XPw!$i?*icu`Cv{o zs-N}SR%yr|(c zu6z-r0UNXhgewC5@d*<~QbM7j(-Kc`#NrAn_|&=<*rs!TX1&3WZ-a=?D5r(U*$CRB zEmLu~3-)60ms=ZXUwWj4Q8Yrhk!k6cK#ZS0#i{CUl@F7uB zFcMH^M@4blsEE?8CJi|yg0h1FyZ{*y4lE~Ql zcKQNw{}`7s4jmiyRxYce4DeS<+V0^-6%Xfj*&Vx6i%f5-Azp{Lby+Lu**A;IN5$#~ z<%6`y@wk^hUweB1q4Rj%q_OrS5!;3UtR@aNhGLH%=<%{w zFYsSlWT$Ho0LK8z^fdd5J*a5aBAQecl2l|PRon+s*n}WCbRCq#0MMC!0{b2#^urSg z6ka4CN92(^Ll*NYVf|C(X>WP$kHjA+cBfa3NLY?h*#1I^nE7NO^@zvO>6NUT(UA89 zdZJW8(WJ7JpDWa)3dhL?xge?}=4hV}Ys{glOBt1Tr!#PaD{R`PrNQFef-MVsW%;R1Muc`aBeaMF-o&^~;eixMpBj1}prx@RcrBmF$c~UQ^cHX(LNabL zv)>;$pI3)&-dM6Wy(!0(Oiehk43A93@2TF0o|Q}fS#zpnJ7&x8xFXXeWI2#sa+ zJEeVWeu&^t3$ss%TN&+b#lCu}@TBcX&f$ImEGTM~8xRj7q`)I#342zmZrzDfNAEFUQzIp>$r#q=-PeUm|IQ*nm9@bfg zK{*ym5z!mh zBTK%?chV5M%pWF*H6>c{8^=-$F&I^=+Fyv}Mt9WxR(Src9>h&hbC}Pj#ST)IlrIIS z^|sah&<}=04(0|<%!?4|s6fZlELsrJt-?dTd6R8R9AP%h`M70krWJ__!+jGKIQ(Y_ zJ~FSi5xJ%9J3JC#YAUs<{+`tax~-X6b5V{JsraQ16gYQ5s5l4>O!MU`+#$r&SRZ?@ z1$upj{z+M)2e=RG77DJLFf9$TDkRtFS0PjWhzjEt2%ZAUC(Vm`!%%b5NywYksC4je zFz)BpbU$^K7~a~oA+p6g{a*?4a=4J4v1ZJ^6zf=L%D>3o^wKSB{cw0x=BBi)^@F~g zlQsdMqS>CmA%mfw;eG0J*fsqT0$j?&ZnQaIufzm`%i~O5EeWoP;6DzK5|2s_oz3q2 zY^>Ca$X=|!IRxSKh=755SSWz$2h+BYdMR_t@xuj!9qOXmifs3nBi(gRluLh(G}IP) zA4;ymXO(dYCH@#7>53|U`=vUM-tN0)hq@FgOZl3VqI z*s8}C#WPP3w&iojEDgF~HJI#-p^s>(NuaO=7c_`#vXrJnf~CRloCH zilssIhB867d#if%GULvWSAtyU#W`s}3RgCA30c|vsqIEvYcQ}8Sau&)aAH6K``jHb z^Fp_wxZoQ1T!+*7>Y$}GduJ!ctIU^343C6s&$prRM??Z5@ftx3gh((o>mFXIX26*k z!T7;mZqg54fZf^7++efa?k|e2Jy%8TV@TT~_tJtn*hl5$Dy|ppD1g^|m9+4K`a1tUO18(KKzyBm*xGtMtxuMW`ppJ* zidf-RFHt0EUs5A*3><47rus)bMd@?Pl13fi<7M%+V`MP{SH3LrA{tmmt&^RU=(mp| z&|)ZG!qgoNc>TOIjBs7o#|4DZP)dx&ele&)LQcxT)!J zA)#btVAlPoJ4z%Y+##%KfXH6-qr!>A=XLkCyRWp=DOpzA?q?QChGP5Jm94m)N?Zla z09YJ{F*5k(ik3SMnHh;?Z9bJ>{>nUu zu=Lws+euism8o9F?3{QF^6|b56Hv^4LYXSK+eR74X!BT|eu{CK=3eZH<_+xt?$2kN z_6(yF(d@DiuK!6xr2;Q|f|r``t64kaaDSX2JH*sHSesei10<@%GNelHCopF_bV~}X8pIS@?x_MUwJ$GW=U-yXe(y_h2#R} zTmIfw5Oy+%^cV{e4j>v8|RD> zJVqwkW|#($Z)|C~zKYCs<<~6#&}--Je&lm%@%niSQI(;2!^3ifPhw@I+k}sK%EmP( zs}>!CJQoA`Nn4Jn}<&7)jkd6V{9rkZ8{I@$eoUx=(^m?=FbIVw>2FV8{AW1NS838Eb}=6Iq6tUw@iNcXyI2)Rlla38L%aEC=4Xt@qWOJ1U|nQZK? zKuWALo~?Ey)mOv5f^IH{pet|6CBSZ02LSsg9VWQw6PD?9DYf z2K(V$U}^>Iv5;KoyjaE4 zc||+hJ!NZI79=`Z;bk2_mj>qszrn!m4BbWFZ^+#vyZl7)-&gVlCSLBBGG&GFf!Dy* zgdW6TmjUQA#$7CCarpO#_DqajDT6tJLA8myLGv4{8MbemiC;?=3)cz!C{Q4sUttvs zF+WKoYd&8^BPjIF`A!h}?O8H)44;k(Emt>OH07^6V|qV*;syZt zUhr}cw%G*ne;M(7>lDCNTCQISX*mz1YM46=&K}Don39+Y@5Gt+E8q738Db34Mq7l! z44wDfmR*G!M=LXKo6ZZSdk{KXV;j0ea zX}o}U(<%EB%!hF(V*AaM52za_^jo6m3%s>j{$7Q_I&_uU?!0eN?9d)$2V7KEuI*C6 zVmE@|fIsI!w~!Nz+`i$9FY578<;GMY_YeqQ%7Wp(YmY=Wt@S6t5>eHz)_0z30Gk%? z%exy12Rrb($V0rYztKv;)RDeF=ez!HDXo z=;^KQ#}9C85?T0QjzewcF!$}*dTW{Byw=!GO^sNw$EBVFik5}r{Rw4C^)r)=<~+8; zu*oroy8iRuOtar2r-1ZcW$3ljyF}aRJM*BmO)BUJa)T;x6T8tuh z?)3@7jK0k1yq|$wT2^B>?cIGbtO>55p5rjA8XGDTBz1RgYa6w1XV@#jGjf%xSo_}bl+m5>Jt82xQ zh*&u~T`}R}o=|9L&V1%!7$bBEGnRcx^n?3SNQHG>$0-~oPFLU-*Xw6)c<mtp&krqswoQ z^d2gO3&^0Eum5H5tYtNoWhjG+PZ$)+i602cmO)H1JT!h>3(i#IYcA6TA-zN&V`0jl zl{cXO{Tr#w0HbD5x&A8c5AK$=;sJGh)nQnwEarBn?18zjZ6cqlNFRes&l!{vwNQqK z5V;U0E{zPWcyA#)Lnf3oUzSfPgY|sHY=`rie;L7(ii@ZYS2Rr&F_EHnZ5DBnRZA^? zKTTz429AKxwI&y~RA@8c3gY(Cz%-_sb+36@Mk0>f4Y4R_=!*_HAaCX?6p3!$(ehWT z>Z7GqP1;E;DM@Qi#H_ord^DTS&hm5R8ul1`;;^b}xbA9JVUZ@*O@U!%{JKeqJI=_( zY2Jh-R9m|{V0%8Wc?14sGn`Hd?8 zcUyQ%Ekih~43RPIwKB3^e~AR7{WGU$<@jmt=0mQotH%7uh{=+L9Pj)==_N}OHNtZd z!}b^^ofC|XTb+bcKX}A$pABDo{B`!%g^ARUdo%c0T(7eWBcTTVCWC-z*(`A~Z=CVZ zukjpY23FRv;Uk)ba0mBOTi;r}DlP7+`(sS@Z?7JCp6+XHsm$S^weg45$mj7QPAf-h zLp^H!oTIZ|`u%0{*K#(eALXh=Y^-eDpzr%N3I=a`Z2f(H37@#2F=zW{(?T#lxJWfj ziD9dud3Szdx%o6*!X>2oOdx}y)%)^G`<9j6&^hUN;u}}VGbDFZ=wwGIYl+kZ8Mput z&lp&)$Yq%cCh?Zn*|zoi7lY^D1iEOMhnoS%p;83VU9btmZ_e$nLggR z6>3wi^q}Cx^D_Bax))skCXJa*SdVIxg(AplG%8tvQ1)DhZvjGX3HS!V{@r zzz#VRPzZ74!nCHvcJYCmRXm-H4{rnUPywq2JHof8`Jq?-pOAGO+BA@n&5dPc)z0Bw zXG~K?4d!SIBPRqm>TduM{0i(j@)CP_PO35{B<5ykMVlyuGC2Y$Kwn)xLnfGd9EneA zCNgg*-hz{!U+#s|G`lEFX;un$=IzfEzu+2LAt(XQ_)AL3>b0pCC6y~yBdqiXMQU2x zu`SZ)1&@}z;v4jEk^Zk?BW5rQg>Tlm|MEPuY}j zQqI>qgw6<~7sSsQ1zHsHi090n1RL_6D<)LO7C38%GT?5JuE32vSTedV5sN7gD9<7i zea2J`jI-(wi0lWf?Z9sq#C-2Du72YFaOIe#?gIq!2?1Y!0FaA_l|@l>f1Hn55gRNy za0i91yzG>*JgvXZPiM8e~ zW>ce&Nb{>dZJ!pAk{k)HeUW9aT~mYuQa6|+0>oGK4(H0aTBep+Z_R#QmYwO^GhiN3 z_68P5!~NNsq4{7bReZjAbn*>2D_OWdhxcaf$rh>dAJfu z865Yy_vLuFY;#qCw^5bsTOc~WIZ?D@+Qyn@&%VQ5LYC`YhF7N0()|Q6ALN$&3)i7u zPuI*GP2xtKL^SRdAI%Wt#W$Usq|VCinrFNNJv4mVUYM94Kmzo=XKZ)=zxWb1&JP@@ z0*qFU=LV3j24)~s0<%8rc$`w!v~7c)!FwZaYE#`A?i=YH&JY8zdqLvFs*IQdS3SXt zV6x!HvHD36mong>(FEwkg}r3p27vZBg?+69Sp>d;Hg`>38hp~)uNo$((_KZe~>>73I-8$|E`nT^%l`xs=}Y7gib z)wgo+{>0Ivs(On4ti}zBu4yBTJgkJvzp?76sY2VP{DyE| z7Le9DY8-z7Qmf!SB;zdB+`bp7eO7x^N4>zCTshp-WZD5`l{O+eGG^sOx7L0)fL(`h zVAMRy%?VRe(qk^Bie*MINK27syvDw39m*YbvnXc{`T9(<#(p+ss`(Nx#B*{!9Dp=@AG<@3Z zaTOeM*)Ff=Ha*Hj(%oELm9%o;F5|8uX+zC(>K-0zQkwBo#x=fr<-{H+LA2kw;HhhJ zFfZRR{9JE+V4P<~LtL>&mtA#wtFErgZK@c;Y;)GBh#)H@ynaw~_>d~Y4Z2U^-|n_D zq&&C~mJDzBqxiulDV=Kn5MYBHoD>c1i5*QI?GM8K1xeI{c{IaCpdbt>WzwS6#16&9 zdmzm6*naO*EOs|CvC2?k1$oMsN`G-|mOb{Z`->kbVlC(zmjEQnsNQ!>4ukA3dg2-z zpWYL&w=I*k1?P5PByd|XM`;6rKqo`Yg(rQpCrvlMFc{5J@`4Slmo{A@ESDYb{1Q<$ zEcHx&eesEFI=YZoTB3{y^Ore&*jkb!iP*|BL-%$YvE=Um8QOdOm|1gYbtMn$EvNlp zJgs*4rPDwXUsT$D>Y`)axuaIR+`(JP;3B)dz!baJ#}~*%QAQQ!+xbDj$5|Z}$nw$` z5-Ci09C5^-Z)MqP}{0&CAC___)x|Y zYW?gEQ0u-k%dR9=T5`Cc<3jB%mu<~5v4NA^rMJZLWiGG{p7w2NO_*y+cm)w4r(hKK zb1cKIo}K7k1v4r6n-rCQ(GmTsvVKiVl*qsZQ@|XKs!i${g(o#?XI)aqD6LyHs>JHq zeJicuz4zlqxJIn`1m=n?DYGqjK?qtpW=EiQnV1w(neqEIzGW!Ohy^X>A%zWZ&;t&p zrJRg6PwHaYv~HtP8+4hu07Sdom|kABB#je0D+We%n%yo=bxGNh{+QvtEE+1%w+TYy zj!$bjqMmaK3g=a8k%&=3`(lG`%x@|f4B+@NO=R}+$~myp%;;fJG|NHzeMfBsY)-wJ z%8=+6nDemlp)krGjgBTq`>(gfxn>X=tuWfifFSG?r0TgIsO`2HlJ!;?&DQldm5L$) z#eFtqlvlfQ7=^PR;*0h=#d{Tm^y8Ua*XP5?RRiHl%hjmmWvVKJ3bn(+WjI*T0=!=& zj9G8_;p{v)#VPDf(bM3rWWT0IUbXM64T#%~x{-h*mJOqpx9U(RE7ewqSLj*l`M;JPej@4&+O8G>rH=9QUK%2^F@beI|U?f3!TW$RO(Vc5w)C0!~X8< z!0;6|bzk!uITGOjX;@a57UVnG;+t&j6`Loj=s`a`Ir(Ti>lCI*@W^)F{?Z8 z_c*QoApw|LPoWD2oR2i#HWP~~@pG9MYP+$`#uqp|hB%1tcvEaFn?clNs)JpLmG_Ra zgyNG3AAi*a0MLW$5`Fw#7-038s5AoOhDJsil6+gZ0}76oGPkNNysfHA_Sk!^LJt}B z!hJ2G29BxU+89&uGw65Yd8=7U#xfhmhpxolPz2vuz{l&S_ibBtH}{>6dsEM|cif~u zZwfp08?5~dtAz2|Q;g3P?ID4@2O4-|kxXVC_{eB%6aS}+g8T)>7edBS%GBs)3YTwYZ zB9hSH8!-|UtZ1k~M)s~`XjGCD60n(Q6#k`4fW=lcpDoLyN?TuDh_B#wMpmBW90 z|0**RxWK=kgc1Qt4{fDJ;dwO|Gd7cmmiILgUlGQ+tWrBjMO_jLR5m;pS|C{pDtK`W z92E@TaGZQlM;n<9No2lOeF<$x7$btxF^~_Q30gQuDM(dYMd?`8jX;&K1*5q`hgw}F zP@Mp4xo>A;Q4wW(wVF`iT}vQDUi`>!ARFG{B9*$(Y@tlLhEFsRRss?|XHE}pfRd*z z9MqY)M0HiUkB%zGHNN{LejkNAO3|oH_Nd$&Y*k}v3^=p6mhLLMEM_cfq?Md{yVt;e zKqaPos30`3H7<}375A${QQCy6KnOHJTJQ9#cUQO(6tqIv^=TtiAVXN7qlE)2h{x_D z!5u@83wVWcRfQ_KM-EfsQ^EanaV72`{Y}bPgd+*}+EiVkm_fTDw3ioiHw2uU&QGnc zg%0^WQe%%;$2U{Q`Kan&APB+Gob7~krrtqbUDnngnF z)>@3)R?D{(3+HC6RIDwJP0l44)=t)1J6=aAkFw484A2IXv>&=Q2ozw-u@)E5V}Bsf zHPA_EwV>F_wXmsKu{66Bpc)Q71M{1dYoj=?2!q%hdQu7R38-NyYu8Qh@QDs~i>jLw zqiDc(5_pDaD?!s1dQr_Vwi#xTC5-+^DxDdqGgb4~;r(ISJo~=q(>pgVM{8q|IcJ#M zHzyxJ2v)m`E0w}P${*$rX2#A@{Xe1k~kk+DAt=-^O&A}Ed zN7ec1she38@mOBpMQ;Y&G8yz7re)e#w!7sQ?UhInKgCg1W#vmht&xzCU+-k(5j7Qt zs;x0U@!UOeLf_Gq*hq03a}3Y1V63S=O0;xXK~6EzbGc0kmXIp8E8@NZg~V06#3#99 zw?HoMO|C?LxsYV0P?#d5;Eht4P|{poIOyUdJO1DU9iQ-)0vjSBRi$ghm8&;w!Y*(+ zjX_eg@d)tIxBSh0*KW$7kRzJW3K5q}oyt>Ue5J4)L@Hdlr-KGwum#1$s4(>QsxY;= zUG{b}{R~L(N%Bwut&UY4Ni9-_t(G??8#x{oiP$-9`KXgDWEUdizTj)#1i5+uMb8fNTnc4EC{5gPD;kdmn3 zfSO{9b$T;J9|cx4i?k8kP_*)m{MYGOc#UV7dpX9noD0owK3KzjL{@psH3KuJxzyP= zvzK`rt~L$%@G3=^t5`-bU=il;42NDI#8s^^9MR%a#0m${PZO3Bw4B^Hyhu+9_!PC? zQ-x9Age~Ib6%&qwi6jnX;)Ryol77fA7y|kew=7qdKEdS2JM}H;HOAE%8uGjOa0b^> z_L$~Vp%?Qxx)U1iLACo_2w~~>rclQ;A~!V`kotP-;6~1+)0$8(NP~};Ja(J95|StTPMLNpaALc_%)<#h>A=mB zhT0+vFP(Z}(2I9Xir7Z&+>pq^5WAaIMh(1mJ*A?!iv%99kddf^%cK>9yFrsy)ygmRwcivvxpc zMDIDDO5MxqMzK1oQSh>{5O#c8x>aQ9dWN6uqCP%;-X57}7991@?Aqm-@{+R)!#fLU zrq*9+J{4a4Z5mugEZ%0IC+?S9$?$F2XFqFZJ6F=ohrL9H)f>*QI7c)e2`GR@6}v?x zjN4U;z2;O2Kv5R#Gofr`Sxna_I&nR*Gw~OQh>wV29zo?> zCeWvF+uy*ZpBBKB@!f$|7!06+`3e_Q&akzx_7W#3!+|SblO}!CMyHJ&=ikYM(_hQ! z-wr2uHLn69NOOa()?T-uCq=l^^0*#yw%RY%gq4ptBY~!ABKR+=&i$gQ`H7m-e0&KD z8J0-JL;Aqx!XA`dl3=WESw`*^aCa6vn7Mf8Y|p$*$GT6;#tX#NKroM))}X(!NO^;B z>Ge?0L+I6LWrmERQ{BQi1qsWvJ%Z$z0=VX`gF4&dp!;*Jm^|@{eA2!7-iF0e)wJIi z*ga8jb&vCG8nqe*gqG;h_sQC1Ug^iTi3$x_A6alA(TjgEGG%5`M--Yp9Mk2=>xW0^ zSB?wLVvT**>8d-(b7qlg3;=h~WK;a^@_vyu<>iE+;b>wZ^%>}%pte&FIAXt>UcbO~ zsHvlc5#J&Wx(=y~lUxHo0p85t(sf@zrgNB<%|Ocr{rY_9waS9D;q;WyCKsVfO254b zA7&Brko%yJtCRgF*r|C+Z@V@e`I%1g_4nBltmQ&Zo2BMAJ)T;bnkDNst@kR1iY%wu z?r(Xp671Y2hI;PAm|76rh_*wMyDT&VCXbeaTJ|j27e1d?4 zbw(~Nb*8kY(O<~7IgTAVy}?xw+vontM96p6vuC`8ojtvqXeyQNZ{ zFS?gtP^-qYz@FINq2N+(6r;9u#!um1F&^rAJHa#}oICQa&*9x$?1ITO+JTlUFmk(y zez}F1A-Ud(!q|#Fh1=MeE5=wY=x|}4tQ>Ev#&o;uxcoucd&+lP-WbV6)vuqNq(3_m z?9_%6f1buQjgw-w`Sa$Y1K~*})DgaWu$(CD5yNNJ`n4j9=%(f+A9lZsb#vmFcr9k@ zcih%mIdOmWHZ*n>y!i4;LO}(BxYxX-BVNwZxllK*2oP^MbG(4Q+P6_%HWK z2{#3u=~QEs((jyc;F&jQRtzOI%M(4cl;CBhC;Wy@D(5tqS=}j$X-fA|;@*pwv<>74 z*VZ;$8c6EPFgeYF#Jqw_u&lRViSFGOEz1&ZZz0^oG&Wg=ht*__VwpU6MX_C zn2qcfGCbhTH=CIQm?s3>=XaHjJv1C*(Vl1Hc-~K>gf)qVmLdvu8ICy67aN{Vu;8@U zf(9bAipKqi+|3n;F)x1J)6rA(BtXoawUG>?OWr$Uq?R@sp@$qqLB6Jgzd2z!4* z=LK@C_!X^J3^0ZgSV=V}QNn5p9msRnP6{fWFz(g-Ev?%_WGUJQN~{Nhy!n}Z8u5U( zqQ&zaO2ugYU{OJRh}my%-I^z5V#!Zrojld6+InA!@qVAyrdHvFdrQEVKmDn_US z=bq;oyVo~j`^YQCdi(afKzVGJg;5y%?cG>>Hxv9#Hqz4z`Z~m7CgOcDFnZzULAv&d zyU7Jx!KaR_+3#k<#~173J_}2CGZ5gz;*5_+wmtz~Ra)E4Bq zUn2x`A8s>M-vYE*eFE#8H}Q$*qkw&+t51gOSng@~@y8uJh)DAigy~uC6?CcPe0Z{w zWD~WYmL5Z|@B3?}Cr{+Gwmu$kH`uq!Dy1QZ_qdsKsj6GJve_=i;x^-(L2G=usGgHK zc)st-d9ZQKUB|dZ+=0FI8&tr*&^?!rj=8A8-nm_rc^^Q%((2#=oSzM$T|mmnzud238bwY$Zy};H!GI=vCaljud>!U{rQrjhe;UQ z4Z{CDEKp++-2uCjOq%60cTo&w_)WdXjg~waP%kPb1*9;~kw9OasLZUmtZdb-Qzn-& zx_vvhRy^6+dJz5b`(_w^ANon*;a8hd9xq8hIb2%5l_poI z6ibS1vi_tqbvGY)p5tF+)3+{!5HIx3f{x?n9-H}>?N>DgT=^W;>BBK+xDl{(wn`NVeklbAK*!sF5F0OR0m+rAGC=!HlkfBOv%4YZ0G zRyH$1PWRca{+aG)qY>S9u`YcteHqDl0WkZ?pP{Fe_vfw~wVjVPgD>^%V`1F(3eBB6 z%iXD*Xk4c+UOs0gu!>M-OQVz)*OS#>8=h{z>KxoGZ%lI3e{cW1_2P8%Rw>S|My7>u zF;0=N3$X>i7m}uNUw&f-bGOw$_&i*~qoH-%4Xm(_CXP?DLw4SK*vWi1EUhXD%IQS>U1^W$EC;BZBv%cH9REO zh{NdZpqsI)g~rMjS?5ppS0Wu$Y1t0ewCsoY$K_Z5!nDZ^5Va zwQ}DcBGuo=ZYF-#%)i5V>9Z^$y;v~$a9lf_XbD|rw18)MF89NGeD*q_3+cq}n+{spdL8kI!!;=02)g;xFD+(Rsb-+i&K?prDvY+iuoE&APkr zcuU8dEv9O31lxV~?{lY`j_+qRQx9+O`>u6Dhr54_Flwk4p*1OuMeq&i{Enj1QRuUA z!B#hnQW_qS6v}IP^S$@?EI2OADGh0+4MRn4SMMM`uDVAL(LtN(_h%Ipv;9UzQ$p;N zJPyfP&bx#_^Yh$kNHiCPp+xf6v98U4D5ZCF{)`Bp4Wx@tx04fl8{ytq2sfOOSNAg` z3Huec^|LPML*4R}4oB%EX3 zJ{gnlt<8DQ(Y$rrv}*fkF24sD-Z#a(VAI^>UsgtnoxRJ_a~|zp{$Bt$K*+yQWSN^} zuVJbySNR#^Wwu@nWp^JoKbe&1RM%4W(a#R;Xaz>92_AjtD{OH##}Q`dq;)Vw#6E7^^1!7VJEq1 zV-1X|waxk)vYFO@LYiK~XQAZ}ZClKl68!faH#fxB`!4-i;OvbbJ3BOoq?Am%syoy| zHDHjJ(Z8q?{`RxZLG>OBTlU8Kqs12_Q(JYT_LKq0;?1=F=Wjj` zZc?^+Sjj+i2}K%&v|Ch zjAeh{{DL#%Lv`<8&nthMUf$*L13y)<<7>L^*OPZnRn!M+5%QOzK1a&v3_rdvUq~D+ zl(L%9+x)E)VDFs{YTM^LMpgK3M>CUSZ-=1cB2YxY__{R&nE)1lax;{Bkv_>XKfaI| z?S0BoeIIN1K9n|*zR7@Q`EJASp^S<2P0sl7gXkFPO@{dKgX|dTO^*2Sf$&=7Ml3-j ziS$kG`td;~jPxc`{rDgiMEVdYn0edn=qRF}ALPbJZ!*V^AH>E;Z*tL(52AOZn|$=+ zgKQY-P3HRXK{|=_P5!d;SI{!TBLIZY08qYbq_RbQ}%~uL32oR4?Fv{qNrnCT+d_%J72)LS$L0A#ZJzqun zMl>RP(KPTK{EjDSB7A7X_>ihbC}|^nG+n-w;SnW`gij`IFNtl0lIG911(zkDkBQ@@u0_P%iHZyzKPSHSQ(TSp} z0$I~BGf@OG%~57m2!svIO+^t%8lfhuA`oh{Hm^n?Yna|e5r~?rrqKxGjoBww2n0>s zXI2O#P2ZgoaRs8w&N~1YFnm;Oa*d=GUHbfaq4$ zrf@zy+Vo@0>m!Ed?-OW9K4Cw;K0bYsetdm=`Xc=J`uO!l`SJAe>x=W_>EqWI=f~2= zuP@J!q>o=;pC3pczP>&`kv@EVe10N*`1<(#Mf&me@%fAN_3H|t=}TZ6rxZ5AH{in8 z5I5&HJi;4*;rqZ54+4dW0&+{2P4~1#IHnOe0lRR(Z4DcF6v%Gc1q;5BPJwc#jy#k{ z)heAmj+_nzfd@Yx-XaqNgb`fC;6N<64<0DNW~k=4Mg@VRyTIrjR8m*3IHD@xJau!p zF@XHB9s?r-&m#jmD=VhK3P4h&fB!Xi0QYKDm%Q#IXl$7g`Q$}n=B~kK6)WY7`tcGtS+fSwgpXFO)~woY+bS^1f*MD#FttCnR~*s5Ji-LC>zSQVeAVXV$L zjff?b+O|Sga5it8-WrkLgtcgB`R9xLOF+AI+%ZddzI|}vw8$%j+EqsE66$3J@WPK1 z{^NWBaS6P*Ve$?+a6ldJIqz#AYn(O%Bl{YuHI<@LmPVbtv*2}Rn zdRW%RPpjQrxN?s5)~zb?bD-y($tPpI4*BarubrM(6|(EvJ=d>abG-}p*8_RB8k~Q7 z?QVDQz_=Y?g08p(Jmta2C6zU?YuCk23X^QDV$14MlOz!MjQ~}6{$f?#vHZf8{|6Ij zyxxDf5BT|iI!=DqXjS#oxL`wyNuH{pkgmo7fDR+g>uST_|A#l-yHTVS;0pTnd263;ES>j%lHj; znU&I>$=#rUp2RtMZLr0>P*ruiMoY2cU4W|i*oI)fjxv zlGXx>wcL)ShPB9$#JJ@OZAD74Keu5$YYw(7E=*LF%#oWC_7=f%0e;MaPlHvfE=n_# zqdYcVA)W=rhTPGyqfS_Kbd|bYU8BqrkqC=`(Zt6U(J+)K7mg_fVUWscph&xj zrGUy!z)~|)-vwvCAgRon-ga8aXbldjIJ_7$KidH=lFb7&yrl&;cGBFUD?DX071XI1 z_>V9ktkeKrBzy3pbn5*T>GtbI)+ZZ91>;Yx+l*N@DD7srD)7t&)^H5RYlC9^>@@ll zF6haeL9NgMZlyEU8Kl7hT>W-4C@2#5@$_IIvtut^67PKKtYHTQl>u*Q z$0h6-yDBoh0aot6qwQnp*YCO1WN}kemv6P@^D5mIEmm^cxOyn!PVQAnBMm2)d zs;==Q=2J@(_7TH2YADg8VL?u(6J#n@^s8jQ zD0lmVO43e}lK!jIbbOhe98qJ`RDd0emsNR13}!cWv3ehj;#?Lar6fJ6K?!>wNdR%! z)_gnpPd>j)hh2;c0baow)yfd7=i~nWRT>;@kE&H!%1|b1w8{na^j+_pOPqElDEC6T z*qUt%)<^n6LMmcGJP)}7SW$C5Pl-9!XiJ;rkb?E_D*Kw{N|{+r$*fud9Ex0zreu$> zmQ|-7TZaZqJhPfGpdcHy0>ON{umZcR|8fgwjD|d=`~d}bn&!Q%z9x!z=FSx@=@wMU ziSI#n`N2|T$$%;8^Q0h=^D({Xg&)owm{Ov-qJxP772w{s>qc8W){S_tHm;tstD1`y zs|;13D*2zY<{Xr&P8Dhqpp3e!L`;IB^dzXS3nz<{UjWmcF#i2H zF1XDF18sW)i(oW2+=3P01iPpm(e7$ICd9{&tkS2WPr%B7;sA4icjS}W7pJubc2-jC zF>kgjQZ|{BqAm&X=W*^kj{(RUO>ntF&ff42x>DAo{*NW?dOh;6A9gW$?fx zoOCL&z$}<3&D6+lUK(6wV4#y~TZWDKG5`ToW0o;kP*$W|=c!}%^VLPhhSt$(~*k8wPPuU2nrbb^kfhS zbgH0$Lp4y7(4Mi!7~B2FP9&z6!0YkjCdn2of9n)0(6Jseck>ORv}TW}4#i1O^1xsb zLnv6qXJw8S3k3Th?VjFeAqxz2e9Zxnqsf)US1g%y;NS}zSXo9sT>zD;OqBEFuyOL0iGD-R=FX;p!N zC~}uDRf*nsatw~)%Z$2#!!onFceufOt-MziQrx`2$b+zgIBf>*v#Dgb z)go1di}{U(l|3yu5(H4XP=`=~P)^rHOxUDRrFBYF`&+0bfIE0V;`OBFBO6CY9U6Hx3oRRCokdTm-{}PmE`8YgvKj1+;n) zTp57%>G!>M)UBwBb*1etHKZbiQk-7KdTUOj~t=!Z4v^ z?Vv_h{x8O0l~CTeCz<#meNbENj|p={w3jy*XNC?xHVTU?Kx^i1T$|8&$L;)Qb^s0W z7t%fqhQ0h_cD<@H=9F!~uR*lA>c#1UR0nh#Hc+++SZ{~kuJeC>e_P0qeCK^hS1d#9 zl5AP$(jE~WE(nf}>|#?#l?fC{a{MC$XQ25`Q}>V~b@Qn(zbgC7lwc)ilaqQ(#B%I9^2VR&fY9 zILKZX^k8*T{)`N&dt~RV29q?_Y8E+T_jMSml`HTX!zVP#WHi;Yt&nHVmuyWt47%vyBep(&>C4qsF+pA=vyK1S+n{0K{e5x<;W=#F)P>7zhYCUJyj~Rh>2*~ zQJByJ(m+281zZZdvlR#f5sd4h5N0UHx{?rf%`A~Z=LH!TdBSX1j{~ySf59mYt%Y&C zZjiVb=B6^vd`MyF<3a{ur82?ZV}ytPuxsnzm<(nWz(A#5T!*NoI~z4?{!O~Pcvu-5!x}m{&M30!$??9n%P^q?@D(h z#?4iOXECl7cuyUq$`?MfTy4*%pz*2snmxRgwyfTM(x4 zIrhR{(cidM0a- z1a=`UtB44^Y;MX0N3UKP#!J>;374vx<+%IHXRr?(p8XDZu za_6EDp7_ElgC8c~Tl8P0COI5;J9{*D{uB!^7N*3ykUB5U3u?SjaD70O3aWvBiO=^aO94!B5lUNGJ+U5}|d%ARSP@+<2LzK9h> zIt)~ej(Q04u!w{fAS&&2B8Qfua|`rO2+zA6ni3!7;JMiDR5uV>sr7j&*du_aE>^l6 ziE=T(#Muj@tu8T4^s+B{WGcKkIK`dmH3*Hja+fNAWiLx3K!!z8e*lp@KDE>XZa4v3 zGFWJG-5iF>X;5BOqHQNJM3ejEv`DWREhtSHdbwCbmN^&BV;t*OGzht5U9$xMCo9{1 zc^N|IQ?r($O;pmjF*0Z?4K)8fHz0-x(Te~|APLMQjLfpp9Jz7?WMmQS;1LPZ^`j>* zGJ2GK0lheryp@bbLCP}!W}nFr{@EVi-3{cVL-7zLEOwBY$yXU1MFd=SHh52h?~86m zH^Io>*<>akY7T+M2qg}`eN#-za2hZ#7@Y|={?y2NTlsJ=@ISKFlJS4ACpF=A@OGht zf3tlCNBgeP1XEtEROWI2C%>Gt-s6!zQj6a|(b5hdAh{O8> z_;J1p)DV&)_S)u9~3Q)RV1%++d zpM3Jzxm&NHXKV8yJlfK18SxT?6x>byg7?}j#35qDciCBv=p!#kVTcGBalfRZ6Kuux z1r{3{DEJ22aOXf2AGI2*W5oIfW+F1*uJJ*bm8RrD0&bI*$lnlQzI`4%2a_)P;wcia z%Mw^x{>J0q5@tMr`8Y0yaIYC&O3>c(@%-YCz{Cx$8|d2{-TCh{M)?yyGm;UFSd$b+ z41yE~)h-E!a?5HkkzI^Ymv3`Gj$-@%Y56IO4E;@O)43%*d}hqj2#z>L2}u7<7h3|j zpL4b~1PQX@2`H{SXf&lWYrjJ!Xf@%lz$_!dQ#!lAKx^9Ol@);>4D=tLUOpdw_Nq1q z;CEr(G!_-Cl$^X&(|sbEXa2Mpw8)?zmP6D zDMU(Te&gd9bzX}r&k+1p%+vN=q)I`;k;J6tW{}E6m-ROt+In`r`&)^(r0(!e5f3zd z;I2y77e71#Y&Qh|9Lx9r4YSocvj6!cDUVMmK`n_`BFUkNcs(Q(=+XR7z~7()+5u7W8b1gt)c+w1sUHx> ztwFWh=}bO{4Ka}xYo#FN$RpxvOc+AD_Fr6wn?w6{1tyHOJo(Y4Js)7H{ zdAOS~`#~f=`$G&I@ejAlA#ur3Ta;(0Xc_~JBSDUIem4`EOpWEY(r{zwqJ)KK1MTkL zkK-`aPi+)cK9S1QDz8--PYujWnSQi5quOpd^k0evL*R&ll4!gdbTXdchK=c4qA!zH zXAR!x2R1TT9Y-s(;+)!8dk2Az1vxo7l{2ezslX0~c{yn%|kDwEn}wU>BHsQ%s8Ro%v!Dq<+D+ zumvQ#KAscHznUI|?b7RdH#p+qdQXyQ>s#BNpQI zml;4By=JGhgd`bCU~prY?*q+?Q9Fd=%06wG-uS$|mI3X=&>jZcNQo;B12z2>;#y0l|Dnv1mefmzOhi z{91?9(nNm|Qus(xo?|^qcXc*95w6#s;W*1= z??85*jn=+Sj8`_#Mk=56oW8<)hM#|Q>B#rvjRTzl>i7u>o9CA@!^UI<5zk2&q3%jg zSnd@`U&AfDO!u?WAXrtrCtti>CiF9~dC2A^UkBEHX5&Vk)FIu}&D*ox&Y?)2*a);j z|0kwf;wB9?a-X0nWzAcaZzRp#e_OD=+7H?0>H-&Fus#se0So*`c{NLp^!lWx zWQ5z)ROLDJl_DFewSv&x49j6x>b+EZJWC)H8MJIhSOVLZzn*}^0NbU9bDmD3NH>fXvpWQv<_dth{b@(0m;GO@$<+Ve~3Ef&ra8|gBlf#74B zU@J?jVQZ4r8EURn?^r&Gz;?Scpm9qpR;NgxTp&y-#hY8*lLSRC<8+Jqrj7_IshuBD98^Z&HB`Z^qA}z~*wIIE;Dr zfF+6I6@WRuD6nk*Te;fc7S!jWuC?X@hR_w%c&OG@HxZcYlq%|^88vXg4xEhwLlaE| z8klY@8>7t=PmWVS0&AilCm-drs~)!D?eRnu1l0zW1X{;CCaEOWTM-SI%kmWkwQAf- zSSsqM_+^YbVLT42$540Rg683@Ozzu)U@&fBJovR}LCzLqe~u<8Fcoevw5LiypteMX z5Gfq$5csP0(xxjf<--mx8`!zfw1E|ExROCnk_85s>n^fH`xA6HNc-rW>^o`^!E;S7 z3Q&d?Jv}}(smKgv1uZpQFL;do8I@`wM>#kF94l7gdupjgh2Mkl{ahLshSsJO3F`VZ z?KX5yS+Frtu3;7Jw$ZH1(q+cVhkYn@yO2DB>VY6MoEtK2%tMWQ=s@mG3Sg^(x_yoN zSgWCB*+ZuAi#T(DARXtOcT0w{xw+?P51{bOPd4jcFRFMO`EdC!E!wF6n zQsLrkTqFm(yDx$ojN|4-qY@0ftYP66vFRbp96yuljSo$%G1%&G#pI{%81NX$Lkoe5 zqgb=a|}#+|Keb2`4EaGA=ohN(u?*mn#}zJEUgV)oVNNZ0(|?lw~)I`P7Vg zJ>jy=-L@QyP>INwW$#+oeK#(rzFhZJBa0(_3z`SCit;IEnvbs9bA=HX*!~v5aPAnI zu{=7IAs`v$IK&F#){y9$Jn-6q>XsRb=ABpX{E#lVYwG&rcc1}q$;8h@~i5?eiTw4xCmS1>&h?==61Ouqy4Km z$TER8L3dkbk==1I_lygV-c^*-z?WcB4;SvJ#du#2)_;HQWvx2ij5l|W`05vN}WA*}E>mJphGX277!!fNl{p&L>I6lHgpe*`r;GC`q- z;*fWnsAs+p!;VED?GMbOPfg(-(~N3Z({>XX)vd;cb?TZmzPfswLOsK`iu-yH>KKe4 z4ic24s>E6lpMIn9kCvu#Vy{?f~08{}gkerW2H>_vVh2f-B zu|Q1*SRHYys_9j-MuFkU>-WnjPlCucQMvZYX^Lg=D}~7!1FhATM_6($IaPnihx-Zz zsyg*(;6|Uyx%Z|@9?a_Z`o}eprkn0QEp~}Py{YLIBD@|RsOe$a0`wXk!sO5v)T}?? z&I<)?nB)C(lS&wN*7X2L0EcurfwYF#mzoO{TB4*DR1OI{w=6h9`|xhY6?#?YR@CK) zGd~jLQspt+xTB3bF!X%;$_fS! z_?=V3$5jVTw#K%$;BxWcuR|u)p6Z?#TjH{rO}hbOk2h`Ga=f7xLP4S4(^j@1Cm*|M z+W0g(YLIVx+Y$)&y*;W(tp{CvtFmWy|7NVF<^_4wYIruPA#-i2FsjBQU%#!bpjc+i zRtv!KJqjHbh_ULWaYc`&fy0Lcpy{dGk9S%d#GZ6hm_*tX3I>K&8FBv9L?2dZ*?pc# zUvCYbBBvuS=1E5Mn5wMsvj{tPD#N73g}_`)+)h)8jJikRxA5J%c6SJGU#Ur&*TeT> zRC8YC7AJ%PjlM`Ro?zm{ZWUcoel>UYkP^+)=0Vj2(OWRbZ>dU?ru9AD$e1@&G=}%0 z+*6P8=oDw&_D0YM)mrk%%*#}AVthECi6QDzBWbtZ%-PDCwa#QOP%{d=R!py6-i=uA zsvzL1RjL!f$}~Dl8Z}UBWxra9L!AQ{^#*AoMxBEqE~$+XiRTPwfU1hFDA`C4AhMYy z8ei>N)9D3(aIqnA?sno9WxILdF$SY{>MKU?*K1fTyWbp6<9RiK8t*(X47)2UIFIX^ zv@OuOsV-+qx&SF$V_FSd0sq5==7vb4vaYVcJ+hU+NT@W$g`By!Le3>kwujn??$#Bu zHEF2GTrPnD6b#BS(Rb|0bm}N@iM56DR#h%0A_Va`>lr*T^xfI@kH1t}g`0!%lul@+8)Q8@FAHyc+xn@Oe}TLta0F;Ww8oe>)R5S(k>ABt)9> zozno5Z{G^Cr(%kUzW~O4A04|3UV|53jTT5LRV=xAz{Lt%8crNQtoFtY1cRUgLYG(_rCm;rxE?Hj zJAMziCC`HiYzhbXg;Y102ZoSZCbMu7nGpb zZw0A+(=Ewk0_^rKyP2s45@_?mENB<*@I4T9syLa!^*5-($ zKknZGZp_TgR@dcg?RHCs4MCVztEh-m90coE=7^z2iFRhoH4rUgUMe~jGK*A6`3l^L z3LT(J^yVO5Ive8xU=@|o>^@q#<)~Vntf``PXe$P;&L02NrPAL9NWNUJO=6wn_2;J zrV0-Qvp@YXHA=grRI?dhYgEBtc$dIECNn|rW`eai+R;oXiTG>$xC>MYC)v0zJ33?^ z4y`>=5-HZ%XPidSnQN_!x%?~hpnaj*h&ItOJQF$ltv#^98Vjsal=@}OD7J&2H3%=@ z5~w<>$K_oO#dLfVsd$B{TDA2Eh*;BlK$ab4wj~&bL{L=GWhFrwGI}B!B`X9L!QKU- ze)AM7O1^^%S3}JTZg*s5tWo9S1ah*1lVc`VTY~rl%Lkh?(HGLhqXrPTN%Z;Ke zbLvr7jO#qf<=|(|a)bkq24)tZI(`qNYJ7|5%CDyzvoc%CYEVAiGGkchMbT_WVN`Yu z`-PXJi-@b_||Q2X!jN2iHJuol9$=(Cu;ESXPmhqmVM0W%85w9xFR`HEGy z@^FNJk({_L;vzka+Spm^eMH^l*&X>O0iv%Zlb+h@+1DU>lXIh2Ea((<*W9`E6N=GW z7AH3~nD%0*fg&d(<1Pc*3i2Tsn8W*b@c=Cwp%=(?USsh}j0_w@>G8bxe}tvgQ*db8n4>QY zEAL5jhz6qBkk*Ahk!dKgv~R+Xo)$8qybngw47*S0?{XowjBy&cfbG+^NXigAST%ks zNAf&7;D1GfLBB}P(Y?A|0ZF9falbHhN-kIO0Bt#hrUwSbBfDonq-OdADi+mUGSqB{ z%aNh~HeDjgmKs863CvS3%eM14{Y@?6GPg{IfyA)0JKbwNXf$7bjJGY;5)vxUb9ZEH z<8->~CJi~-!73Bm!Hb#Qo4ZHs|$ew{c1VJTZH zcW7k83XT7|3Fz#_jKrn<+upKl8Nv#)DC@Q%FRm9 z@`{=H!+Nj5P<(P?(yQ_JZ41Xh|# z%u2qbQZq>4|zom*1${4*azFlGg;#>pO>jwgoR{m=Lkx7D9ypMa%|@&3OOE^#F! z7k^cR=>Xv=+$7S1?%MR9?rY_=9Q#gi1ZlyUEJ3pBkEs&*P74eCaLJ+{pvP)NltkEo z*yp=20zu0p>}pK4U)**=1oi&-xyjZ)!s<2IF?2&ie?eR?#FLmr(0(AQhf^!h3qqO? zJ?SADp@1YY<^HZ3!r zB!9svOf@du&q26p0y7UGc2LCX4$1<*{DG%eamJPpzo^Q2Og~+)VC2xgRQjp3oXQ3;6(JxpUoRN#N#w1VT~}7;~7d0c?ly=eVymI zO2*;-AR;hd_U|Ks8(u8?4HpEeWWkM%RZVq7hF>&zH8|t_5JP6gO@ewnpYxD;S=6O| z%~u&u;?rrRG54z392#%;{yDMo+lO7PV(78H#a5f*MaChB#%g7GYz^>{!uDWSKO=v? zAFKox(uU-)Frp`HMa%u{LIHMVhn~)G)Lx*C8n0XMC}6VR8)(nd-+Ao)QJB<^-`XVKbN4A9O$ z)N*Mw^&S{SG-U5vVVY{|&v-xQo8}DBVt2cN919`KOW7*O;JZQ#0;DMTiMl z)cxeop4Ge#F~yH`V6MBOmvbk(LmLPgdx2z%@Is1Ly_km9@c!0A9TA&)47mTZxMWUo z_CntxCihOJS*vKMD-KwA9Cj7Kc1_ye+Qo-68? z;FoiH2ops$6&+O?%Kk=9uUDady?q4E68>XT-e=YglOI1@n%+VZSy6!CX4b!+dR^H;aT zlKjL^JV(T9V1H@o0L$`-lBAFiC(M56TpGq9C+9;FhWha{&q=|B5?=`$UamGaCrVCd;m}ZZsxF`bm=V7!#>|p#f~ovSE;L%eF2q3}3rF1Cq`QDT^p8^j3IW zQDH=tGKSY;1GLb8N50vBV|tWfi~)YN54)m5uGnsu2W+#`EXSo4czDQ7VP?F^)w z=IUGla=yiTe~>>m6hA`EmD}U81uj8?t*n&XqY#RAX29sH>FOoo40n98J-Cf|dOwY7 z!wqk^&1cc8$>rK9^s;f~1{O^(B$p*UTrl`Q?`nz|u3e*r7r7K)s{D+ub_6{xThJ9A z$+@u28_~5A!^m0xQIlNS;zmPd<_?UkC46vrR(do61#@yecIb;6q-zM9bpO^Gkk)L# zjkt|9gC3_yF}%q|Ik>m2Lt{Ap|ngXINra21{$eu`)thwU24QDRJ39HrMSap)Yd z_;I*9R(p9At}+47$CPob66#@kVTS|LYQU;>3-N+K`3OMJ*M{#&jEnw5e(fwLZd# z#0RP*fYMe1b>CFKN9(TQ@=4Yf*Rv!yp-4CJgHg8?|X5926gMpmHa6B!*`A4dY$ql$_iSi2}k0;PZg81+YfgD!a6 zMSH1q9O)H6X3DJ+o)WGezf+MJmb=*+Wx!9c@izh>%5&kq*4eTs(!KGLsVwa9yP;_h;$9{XrWU!y zn*vNW7Vz7a)15OP)J^`LgEm%Gas_|yxCFdTSu$P*aKipc9h#tchC)wi`OFVbmDQ+ceSPxrq}^9YF)BHTryaZfrm+g-D${8I_FUx z2YiAYHo|`!yj=lZ>@PKQ?#|I(4WJC^;h+U^!KWve55?zkGA;G!V<9qm&#uQ~tq3GF zG-`%V;Yb6|f-VS}70 zt+EWoXi+JY^vlXc6T;CzD9KKBIyImJ8^;Vi!;r z_}&a58+LqJ3*ZHbh!bi`H?4(W(w}UBF}L{hY+fA@KyB_Po1x#8rU?bEW)Q@1vz~1+ zWewUTN;|x4#14S-qu@b!Ys$<80L}%Xg!Mf=4KmRaDOB56_O@5~x?14z1}Mv`LfNg1 zWF7Q5M(3%GPnHsMyve1N89xmu$p*RUHAA%BhjMeb1x1_3NY2L5-OfK*L6^1Jn)}0L zwz{9EYXQryq{2R!&ZA zgG6;I&bO)LqE)l4aR}hFV_kJYRx!Gpc65Kp4Pe7~07R2yB;K&JH!JnUlGO#Kw^e_G zHk%O(r zCOl2=$)kHX2inI!VFqETC!|7&-4M=naxHiY^9sPrjk!pr)CCs)lJbWuez34deeF#L zPmd5qNs!0-{C7!d>M|2oiYa0`*qO_0ot%Jw(XWg6-yLOs!5jm`X)T$t_}6Gki`#!B z8Xc=ngde7j|AShwNM);y_fX0W@0@l)h{_-kfI#1~k8ICryqwO$yB?l^tpJl%>SR-# zVzmxP#YYA+0q2)(>q6L=jcitU&=lYYw83C-=$QKmU`0s|+S2BlVzmdgq*)+x9j&Eh zQK@C!9%<}ijf1xwwK05FZ^M%s>dQkw?qAE-1iCfw1Rb;9;38`WxDUt?V{~nv$DL1} zSlum3a0q^;;&e~Z$Oh*+*%M=N!}E!H%rut- z3rgNW%O>SYST9t7;w>+gD1eumIc~ppo;#;pp_NYQ>SA7%2pwr%P|jr-zxh%J0&NX| zp!I!J0i@NNsTKx`?1Nr9O!G}X4&aF=^mP;rCuyjJlv?5Ij+D%T?4kiY@bS8eEiEvK zj75$u8OW|qOnr$w)3@@~RG#hN2RBR?HgQx<#;WR0eBmT-L&Ad;K!XRa>4Esvl*;&6 z*re4d^a$z9np&K6SJO8TmQ3tP{rW^m7#9@)OtOacCgpqDnSzn@HKgOw>tLXCj|6gsTSS zFV55S+SD{lJen72EID#I6q6z#{P^%uWLiiVGOnT7Uci+pzyJuuu@ms@MzTn$4hk%4 zl))Qj5v`QQoeUVO!m-ERjxY4vy!chNH%)F=ARd zuTGIbPLABGm@&~K$w~uEZx;Ack(3}xQW$vaEckw_*Nb&{U2I@ouSL9)O0E>5CI0bp zj~Sx{awY6cjwKJN zWiO_T3A5I=xbQl@9V4|kDe*o4x5z69pIRiS%&63WvfNUiIO@zmzZ=LAMC#_-q9Ouy z)V(W*qEn5HS32A*2(HT(AX^2QJhzI|S*YO%Q_E3%X|MoRK3p=%$ zJ6JS#-9EC+D>gYF9hRF)Wp}_uY6TVIZv44GqsQ$LdIvGEu=p$#&F!yyWe37&@pGWI z`glp@A*yX1)UiMHO4mrmbM(R_NdGYOUO{dyQBrXLWOCTbK3hTkEimYExOt%vVq=_% zOPoEKm+IdF0wmHpyMK$7KaE4$_S7d){Xxs`?=6?DYmiG=MEbt&7bxfgNVp~26ktvJl4XGB6;|F?oh;)x;q`>HAOb{5|AWAAYIu!&Ih9Wh(r9nU#NP|iZ>Cqk1Qqt*Y z_WJ)$zUz9A-skv)NCI4MpgO(D%;>EZIsK z#wYfkfWmLpEnPQeLY2Vy@h?@ZR;(kaL96*RvsN!##StYxhabIi)nWXylrr&*^jGPV z?&j!UT*w##q#LE0fEurK{q+zw_UWClDF5?BvW%AL&J9o2m1$ZQN$_9$tE>ZQ${w0~ zkB*Jt81ZLqmuSUnt-_1#XLf4Y)sB9kp@QVuf6DG25*YqEs(AxM8Xt=12b=jnnW zqv!(t|h6V{=8gC^zE-XPT855i}6}UOrICjd^kC>cWv=ZS3no9+}-O~Q(I&8 z2qX>Ipq?T^cK+-hyqVl@fav~QMr45-iBHnI`vMxf{tgioN=3+BcBU%wVnas1aE|i; zuj#b6ndKH%&IdNZW%&G;()9DPAoQ}A*PE>ULDIy0VEipnQJp&?sg=h#7pn51NQoxN zkoJmrfueml8&ol}-xXR*^jtO$!qq^A!6ZEh+;u=mX?D$1+?v!B%3IfUe6Z*@q+Gx99cF zIsUp~Pgk@P8ysQ(g6G3~lm}6Ym8iY;IrN-ltDJ5b$iDR3&WDNIyG>sWoC`4dy%WH? z-YF18E2cLZpItJ1^-`8&KSHuBeK5s60BpZHc?aMQ@o@sdZhhLM(77)^BHJYk*L``7 zpFN?fhb&jWRw>ZqN)3o&j$Fs}#a_I(s?A!_HfpHx#F@?4$6F(G1HdIU|D-lZT3Ih7 z4I!V=Drgqw(Yvt7G0m};px#T_r*l?tL-bj-qJnJ<9eIA2g*Gj>QaUS&`Ft6=1CX?& zc{`^S>EcHW|C{Gv@S+ECmgzpY$DbJ7ZhY#%xi$mI-nUyCvd^t+$W~5l(UVfgY~2qw zzc7ZMcmX=dP`9LtsAh|lQ*C3bCxBMOCz&y=E%&VW zYsJ=8pG*vN;BkZxWt5MI?NMd4*`(w&OYdD~l^O`X<`<5nzDS1^dw0z|+`JnV+pW*I zhS1@?a{Pv9GTMBYM47pND-jaUFEsj4r~4W{hdLAL7038qX|^k84q)HK5~AQi!jgl^ zUE6`md8ubl?kmlER%K3Me#=VrvbGWzLZ?)<{c! z>Ki7~@&S*!_yQj`QH|RC5Gx>MsN3K;6%gk0=Omj>Y|fYZkGJBQ#?}JUH(REP*CHH( zjPJ{pUaI6@dJhq;Pr1%W;x=Qs{$ag=*1p1|t?ige102g~DjGy;O8Dm)v=UwLP}9dg ze2G+bIKI~_HO0e3LQDu5bL zC3FcE28TOU?kVu1our-QqwB9W?v+DJaC7=cVLF67&PUXl>oj%B<`3J~6WXkQmr)k^ zw=g|G>r#+@hkJnaue@Rl2I(*VGvoN`<#DNTQDd`^ zH0fg7&xTQb9P-oLwwYw#aJwJdv78J(wu)~|D$<>$xyfRJHiYJi!_r$KYD(r7+~>P<|>GPaE89cdfBFPCSo(& zru0|^{1Zu_1P!CrOIPv5M*}pdG@XxPw!?@zJz!dT@n*9*300=Ukyda*7SAncFpgYF zx9h|jO+_B4@Y1UGr{q$Iq4qTYVId;7DTmk4Y;yR^_K>3?nmWrBJB@^h>1RG*2ZxMM zRPm{B-8{8Am-f%Oa>4_!t!JvnDh154aT^uqF`FP<_P@cM`*X3gn=A^7kM5D#?R zeZC=UF(`2ltEv>H>;4(B1Hu0x)74JI5gu&~)|%yWbd5*c4>a;8ptuSCYf%)`Jz_0C zyiluFQnrS2NQgG<6aO>)Cz(VUOq+7p5RAfS*~0CQwn^e3y$dHi>W>N%ZbzRX89jRelY@x$ACV?^NOGe_mL- zPdGY^#KAynv|F0^KwT_`y<9&>sun=GK~A8No`@S#*p5ul|Du7F!_#1(N!2cO2fk}6f5ATeHQA*lWH+U3q|JgDrj-$K6hL=G@!Sn4d716LXncO$?}u}aMlxiB^ z!BIb=^6gQD;KxRj{FABngpnPes{E&iu4G~<8zxUURFM!D z5)NGDqVidk-QabVm}`+vkK_zo-3S`Xx0v7IoAUJTa^tMO+?#NsB$8fnSeM^zS9>l8 zJ0DgR5;zwa_ptQPfXpcXNqjXtDiO=@bK< z2)+-tjFvH$b=6TDg#2FBE*w47m>>mi~lh^f@bY0mG`P6*s=eQtriR`qFfg} zn_jr#`|fQ^_sjt;Y?E+{n5<8@d*_2(5b^56{qLDQ`v~Pd^rO3M$kUwAYKUsCMrSM4 zDr17>aaB6I-+x>G>-hh-&=H4oM~lrL6tkMTY0Mn`p@Ay?ivHSxss0s;fyx-Wh0sMz zne4I1<%0e8qra+4@@F}V^ow^p9*2K-?MHj9OPYO^=ML6Qwr|fPv9QOcanom*#> zj5MDE5?gt<6&Gq+y>>bdW4yUo^I3dOtyzU@Q4HM1T5s10&lqpG2%a-t__TZ!Z3 zoJ9Z#em@KrH1ftTfYMV_H&aoq{Bz3U4aMMFG5x$y4q>JCC;1*9*+TV(S58MmZ&B5c zD&FaRbu?l{&;o< zT}}#yW2XK1hMWR;B$pdcq%{j{HG~3!O3W1~@>EFL>-;v65^0^xCp1r&+qfMT#<3>VjoY&64Nq=zW lZb@m_#|E|nFXs`g8}oj7MkI@U7GD2 arguments = null) - { - new InDepthAnalysisForm().Show(); - } - - internal static string HelpPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Help.chm"); - - internal static void SetShowHelp(Form dialog, HelpProvider helpProvider) - { - helpProvider.HelpNamespace = HelpPath; - helpProvider.SetShowHelp(dialog, true); - } - } -} diff --git a/EM_Plugins/InDepthAnalysis/InDepthAnalysis.csproj b/EM_Plugins/InDepthAnalysis/InDepthAnalysis.csproj deleted file mode 100644 index 8cdc958..0000000 --- a/EM_Plugins/InDepthAnalysis/InDepthAnalysis.csproj +++ /dev/null @@ -1,203 +0,0 @@ - - - - - Debug - AnyCPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1} - Library - Properties - InDepthAnalysis - InDepthAnalysis - v4.6.2 - 512 - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - InDepthAnalysis.ico - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - 7.3 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - 7.3 - prompt - MinimumRecommendedRules.ruleset - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - 7.3 - prompt - MinimumRecommendedRules.ruleset - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - 7.3 - prompt - MinimumRecommendedRules.ruleset - - - - - - - - - - - - - - - - - Form - - - SelectBaselinesReforms.cs - - - Form - - - CategoryDescriptionsForm.cs - - - - - - - - Form - - - InDepthAnalysisForm.cs - - - - True - True - Resources.resx - - - - Form - - - SettingsDistributional.cs - - - Form - - - SettingsInequalityAndPoverty.cs - - - Form - - - SettingsFiscal.cs - - - - - - {3f552049-a3a8-4afc-aa44-ccb648ff76a1} - EM_Transformer - - - {9cfaccaa-f897-480f-b05f-c6087c3ef15f} - EM_Common_Win - - - {E2C621C4-310A-4804-B6C7-570C5FA2F5D6} - EM_Common - - - {99f3f2d4-97ea-4c33-920e-4b1bf967b84c} - EM_Statistics - - - {f6689be6-849b-428d-819f-a4bc88d30a3c} - EM_XmlHandler - - - {ad2118d1-21fa-4a08-bc61-faaffa92f40f} - StatisticsPresenter - - - - - - - Always - - - - - - - - SelectBaselinesReforms.cs - - - CategoryDescriptionsForm.cs - - - InDepthAnalysisForm.cs - - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - - - SettingsDistributional.cs - - - SettingsInequalityAndPoverty.cs - - - SettingsFiscal.cs - - - - - \ No newline at end of file diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/InDepthHelpMaker.csproj b/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/InDepthHelpMaker.csproj deleted file mode 100644 index c73e0d1..0000000 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/InDepthHelpMaker.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - Exe - netcoreapp3.1 - - - diff --git a/EM_Plugins/InDepthAnalysis/Properties/AssemblyInfo.cs b/EM_Plugins/InDepthAnalysis/Properties/AssemblyInfo.cs deleted file mode 100644 index f4403b2..0000000 --- a/EM_Plugins/InDepthAnalysis/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,37 +0,0 @@ -using InDepthAnalysis; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("InDepthAnalysis")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("InDepthAnalysis")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("5fc7b122-c93e-4613-9635-8d6714e9cab1")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion(Settings.VERSION_FOR_ASSEMBLY)] -[assembly: AssemblyFileVersion(Settings.VERSION_FOR_ASSEMBLY)] diff --git a/EM_Plugins/InDepthAnalysis/Properties/Resources.Designer.cs b/EM_Plugins/InDepthAnalysis/Properties/Resources.Designer.cs deleted file mode 100644 index 04737da..0000000 --- a/EM_Plugins/InDepthAnalysis/Properties/Resources.Designer.cs +++ /dev/null @@ -1,103 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace InDepthAnalysis.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("InDepthAnalysis.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap existing { - get { - object obj = ResourceManager.GetObject("existing", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized string similar to <Template> - /// <TemplateInfo> - /// <Name><![CDATA[In-depth Analysis]]></Name> - /// <Title><![CDATA[In-depth Analysis]]></Title> - /// <Button>[baseCountry]</Button> - /// <Description></Description> - /// <GeneralDescription><![CDATA[ - /// <p style='line-height:1.5;color:Tomato;font-size:20px'><b>Common concepts</b></p> - /// <p style='line-height:1.5'><span style='color:Tomato;font-size:14px'><b>Formulas</b></span><br> - /// allow for the following components:</p> - /// <ul style='line-height:1.5'> - /// <li><span [rest of string was truncated]";. - /// - internal static string InDepthAnalysis { - get { - return ResourceManager.GetString("InDepthAnalysis", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap missing { - get { - object obj = ResourceManager.GetObject("missing", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/EM_Plugins/InDepthAnalysis/app.config b/EM_Plugins/InDepthAnalysis/app.config deleted file mode 100644 index 46427da..0000000 --- a/EM_Plugins/InDepthAnalysis/app.config +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/EM_Plugins/Income List Components/InputForm.Designer.cs b/EM_Plugins/Income List Components/InputForm.Designer.cs index 658835d..d77dff9 100644 --- a/EM_Plugins/Income List Components/InputForm.Designer.cs +++ b/EM_Plugins/Income List Components/InputForm.Designer.cs @@ -44,9 +44,9 @@ private void InitializeComponent() this.panel3.Controls.Add(this.btnOpenFolder); this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; this.panel3.Location = new System.Drawing.Point(0, 41); - this.panel3.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panel3.Margin = new System.Windows.Forms.Padding(2); this.panel3.Name = "panel3"; - this.panel3.Size = new System.Drawing.Size(419, 83); + this.panel3.Size = new System.Drawing.Size(419, 82); this.panel3.TabIndex = 21; // // inputPath @@ -54,7 +54,7 @@ private void InitializeComponent() this.inputPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.inputPath.Location = new System.Drawing.Point(2, 3); - this.inputPath.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.inputPath.Margin = new System.Windows.Forms.Padding(2); this.inputPath.Name = "inputPath"; this.inputPath.Size = new System.Drawing.Size(390, 20); this.inputPath.TabIndex = 19; @@ -63,7 +63,7 @@ private void InitializeComponent() // this.btnOpenFolder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnOpenFolder.Location = new System.Drawing.Point(396, 2); - this.btnOpenFolder.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.btnOpenFolder.Margin = new System.Windows.Forms.Padding(2); this.btnOpenFolder.Name = "btnOpenFolder"; this.btnOpenFolder.Size = new System.Drawing.Size(21, 20); this.btnOpenFolder.TabIndex = 18; @@ -78,7 +78,7 @@ private void InitializeComponent() this.labelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.Vertical; this.labelControl1.Dock = System.Windows.Forms.DockStyle.Top; this.labelControl1.Location = new System.Drawing.Point(0, 0); - this.labelControl1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.labelControl1.Margin = new System.Windows.Forms.Padding(2); this.labelControl1.Name = "labelControl1"; this.labelControl1.Padding = new System.Windows.Forms.Padding(8, 16, 8, 8); this.labelControl1.Size = new System.Drawing.Size(419, 41); @@ -89,8 +89,8 @@ private void InitializeComponent() // this.panel1.Controls.Add(this.button1); this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(0, 76); - this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panel1.Location = new System.Drawing.Point(0, 75); + this.panel1.Margin = new System.Windows.Forms.Padding(2); this.panel1.Name = "panel1"; this.panel1.Size = new System.Drawing.Size(419, 48); this.panel1.TabIndex = 23; @@ -100,7 +100,7 @@ private void InitializeComponent() this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.button1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.button1.Location = new System.Drawing.Point(294, 4); - this.button1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.button1.Margin = new System.Windows.Forms.Padding(2); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(98, 36); this.button1.TabIndex = 0; @@ -112,11 +112,11 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(419, 124); + this.ClientSize = new System.Drawing.Size(419, 123); this.Controls.Add(this.panel1); this.Controls.Add(this.panel3); this.Controls.Add(this.labelControl1); - this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Margin = new System.Windows.Forms.Padding(2); this.MaximumSize = new System.Drawing.Size(1504, 162); this.MinimumSize = new System.Drawing.Size(304, 162); this.Name = "InputForm"; diff --git a/EM_Plugins/StatisticsPresenter/App.config b/EM_Plugins/StatisticsPresenter/App.config deleted file mode 100644 index b87bb5a..0000000 --- a/EM_Plugins/StatisticsPresenter/App.config +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/EM_Plugins/StatisticsPresenter/Properties/AssemblyInfo.cs b/EM_Plugins/StatisticsPresenter/Properties/AssemblyInfo.cs deleted file mode 100644 index 3fc8a3e..0000000 --- a/EM_Plugins/StatisticsPresenter/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("StatisticsPresenter")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("StatisticsPresenter")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2019")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ad2118d1-21fa-4a08-bc61-faaffa92f40f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/EM_Plugins/StatisticsPresenter/Resources.Designer.cs b/EM_Plugins/StatisticsPresenter/Resources.Designer.cs deleted file mode 100644 index bd99c94..0000000 --- a/EM_Plugins/StatisticsPresenter/Resources.Designer.cs +++ /dev/null @@ -1,79 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace StatisticsPresenter { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("StatisticsPresenter.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to <!DOCTYPE html> - ///<html> - ///<head> - /// <meta http-equiv="X-UA-Compatible" content="IE=10" /> <!-- instead of IE4 use version 10 of Internet Explorer, or the installed version, if lower --> - /// <meta charset="UTF-8" /> - ///</head> - ///<body></body> - ///</html>. - /// - internal static string dummy_html { - get { - return ResourceManager.GetString("dummy_html", resourceCulture); - } - } - } -} diff --git a/EM_Plugins/StatisticsPresenter/Resources.resx b/EM_Plugins/StatisticsPresenter/Resources.resx deleted file mode 100644 index 2f0ebac..0000000 --- a/EM_Plugins/StatisticsPresenter/Resources.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Resources\dummy.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - \ No newline at end of file diff --git a/EM_Plugins/StatisticsPresenter/StatisticsPresenter.csproj b/EM_Plugins/StatisticsPresenter/StatisticsPresenter.csproj deleted file mode 100644 index b948d2f..0000000 --- a/EM_Plugins/StatisticsPresenter/StatisticsPresenter.csproj +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - - - - - Debug - AnyCPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F} - Library - Properties - StatisticsPresenter - StatisticsPresenter - v4.6.2 - 512 - true - - - - - true - full - false - bin\x64\Debug\ - DEBUG;TRACE - prompt - 4 - x64 - - - pdbonly - true - bin\x64\Release\ - TRACE - prompt - 4 - x64 - - - StatisticsPresenter.ico - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - - - bin\x86\Release\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - - - - ..\..\packages\Microsoft.AspNetCore.Connections.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll - - - ..\..\packages\Microsoft.AspNetCore.Hosting.2.2.7\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.dll - - - ..\..\packages\Microsoft.AspNetCore.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll - - - ..\..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll - - - ..\..\packages\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll - - - ..\..\packages\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll - - - ..\..\packages\Microsoft.AspNetCore.Http.Extensions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll - - - ..\..\packages\Microsoft.AspNetCore.Http.Features.3.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll - - - ..\..\packages\Microsoft.AspNetCore.Server.Kestrel.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.dll - - - ..\..\packages\Microsoft.AspNetCore.Server.Kestrel.Core.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Core.dll - - - ..\..\packages\Microsoft.AspNetCore.Server.Kestrel.Https.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Https.dll - - - ..\..\packages\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll - - - ..\..\packages\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.2.2.1\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll - - - ..\..\packages\Microsoft.AspNetCore.StaticFiles.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.StaticFiles.dll - - - ..\..\packages\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll - - - ..\..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.FileExtensions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.FileExtensions.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.3.1.2\lib\net461\Microsoft.Extensions.DependencyInjection.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.FileProviders.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.FileProviders.Physical.3.1.2\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Physical.dll - - - ..\..\packages\Microsoft.Extensions.FileSystemGlobbing.3.1.2\lib\netstandard2.0\Microsoft.Extensions.FileSystemGlobbing.dll - - - ..\..\packages\Microsoft.Extensions.Hosting.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.ObjectPool.3.1.2\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll - - - ..\..\packages\Microsoft.Extensions.Options.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\..\packages\Microsoft.Extensions.WebEncoders.3.1.2\lib\netstandard2.0\Microsoft.Extensions.WebEncoders.dll - - - ..\..\packages\Microsoft.Net.Http.Headers.2.2.8\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll - - - ..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll - - - - ..\..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.Collections.Immutable.1.7.0\lib\netstandard2.0\System.Collections.Immutable.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.7.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - ..\..\packages\System.Diagnostics.DiagnosticSource.4.7.0\lib\net46\System.Diagnostics.DiagnosticSource.dll - - - - ..\..\packages\System.IO.Pipelines.4.7.0\lib\netstandard2.0\System.IO.Pipelines.dll - - - ..\..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Reflection.Metadata.1.8.0\lib\netstandard2.0\System.Reflection.Metadata.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.7.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - ..\..\packages\System.Security.Cryptography.Cng.4.7.0\lib\net462\System.Security.Cryptography.Cng.dll - - - ..\..\packages\System.Text.Encodings.Web.4.7.0\lib\netstandard2.0\System.Text.Encodings.Web.dll - - - ..\..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - - - - - - - - - - Form - - - PresenterForm.cs - - - - True - True - Resources.resx - - - Form - - - SelectBaseAltsForm.cs - - - Form - - - SelectDefaultTemplateComboForm.cs - - - Form - - - SelectFilesForm.cs - - - Form - - - SelectPackagesForm.cs - - - Form - - - ShowInfoForm.cs - - - - Form - - - TakeUserInput.cs - - - - - - {5127e346-709c-4760-ad9c-81fc4859a3ef} - EM_BackEnd - - - {9cfaccaa-f897-480f-b05f-c6087c3ef15f} - EM_Common_Win - - - {b6e0e449-682d-4e76-b41b-ce98b106fd7c} - EM_Common - - - {99f3f2d4-97ea-4c33-920e-4b1bf967b84c} - EM_Statistics - - - - - - - - - PresenterForm.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - - - SelectBaseAltsForm.cs - - - SelectDefaultTemplateComboForm.cs - - - SelectFilesForm.cs - - - SelectPackagesForm.cs - - - ShowInfoForm.cs - - - TakeUserInput.cs - - - - - - - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - \ No newline at end of file diff --git a/EM_Plugins/StatisticsPresenter/packages.config b/EM_Plugins/StatisticsPresenter/packages.config deleted file mode 100644 index fc072a6..0000000 --- a/EM_Plugins/StatisticsPresenter/packages.config +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/EM_Plugins/Web Statistics/OutputForm.Designer.cs b/EM_Plugins/Web Statistics/OutputForm.Designer.cs index 86ff2a7..8d664d8 100644 --- a/EM_Plugins/Web Statistics/OutputForm.Designer.cs +++ b/EM_Plugins/Web Statistics/OutputForm.Designer.cs @@ -40,17 +40,19 @@ private void InitializeComponent() // this.panel1.Controls.Add(this.button1); this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(0, 697); + this.panel1.Location = new System.Drawing.Point(0, 566); + this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(1280, 59); + this.panel1.Size = new System.Drawing.Size(960, 48); this.panel1.TabIndex = 24; // // button1 // this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.button1.Location = new System.Drawing.Point(1113, 5); + this.button1.Location = new System.Drawing.Point(835, 4); + this.button1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(130, 44); + this.button1.Size = new System.Drawing.Size(98, 36); this.button1.TabIndex = 0; this.button1.Text = "OK"; this.button1.UseVisualStyleBackColor = true; @@ -58,9 +60,10 @@ private void InitializeComponent() // // spreadsheetControl // - this.spreadsheetControl.Location = new System.Drawing.Point(12, 396); + this.spreadsheetControl.Location = new System.Drawing.Point(9, 322); + this.spreadsheetControl.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.spreadsheetControl.Name = "spreadsheetControl"; - this.spreadsheetControl.Size = new System.Drawing.Size(364, 268); + this.spreadsheetControl.Size = new System.Drawing.Size(273, 218); this.spreadsheetControl.TabIndex = 1; this.spreadsheetControl.Text = "spreadsheetControl1"; this.spreadsheetControl.Visible = false; @@ -72,30 +75,34 @@ private void InitializeComponent() this.labelControl1.AutoSizeMode = DevExpress.XtraEditors.LabelAutoSizeMode.None; this.labelControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.labelControl1.Location = new System.Drawing.Point(0, 0); + this.labelControl1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.labelControl1.Name = "labelControl1"; - this.labelControl1.Padding = new System.Windows.Forms.Padding(10, 20, 10, 10); - this.labelControl1.Size = new System.Drawing.Size(1280, 697); + this.labelControl1.Padding = new System.Windows.Forms.Padding(8, 16, 8, 8); + this.labelControl1.Size = new System.Drawing.Size(960, 566); this.labelControl1.TabIndex = 26; this.labelControl1.Text = "The Web Statistics report has been generated!\r\n\r\nLook under \"My Documents\"...\r\n"; + // // spreadsheetControlReader // - this.spreadsheetControlReader.Location = new System.Drawing.Point(38, 30); + this.spreadsheetControlReader.Location = new System.Drawing.Point(28, 24); + this.spreadsheetControlReader.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.spreadsheetControlReader.Name = "spreadsheetControlReader"; - this.spreadsheetControlReader.Size = new System.Drawing.Size(364, 268); + this.spreadsheetControlReader.Size = new System.Drawing.Size(273, 218); this.spreadsheetControlReader.TabIndex = 27; this.spreadsheetControlReader.Text = "spreadsheetControl1"; this.spreadsheetControlReader.Visible = false; // // OutputForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1280, 756); + this.ClientSize = new System.Drawing.Size(960, 614); this.Controls.Add(this.spreadsheetControlReader); this.Controls.Add(this.spreadsheetControl); this.Controls.Add(this.labelControl1); this.Controls.Add(this.panel1); + this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.Name = "OutputForm"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; diff --git a/EM_Plugins/Web Statistics/OutputForm.cs b/EM_Plugins/Web Statistics/OutputForm.cs index 62e80cd..fd2464b 100644 --- a/EM_Plugins/Web Statistics/OutputForm.cs +++ b/EM_Plugins/Web Statistics/OutputForm.cs @@ -294,6 +294,7 @@ internal void generateWebStatistics() createPovertyRiskSheet(wb, titleYears); createPovertyGapSheet(wb, titleYears); createPovertyLinesSheet(wb, titleYears); + createNrrSheet(wb, titleYears); createMetrSheet(wb, titleYears); ws = wb.Worksheets.Add("Datasets"); setDefaultSheetStyle(ws); @@ -306,6 +307,7 @@ internal void generateWebStatistics() int gap_row = 4; int lines_row = 4; int metr_row = 5; + int nrr_row = 5; int pop_row = 3; foreach (EM_Country country in Plugin.countries) { @@ -322,6 +324,8 @@ internal void generateWebStatistics() ws.Cells[gap_row, 0].Value = country.name; ws = wb.Worksheets["Poverty lines"]; ws.Cells[lines_row, 0].Value = country.name; + ws = wb.Worksheets["NRR"]; + ws.Cells[nrr_row, 0].Value = country.name; ws = wb.Worksheets["METR"]; ws.Cells[metr_row, 0].Value = country.name; ws = wb.Worksheets["Population"]; @@ -482,7 +486,7 @@ internal void generateWebStatistics() ws.Cells[lines_row, 1].Value = yrStr; ws.Cells[lines_row, 2].Value = double.Parse(wsin.Cells[33,1].Value.ToString()); lines_row++; - + // add the METR data ws = wb.Worksheets["METR"]; ws.Rows[risk_row].RowHeight *= 0.90; @@ -499,6 +503,22 @@ internal void generateWebStatistics() ws.Cells[metr_row, 8].Value = double.Parse(wsin.Cells[45,7].Value.ToString()); metr_row++; + // add the NRR data + ws = wb.Worksheets["NRR"]; + ws.Rows[risk_row].RowHeight *= 0.90; + setCellStyle(ws.Cells[gini_row, 1], "Normal", false, "c", "b"); + setCellStyle(ws.Range.FromLTRB(2, gini_row, 5, gini_row), "Normal", false, "r", "b", "", "#,##0.00"); + setCellStyle(ws.Range.FromLTRB(5, gini_row, 8, gini_row), "Normal", false, "r", "b", "", "#,##0"); + ws.Cells[nrr_row, 1].Value = yrStr; + ws.Cells[nrr_row, 2].Value = double.Parse(wsin.Cells[49, 1].Value.ToString()); + ws.Cells[nrr_row, 3].Value = double.Parse(wsin.Cells[49, 2].Value.ToString()); + ws.Cells[nrr_row, 4].Value = double.Parse(wsin.Cells[49, 3].Value.ToString()); + ws.Cells[nrr_row, 5].Value = double.Parse(wsin.Cells[49, 4].Value.ToString()); + ws.Cells[nrr_row, 6].Value = double.Parse(wsin.Cells[49, 5].Value.ToString()); + ws.Cells[nrr_row, 7].Value = double.Parse(wsin.Cells[49, 6].Value.ToString()); + ws.Cells[nrr_row, 8].Value = double.Parse(wsin.Cells[49, 7].Value.ToString()); + nrr_row++; + // add the Population data ws = wb.Worksheets["Population"]; ws.Rows[pop_row].RowHeight *= 0.90; @@ -515,6 +535,7 @@ internal void generateWebStatistics() wb.Worksheets["Poverty risk"].Range.FromLTRB(0, risk_row - 1, 8, risk_row - 1).Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; wb.Worksheets["Poverty gap"].Range.FromLTRB(0, gap_row - 1, 8, gap_row - 1).Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; wb.Worksheets["Poverty lines"].Range.FromLTRB(0, lines_row - 1, 2, lines_row - 1).Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; + wb.Worksheets["NRR"].Range.FromLTRB(0, nrr_row - 1, 8, nrr_row - 1).Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; wb.Worksheets["METR"].Range.FromLTRB(0, metr_row - 1, 8, metr_row - 1).Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; wb.Worksheets["Population"].Range.FromLTRB(0, pop_row - 1, 3, pop_row - 1).Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; @@ -713,6 +734,17 @@ internal void generateWebStatistics() ws.Cells[lines_row + 4, 0].Value = "Source: EUROMOD version no. " + Plugin.euromod_version; ws.Cells[lines_row + 5, 0].Value = "Last updated " + DateTime.Now.ToShortDateString(); + // then do the Notes for NRR + ws = wb.Worksheets["NRR"]; + nrr_row++; + ws.Cells[nrr_row, 0].Value = "Notes:"; + setCellStyle(ws.Cells[nrr_row, 0], "Title"); + ws.Cells[nrr_row + 1, 0].Value = "The NRR Add-On simulates disposable income in case of unemployment for all people currently in work (i.e. all people observed with positive earnings in the data). The net replacement rate measures the proportion of household disposable income that is maintained after an individual gets unemployment. The net replacement rate can be negative (e.g. in case of an obligatory SIC) or exceed 100% (indicating that a person is better off if not working)."; + ws.Range.FromLTRB(0, nrr_row + 1, 5, nrr_row + 1).Merge(); + setCellStyle(ws.Range.FromLTRB(0, nrr_row + 1, 5, nrr_row + 1), "Normal", true); + setRowAutoHeight(ws, nrr_row + 1, 0, 5); + ws.Cells[nrr_row + 3, 0].Value = "Source: EUROMOD version no. " + Plugin.euromod_version; + ws.Cells[nrr_row + 4, 0].Value = "Last updated " + DateTime.Now.ToShortDateString(); // then do the Notes for METR ws = wb.Worksheets["METR"]; @@ -1056,6 +1088,57 @@ private void createMetrSheet(IWorkbook wb, string titleYears) ws.Columns[8].WidthInPixels = 100; } + private void createNrrSheet(IWorkbook wb, string titleYears) + { + Worksheet ws = wb.Worksheets.Add("NRR"); + setDefaultSheetStyle(ws); + ws.Cells[0, 0].Value = "Net Replacement Rate, " + titleYears + " policies"; + setCellStyle(ws.Cells[0, 0], "Header"); + ws.Range["A2:I2"].Borders.BottomBorder.LineStyle = BorderLineStyle.Medium; + ws.Cells[2, 0].Value = "Countries"; + ws.Range["A3:A5"].Merge(); + setCellStyle(ws.Range["A3:A5"], "Normal", false, "l", "c", "b2"); + ws.Cells[2, 1].Value = "Policy Year"; + ws.Range["B3:B5"].Merge(); + setCellStyle(ws.Range["B3:B5"], "Normal", false, "c", "c", "b2"); + ws.Cells[2, 2].Value = "Net Replacement Rate (NRR)"; + ws.Range["C3:F3"].Merge(); + setCellStyle(ws.Range["C3:F3"], "Bold", false, "c", "c", "b1"); + ws.Range["G3:I3"].Borders.BottomBorder.LineStyle = BorderLineStyle.Thin; + ws.Cells[3, 2].Value = "mean"; + ws.Range["C4:C5"].Merge(); + setCellStyle(ws.Range["C4:C5"], "Normal", false, "r", "c", "b2"); + ws.Cells[3, 3].Value = "median"; + ws.Range["D4:D5"].Merge(); + setCellStyle(ws.Range["D4:D5"], "Normal", false, "r", "c", "b2"); + ws.Cells[3, 4].Value = "percentiles"; + ws.Range["E4:F4"].Merge(); + setCellStyle(ws.Range["E4:F4"], "Normal", false, "c", "c"); + ws.Cells[4, 4].Value = "25%"; + setCellStyle(ws.Cells[4, 4], "Normal", false, "r", "c", "b2"); + ws.Cells[4, 5].Value = "75%"; + setCellStyle(ws.Cells[4, 5], "Normal", false, "r", "c", "b2"); + ws.Cells[3, 6].Value = "active population"; + setCellStyle(ws.Cells[3, 6], "Red", false, "c", "c"); + ws.Cells[4, 6].Value = "unweighted"; + setCellStyle(ws.Cells[4, 6], "Red", false, "c", "c", "b2"); + ws.Cells[3, 7].Value = "numb. Obs."; + setCellStyle(ws.Cells[3, 7], "Red", false, "c", "c"); + ws.Cells[4, 7].Value = "NRR<0"; + setCellStyle(ws.Cells[4, 7], "Red", false, "c", "c", "b2"); + ws.Cells[3, 8].Value = "numb. Obs."; + setCellStyle(ws.Cells[3, 8], "Red", false, "c", "c"); + ws.Cells[4, 8].Value = "NRR>100"; + setCellStyle(ws.Cells[4, 8], "Red", false, "c", "c", "b2"); + ws.Rows[2].RowHeight *= 2; + ws.Rows[3].RowHeight *= 1.2; + ws.Rows[4].RowHeight *= 1.2; + ws.Columns[0].WidthInPixels = 120; + ws.Columns[6].WidthInPixels = 120; + ws.Columns[7].WidthInPixels = 100; + ws.Columns[8].WidthInPixels = 100; + } + private void createPopulationSheet(IWorkbook wb, string titleYears) { Worksheet ws = wb.Worksheets.Add("Population"); @@ -1076,5 +1159,6 @@ private void createPopulationSheet(IWorkbook wb, string titleYears) ws.Columns[2].WidthInPixels = 120; ws.Columns[3].WidthInPixels = 140; } + } } diff --git a/EM_UI/Actions/CopySystemAction.cs b/EM_UI/Actions/CopySystemAction.cs index 96f8144..703d97b 100644 --- a/EM_UI/Actions/CopySystemAction.cs +++ b/EM_UI/Actions/CopySystemAction.cs @@ -116,6 +116,8 @@ internal static void RenameInputOutputFiles(CountryConfigFacade countryConfigFac select f; foreach (CountryConfig.FunctionRow functionRow in functionRows) { + bool autoRenameParam = countryConfigFacade.GetParameterBoolValue(functionRow, DefPar.DefOutput.AutoRenameWhenCopying); + if (!autoRenameParam) continue; //within these functions search for parameter File List parameterRows = countryConfigFacade.GetParameterRowsByName(functionRow.ID, DefPar.DefOutput.File); diff --git a/EM_UI/Actions/SetSelectionPrivateStateAction.cs b/EM_UI/Actions/SetSelectionPrivateStateAction.cs index e5addb5..2febfec 100644 --- a/EM_UI/Actions/SetSelectionPrivateStateAction.cs +++ b/EM_UI/Actions/SetSelectionPrivateStateAction.cs @@ -23,23 +23,63 @@ internal override void PerformAction() FunctionTreeListTag funTag = node.Tag as FunctionTreeListTag; ParameterTreeListTag parTag = node.Tag as ParameterTreeListTag; - if (polTag != null) + if (node.StateImageIndex != DefGeneral.IMAGE_IND_INCONS) //It is not the node affected by an inconsistency { - foreach (CountryConfig.PolicyRow policyRow in polTag.GetPolicyRows()) - policyRow.Private = policyRow.Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; - node.StateImageIndex = polTag.GetDefaultPolicyRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_POL : DefGeneral.IMAGE_IND_POL; - } - else if (funTag != null) - { - foreach (CountryConfig.FunctionRow funRow in funTag.GetFunctionRows()) - funRow.Private = funRow.Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; - node.StateImageIndex = funTag.GetDefaultFunctionRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_FUN : DefGeneral.IMAGE_IND_FUN; + if (polTag != null) + { + foreach (CountryConfig.PolicyRow policyRow in polTag.GetPolicyRows()) + policyRow.Private = policyRow.Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; + if(node.StateImageIndex == DefGeneral.IMAGE_IND_POL_INCONS || node.StateImageIndex == DefGeneral.IMAGE_IND_PRIV_POL_INCONS) + node.StateImageIndex = polTag.GetDefaultPolicyRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_POL_INCONS : DefGeneral.IMAGE_IND_POL_INCONS; + else + node.StateImageIndex = polTag.GetDefaultPolicyRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_POL : DefGeneral.IMAGE_IND_POL; + } + else if (funTag != null) + { + foreach (CountryConfig.FunctionRow funRow in funTag.GetFunctionRows()) + funRow.Private = funRow.Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; + + if (node.StateImageIndex == DefGeneral.IMAGE_IND_FUN_INCONS || node.StateImageIndex == DefGeneral.IMAGE_IND_PRIV_FUN_INCONS) + node.StateImageIndex = polTag.GetDefaultPolicyRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_FUN_INCONS : DefGeneral.IMAGE_IND_FUN_INCONS; + else + node.StateImageIndex = funTag.GetDefaultFunctionRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_FUN : DefGeneral.IMAGE_IND_FUN; + } + else if (parTag != null) + { + foreach (CountryConfig.ParameterRow parRow in parTag.GetParameterRows()) + parRow.Private = parRow.Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; + node.StateImageIndex = parTag.GetDefaultParameterRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_PAR : -1; + } } - else if (parTag != null) + else //The node is affected by an inconsistency { - foreach (CountryConfig.ParameterRow parRow in parTag.GetParameterRows()) - parRow.Private = parRow.Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; - node.StateImageIndex = parTag.GetDefaultParameterRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_PAR : -1; + if (polTag != null) + { + string oppositeDefaultValue = polTag.GetDefaultPolicyRow().Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; + foreach (CountryConfig.PolicyRow policyRow in polTag.GetPolicyRows()) + policyRow.Private = oppositeDefaultValue; + node.StateImageIndex = polTag.GetDefaultPolicyRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_POL : DefGeneral.IMAGE_IND_POL; + } + else if (funTag != null) + { + string oppositeDefaultValue = funTag.GetDefaultFunctionRow().Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; + foreach (CountryConfig.FunctionRow funRow in funTag.GetFunctionRows()) + funRow.Private = oppositeDefaultValue; + node.StateImageIndex = funTag.GetDefaultFunctionRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_FUN : DefGeneral.IMAGE_IND_FUN; + //Policy also needs to be signaled as consistent now + if (node.ParentNode != null) node.ParentNode.StateImageIndex = node.ParentNode.StateImageIndex == DefGeneral.IMAGE_IND_POL_INCONS ? DefGeneral.IMAGE_IND_POL : DefGeneral.IMAGE_IND_PRIV_POL; + } + else if (parTag != null) + { + string oppositeDefaultValue = parTag.GetDefaultParameterRow().Private == DefPar.Value.YES ? DefPar.Value.NO : DefPar.Value.YES; + foreach (CountryConfig.ParameterRow parRow in parTag.GetParameterRows()) + parRow.Private = oppositeDefaultValue; + node.StateImageIndex = parTag.GetDefaultParameterRow().Private == DefPar.Value.YES ? DefGeneral.IMAGE_IND_PRIV_PAR : -1; + //Function and Policy also needs to be signaled as consistent now + if (node.ParentNode != null) node.ParentNode.StateImageIndex = node.ParentNode.StateImageIndex == DefGeneral.IMAGE_IND_FUN_INCONS ? DefGeneral.IMAGE_IND_FUN : DefGeneral.IMAGE_IND_PRIV_FUN; + if (node.ParentNode.ParentNode != null) node.ParentNode.ParentNode.StateImageIndex = node.ParentNode.ParentNode.StateImageIndex == DefGeneral.IMAGE_IND_POL_INCONS ? DefGeneral.IMAGE_IND_POL : DefGeneral.IMAGE_IND_PRIV_POL; + + } } } } diff --git a/EM_UI/CountryAdministration/CountryAdministrator.cs b/EM_UI/CountryAdministration/CountryAdministrator.cs index f2866f7..69d71b5 100644 --- a/EM_UI/CountryAdministration/CountryAdministrator.cs +++ b/EM_UI/CountryAdministration/CountryAdministrator.cs @@ -24,7 +24,7 @@ internal partial class CountryAdministrator static string _imageExtension = ".png"; - static Country GetCountry(string countryShortName) + static internal Country GetCountry(string countryShortName) { if (!_countries.Keys.Contains(countryShortName.ToLower())) return null; diff --git a/EM_UI/DataSets/CountryConfig.Designer.cs b/EM_UI/DataSets/CountryConfig.Designer.cs index 0c0924b..d505cf7 100644 --- a/EM_UI/DataSets/CountryConfig.Designer.cs +++ b/EM_UI/DataSets/CountryConfig.Designer.cs @@ -56,6 +56,8 @@ public partial class CountryConfig : global::System.Data.DataSet { private IndirectTaxDataTable tableIndirectTax; + private ExternalStatisticDataTable tableExternalStatistic; + private global::System.Data.DataRelation relationFK_ConditionalFormat_ConditionalFormat_Systems; private global::System.Data.DataRelation relationCountry_System; @@ -162,6 +164,9 @@ protected CountryConfig(global::System.Runtime.Serialization.SerializationInfo i if ((ds.Tables["IndirectTax"] != null)) { base.Tables.Add(new IndirectTaxDataTable(ds.Tables["IndirectTax"])); } + if ((ds.Tables["ExternalStatistic"] != null)) { + base.Tables.Add(new ExternalStatisticDataTable(ds.Tables["ExternalStatistic"])); + } this.DataSetName = ds.DataSetName; this.Prefix = ds.Prefix; this.Namespace = ds.Namespace; @@ -340,6 +345,16 @@ public IndirectTaxDataTable IndirectTax { } } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + [global::System.ComponentModel.Browsable(false)] + [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] + public ExternalStatisticDataTable ExternalStatistic { + get { + return this.tableExternalStatistic; + } + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] [global::System.ComponentModel.BrowsableAttribute(true)] @@ -455,6 +470,9 @@ protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) if ((ds.Tables["IndirectTax"] != null)) { base.Tables.Add(new IndirectTaxDataTable(ds.Tables["IndirectTax"])); } + if ((ds.Tables["ExternalStatistic"] != null)) { + base.Tables.Add(new ExternalStatisticDataTable(ds.Tables["ExternalStatistic"])); + } this.DataSetName = ds.DataSetName; this.Prefix = ds.Prefix; this.Namespace = ds.Namespace; @@ -584,6 +602,12 @@ internal void InitVars(bool initTable) { this.tableIndirectTax.InitVars(); } } + this.tableExternalStatistic = ((ExternalStatisticDataTable)(base.Tables["ExternalStatistic"])); + if ((initTable == true)) { + if ((this.tableExternalStatistic != null)) { + this.tableExternalStatistic.InitVars(); + } + } this.relationFK_ConditionalFormat_ConditionalFormat_Systems = this.Relations["FK_ConditionalFormat_ConditionalFormat_Systems"]; this.relationCountry_System = this.Relations["Country_System"]; this.relationSystem_Policy = this.Relations["System_Policy"]; @@ -642,6 +666,8 @@ private void InitClass() { base.Tables.Add(this.tableExtension_Parameter); this.tableIndirectTax = new IndirectTaxDataTable(); base.Tables.Add(this.tableIndirectTax); + this.tableExternalStatistic = new ExternalStatisticDataTable(); + base.Tables.Add(this.tableExternalStatistic); global::System.Data.ForeignKeyConstraint fkc; fkc = new global::System.Data.ForeignKeyConstraint("FK_ConditionalFormat_ConditionalFormat_Systems", new global::System.Data.DataColumn[] { this.tableConditionalFormat.IDColumn}, new global::System.Data.DataColumn[] { @@ -907,6 +933,12 @@ private bool ShouldSerializeIndirectTax() { return false; } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + private bool ShouldSerializeExternalStatistic() { + return false; + } + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) { @@ -1010,6 +1042,9 @@ private void SchemaChanged(object sender, global::System.ComponentModel.Collecti [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] public delegate void IndirectTaxRowChangeEventHandler(object sender, IndirectTaxRowChangeEvent e); + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public delegate void ExternalStatisticRowChangeEventHandler(object sender, ExternalStatisticRowChangeEvent e); + /// ///Represents the strongly named DataTable class. /// @@ -5835,7 +5870,7 @@ public partial class IndirectTaxDataTable : global::System.Data.TypedTableBase - ///Represents strongly named DataRow class. + ///Represents the strongly named DataTable class. /// - public partial class ConditionalFormatRow : global::System.Data.DataRow { + [global::System.Serializable()] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class ExternalStatisticDataTable : global::System.Data.TypedTableBase { - private ConditionalFormatDataTable tableConditionalFormat; + private global::System.Data.DataColumn columnID; + + private global::System.Data.DataColumn columnCategory; + + private global::System.Data.DataColumn columnReference; + + private global::System.Data.DataColumn columnDescription; + + private global::System.Data.DataColumn columnYearValues; + + private global::System.Data.DataColumn columnComment; + + private global::System.Data.DataColumn columnSource; + + private global::System.Data.DataColumn columnTableName; + + private global::System.Data.DataColumn columnDestination; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - internal ConditionalFormatRow(global::System.Data.DataRowBuilder rb) : - base(rb) { - this.tableConditionalFormat = ((ConditionalFormatDataTable)(this.Table)); + public ExternalStatisticDataTable() { + this.TableName = "ExternalStatistic"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string ID { - get { - return ((string)(this[this.tableConditionalFormat.IDColumn])); + internal ExternalStatisticDataTable(global::System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; } - set { - this[this.tableConditionalFormat.IDColumn] = value; + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string BackColor { - get { - if (this.IsBackColorNull()) { - return null; - } - else { - return ((string)(this[this.tableConditionalFormat.BackColorColumn])); - } - } - set { - this[this.tableConditionalFormat.BackColorColumn] = value; - } + protected ExternalStatisticDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string ForeColor { + public global::System.Data.DataColumn IDColumn { get { - if (this.IsForeColorNull()) { - return null; - } - else { - return ((string)(this[this.tableConditionalFormat.ForeColorColumn])); - } - } - set { - this[this.tableConditionalFormat.ForeColorColumn] = value; + return this.columnID; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string Condition { + public global::System.Data.DataColumn CategoryColumn { get { - if (this.IsConditionNull()) { - return null; - } - else { - return ((string)(this[this.tableConditionalFormat.ConditionColumn])); - } - } - set { - this[this.tableConditionalFormat.ConditionColumn] = value; + return this.columnCategory; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string BaseSystemName { + public global::System.Data.DataColumn ReferenceColumn { get { - if (this.IsBaseSystemNameNull()) { - return null; - } - else { - return ((string)(this[this.tableConditionalFormat.BaseSystemNameColumn])); - } - } - set { - this[this.tableConditionalFormat.BaseSystemNameColumn] = value; + return this.columnReference; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public bool IsBackColorNull() { - return this.IsNull(this.tableConditionalFormat.BackColorColumn); + public global::System.Data.DataColumn DescriptionColumn { + get { + return this.columnDescription; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public void SetBackColorNull() { - this[this.tableConditionalFormat.BackColorColumn] = global::System.Convert.DBNull; + public global::System.Data.DataColumn YearValuesColumn { + get { + return this.columnYearValues; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public bool IsForeColorNull() { - return this.IsNull(this.tableConditionalFormat.ForeColorColumn); + public global::System.Data.DataColumn CommentColumn { + get { + return this.columnComment; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public void SetForeColorNull() { - this[this.tableConditionalFormat.ForeColorColumn] = global::System.Convert.DBNull; + public global::System.Data.DataColumn SourceColumn { + get { + return this.columnSource; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public bool IsConditionNull() { - return this.IsNull(this.tableConditionalFormat.ConditionColumn); + public global::System.Data.DataColumn TableNameColumn { + get { + return this.columnTableName; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public void SetConditionNull() { - this[this.tableConditionalFormat.ConditionColumn] = global::System.Convert.DBNull; + public global::System.Data.DataColumn DestinationColumn { + get { + return this.columnDestination; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public bool IsBaseSystemNameNull() { - return this.IsNull(this.tableConditionalFormat.BaseSystemNameColumn); + [global::System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public void SetBaseSystemNameNull() { - this[this.tableConditionalFormat.BaseSystemNameColumn] = global::System.Convert.DBNull; + public ExternalStatisticRow this[int index] { + get { + return ((ExternalStatisticRow)(this.Rows[index])); + } } - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public ConditionalFormat_SystemsRow[] GetConditionalFormat_SystemsRows() { - if ((this.Table.ChildRelations["FK_ConditionalFormat_ConditionalFormat_Systems"] == null)) { - return new ConditionalFormat_SystemsRow[0]; - } - else { - return ((ConditionalFormat_SystemsRow[])(base.GetChildRows(this.Table.ChildRelations["FK_ConditionalFormat_ConditionalFormat_Systems"]))); - } - } - } - - /// - ///Represents strongly named DataRow class. - /// - public partial class ConditionalFormat_SystemsRow : global::System.Data.DataRow { + public event ExternalStatisticRowChangeEventHandler ExternalStatisticRowChanging; - private ConditionalFormat_SystemsDataTable tableConditionalFormat_Systems; + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public event ExternalStatisticRowChangeEventHandler ExternalStatisticRowChanged; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - internal ConditionalFormat_SystemsRow(global::System.Data.DataRowBuilder rb) : - base(rb) { - this.tableConditionalFormat_Systems = ((ConditionalFormat_SystemsDataTable)(this.Table)); - } + public event ExternalStatisticRowChangeEventHandler ExternalStatisticRowDeleting; + + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public event ExternalStatisticRowChangeEventHandler ExternalStatisticRowDeleted; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string ConditionalFormatID { - get { - return ((string)(this[this.tableConditionalFormat_Systems.ConditionalFormatIDColumn])); - } - set { - this[this.tableConditionalFormat_Systems.ConditionalFormatIDColumn] = value; - } + public void AddExternalStatisticRow(ExternalStatisticRow row) { + this.Rows.Add(row); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string SystemName { - get { - return ((string)(this[this.tableConditionalFormat_Systems.SystemNameColumn])); - } - set { - this[this.tableConditionalFormat_Systems.SystemNameColumn] = value; - } + public ExternalStatisticRow AddExternalStatisticRow(string ID, string Category, string Reference, string Description, string YearValues, string Comment, string Source, string TableName, string Destination) { + ExternalStatisticRow rowExternalStatisticRow = ((ExternalStatisticRow)(this.NewRow())); + object[] columnValuesArray = new object[] { + ID, + Category, + Reference, + Description, + YearValues, + Comment, + Source, + TableName, + Destination}; + rowExternalStatisticRow.ItemArray = columnValuesArray; + this.Rows.Add(rowExternalStatisticRow); + return rowExternalStatisticRow; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public ConditionalFormatRow ConditionalFormatRow { - get { - return ((ConditionalFormatRow)(this.GetParentRow(this.Table.ParentRelations["FK_ConditionalFormat_ConditionalFormat_Systems"]))); - } - set { - this.SetParentRow(value, this.Table.ParentRelations["FK_ConditionalFormat_ConditionalFormat_Systems"]); - } + public ExternalStatisticRow FindByID(string ID) { + return ((ExternalStatisticRow)(this.Rows.Find(new object[] { + ID}))); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public SystemRow SystemRow { - get { - return ((SystemRow)(this.GetParentRow(this.Table.ParentRelations["System_ConditionalFormat_Systems"]))); - } - set { - this.SetParentRow(value, this.Table.ParentRelations["System_ConditionalFormat_Systems"]); - } + public override global::System.Data.DataTable Clone() { + ExternalStatisticDataTable cln = ((ExternalStatisticDataTable)(base.Clone())); + cln.InitVars(); + return cln; } - } - - /// - ///Represents strongly named DataRow class. - /// - public partial class CountryRow : global::System.Data.DataRow { - - private CountryDataTable tableCountry; [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - internal CountryRow(global::System.Data.DataRowBuilder rb) : - base(rb) { - this.tableCountry = ((CountryDataTable)(this.Table)); + protected override global::System.Data.DataTable CreateInstance() { + return new ExternalStatisticDataTable(); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string ID { - get { - return ((string)(this[this.tableCountry.IDColumn])); - } - set { - this[this.tableCountry.IDColumn] = value; - } + internal void InitVars() { + this.columnID = base.Columns["ID"]; + this.columnCategory = base.Columns["Category"]; + this.columnReference = base.Columns["Reference"]; + this.columnDescription = base.Columns["Description"]; + this.columnYearValues = base.Columns["YearValues"]; + this.columnComment = base.Columns["Comment"]; + this.columnSource = base.Columns["Source"]; + this.columnTableName = base.Columns["TableName"]; + this.columnDestination = base.Columns["Destination"]; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string Name { - get { - try { - return ((string)(this[this.tableCountry.NameColumn])); - } + private void InitClass() { + this.columnID = new global::System.Data.DataColumn("ID", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnID); + this.columnCategory = new global::System.Data.DataColumn("Category", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnCategory); + this.columnReference = new global::System.Data.DataColumn("Reference", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnReference); + this.columnDescription = new global::System.Data.DataColumn("Description", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnDescription); + this.columnYearValues = new global::System.Data.DataColumn("YearValues", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnYearValues); + this.columnComment = new global::System.Data.DataColumn("Comment", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnComment); + this.columnSource = new global::System.Data.DataColumn("Source", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnSource); + this.columnTableName = new global::System.Data.DataColumn("TableName", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnTableName); + this.columnDestination = new global::System.Data.DataColumn("Destination", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnDestination); + this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] { + this.columnID}, true)); + this.columnID.AllowDBNull = false; + this.columnID.Unique = true; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public ExternalStatisticRow NewExternalStatisticRow() { + return ((ExternalStatisticRow)(this.NewRow())); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { + return new ExternalStatisticRow(builder); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + protected override global::System.Type GetRowType() { + return typeof(ExternalStatisticRow); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.ExternalStatisticRowChanged != null)) { + this.ExternalStatisticRowChanged(this, new ExternalStatisticRowChangeEvent(((ExternalStatisticRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.ExternalStatisticRowChanging != null)) { + this.ExternalStatisticRowChanging(this, new ExternalStatisticRowChangeEvent(((ExternalStatisticRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.ExternalStatisticRowDeleted != null)) { + this.ExternalStatisticRowDeleted(this, new ExternalStatisticRowChangeEvent(((ExternalStatisticRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.ExternalStatisticRowDeleting != null)) { + this.ExternalStatisticRowDeleting(this, new ExternalStatisticRowChangeEvent(((ExternalStatisticRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void RemoveExternalStatisticRow(ExternalStatisticRow row) { + this.Rows.Remove(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + CountryConfig ds = new CountryConfig(); + global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "ExternalStatisticDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + } + + /// + ///Represents strongly named DataRow class. + /// + public partial class ConditionalFormatRow : global::System.Data.DataRow { + + private ConditionalFormatDataTable tableConditionalFormat; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + internal ConditionalFormatRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableConditionalFormat = ((ConditionalFormatDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string ID { + get { + return ((string)(this[this.tableConditionalFormat.IDColumn])); + } + set { + this[this.tableConditionalFormat.IDColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string BackColor { + get { + if (this.IsBackColorNull()) { + return null; + } + else { + return ((string)(this[this.tableConditionalFormat.BackColorColumn])); + } + } + set { + this[this.tableConditionalFormat.BackColorColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string ForeColor { + get { + if (this.IsForeColorNull()) { + return null; + } + else { + return ((string)(this[this.tableConditionalFormat.ForeColorColumn])); + } + } + set { + this[this.tableConditionalFormat.ForeColorColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Condition { + get { + if (this.IsConditionNull()) { + return null; + } + else { + return ((string)(this[this.tableConditionalFormat.ConditionColumn])); + } + } + set { + this[this.tableConditionalFormat.ConditionColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string BaseSystemName { + get { + if (this.IsBaseSystemNameNull()) { + return null; + } + else { + return ((string)(this[this.tableConditionalFormat.BaseSystemNameColumn])); + } + } + set { + this[this.tableConditionalFormat.BaseSystemNameColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsBackColorNull() { + return this.IsNull(this.tableConditionalFormat.BackColorColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetBackColorNull() { + this[this.tableConditionalFormat.BackColorColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsForeColorNull() { + return this.IsNull(this.tableConditionalFormat.ForeColorColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetForeColorNull() { + this[this.tableConditionalFormat.ForeColorColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsConditionNull() { + return this.IsNull(this.tableConditionalFormat.ConditionColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetConditionNull() { + this[this.tableConditionalFormat.ConditionColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsBaseSystemNameNull() { + return this.IsNull(this.tableConditionalFormat.BaseSystemNameColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetBaseSystemNameNull() { + this[this.tableConditionalFormat.BaseSystemNameColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public ConditionalFormat_SystemsRow[] GetConditionalFormat_SystemsRows() { + if ((this.Table.ChildRelations["FK_ConditionalFormat_ConditionalFormat_Systems"] == null)) { + return new ConditionalFormat_SystemsRow[0]; + } + else { + return ((ConditionalFormat_SystemsRow[])(base.GetChildRows(this.Table.ChildRelations["FK_ConditionalFormat_ConditionalFormat_Systems"]))); + } + } + } + + /// + ///Represents strongly named DataRow class. + /// + public partial class ConditionalFormat_SystemsRow : global::System.Data.DataRow { + + private ConditionalFormat_SystemsDataTable tableConditionalFormat_Systems; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + internal ConditionalFormat_SystemsRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableConditionalFormat_Systems = ((ConditionalFormat_SystemsDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string ConditionalFormatID { + get { + return ((string)(this[this.tableConditionalFormat_Systems.ConditionalFormatIDColumn])); + } + set { + this[this.tableConditionalFormat_Systems.ConditionalFormatIDColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string SystemName { + get { + return ((string)(this[this.tableConditionalFormat_Systems.SystemNameColumn])); + } + set { + this[this.tableConditionalFormat_Systems.SystemNameColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public ConditionalFormatRow ConditionalFormatRow { + get { + return ((ConditionalFormatRow)(this.GetParentRow(this.Table.ParentRelations["FK_ConditionalFormat_ConditionalFormat_Systems"]))); + } + set { + this.SetParentRow(value, this.Table.ParentRelations["FK_ConditionalFormat_ConditionalFormat_Systems"]); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public SystemRow SystemRow { + get { + return ((SystemRow)(this.GetParentRow(this.Table.ParentRelations["System_ConditionalFormat_Systems"]))); + } + set { + this.SetParentRow(value, this.Table.ParentRelations["System_ConditionalFormat_Systems"]); + } + } + } + + /// + ///Represents strongly named DataRow class. + /// + public partial class CountryRow : global::System.Data.DataRow { + + private CountryDataTable tableCountry; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + internal CountryRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableCountry = ((CountryDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string ID { + get { + return ((string)(this[this.tableCountry.IDColumn])); + } + set { + this[this.tableCountry.IDColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Name { + get { + try { + return ((string)(this[this.tableCountry.NameColumn])); + } catch (global::System.InvalidCastException e) { throw new global::System.Data.StrongTypingException("The value for column \'Name\' in table \'Country\' is DBNull.", e); } @@ -8439,17 +8844,17 @@ public string ID { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public string Name { + public string Reference { get { try { - return ((string)(this[this.tableIndirectTax.NameColumn])); + return ((string)(this[this.tableIndirectTax.ReferenceColumn])); } catch (global::System.InvalidCastException e) { - throw new global::System.Data.StrongTypingException("The value for column \'Name\' in table \'IndirectTax\' is DBNull.", e); + throw new global::System.Data.StrongTypingException("The value for column \'Reference\' in table \'IndirectTax\' is DBNull.", e); } } set { - this[this.tableIndirectTax.NameColumn] = value; + this[this.tableIndirectTax.ReferenceColumn] = value; } } @@ -8487,14 +8892,14 @@ public string YearValues { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public bool IsNameNull() { - return this.IsNull(this.tableIndirectTax.NameColumn); + public bool IsReferenceNull() { + return this.IsNull(this.tableIndirectTax.ReferenceColumn); } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] - public void SetNameNull() { - this[this.tableIndirectTax.NameColumn] = global::System.Convert.DBNull; + public void SetReferenceNull() { + this[this.tableIndirectTax.ReferenceColumn] = global::System.Convert.DBNull; } [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] @@ -8522,6 +8927,256 @@ public void SetYearValuesNull() { } } + /// + ///Represents strongly named DataRow class. + /// + public partial class ExternalStatisticRow : global::System.Data.DataRow { + + private ExternalStatisticDataTable tableExternalStatistic; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + internal ExternalStatisticRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableExternalStatistic = ((ExternalStatisticDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string ID { + get { + return ((string)(this[this.tableExternalStatistic.IDColumn])); + } + set { + this[this.tableExternalStatistic.IDColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Category { + get { + if (this.IsCategoryNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.CategoryColumn])); + } + } + set { + this[this.tableExternalStatistic.CategoryColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Reference { + get { + if (this.IsReferenceNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.ReferenceColumn])); + } + } + set { + this[this.tableExternalStatistic.ReferenceColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Description { + get { + if (this.IsDescriptionNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.DescriptionColumn])); + } + } + set { + this[this.tableExternalStatistic.DescriptionColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string YearValues { + get { + if (this.IsYearValuesNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.YearValuesColumn])); + } + } + set { + this[this.tableExternalStatistic.YearValuesColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Comment { + get { + if (this.IsCommentNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.CommentColumn])); + } + } + set { + this[this.tableExternalStatistic.CommentColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Source { + get { + if (this.IsSourceNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.SourceColumn])); + } + } + set { + this[this.tableExternalStatistic.SourceColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string TableName { + get { + if (this.IsTableNameNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.TableNameColumn])); + } + } + set { + this[this.tableExternalStatistic.TableNameColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public string Destination { + get { + if (this.IsDestinationNull()) { + return string.Empty; + } + else { + return ((string)(this[this.tableExternalStatistic.DestinationColumn])); + } + } + set { + this[this.tableExternalStatistic.DestinationColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsCategoryNull() { + return this.IsNull(this.tableExternalStatistic.CategoryColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetCategoryNull() { + this[this.tableExternalStatistic.CategoryColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsReferenceNull() { + return this.IsNull(this.tableExternalStatistic.ReferenceColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetReferenceNull() { + this[this.tableExternalStatistic.ReferenceColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsDescriptionNull() { + return this.IsNull(this.tableExternalStatistic.DescriptionColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetDescriptionNull() { + this[this.tableExternalStatistic.DescriptionColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsYearValuesNull() { + return this.IsNull(this.tableExternalStatistic.YearValuesColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetYearValuesNull() { + this[this.tableExternalStatistic.YearValuesColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsCommentNull() { + return this.IsNull(this.tableExternalStatistic.CommentColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetCommentNull() { + this[this.tableExternalStatistic.CommentColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsSourceNull() { + return this.IsNull(this.tableExternalStatistic.SourceColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetSourceNull() { + this[this.tableExternalStatistic.SourceColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsTableNameNull() { + return this.IsNull(this.tableExternalStatistic.TableNameColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetTableNameNull() { + this[this.tableExternalStatistic.TableNameColumn] = global::System.Convert.DBNull; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public bool IsDestinationNull() { + return this.IsNull(this.tableExternalStatistic.DestinationColumn); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public void SetDestinationNull() { + this[this.tableExternalStatistic.DestinationColumn] = global::System.Convert.DBNull; + } + } + /// ///Row event argument class /// @@ -9065,6 +9720,40 @@ public IndirectTaxRow Row { } } } + + /// + ///Row event argument class + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public class ExternalStatisticRowChangeEvent : global::System.EventArgs { + + private ExternalStatisticRow eventRow; + + private global::System.Data.DataRowAction eventAction; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public ExternalStatisticRowChangeEvent(ExternalStatisticRow row, global::System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public ExternalStatisticRow Row { + get { + return this.eventRow; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "16.0.0.0")] + public global::System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } } } diff --git a/EM_UI/DataSets/CountryConfig.cs b/EM_UI/DataSets/CountryConfig.cs index 3437ccf..a013f4d 100644 --- a/EM_UI/DataSets/CountryConfig.cs +++ b/EM_UI/DataSets/CountryConfig.cs @@ -3,6 +3,10 @@ namespace EM_UI.DataSets { public partial class CountryConfig { + partial class ExternalStatisticDataTable + { + } + partial class ConditionalFormat_SystemsDataTable { } diff --git a/EM_UI/DataSets/CountryConfig.xsd b/EM_UI/DataSets/CountryConfig.xsd index b613fce..800ace3 100644 --- a/EM_UI/DataSets/CountryConfig.xsd +++ b/EM_UI/DataSets/CountryConfig.xsd @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ - + @@ -32,14 +32,14 @@ - + - + @@ -53,7 +53,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -79,7 +79,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -119,14 +119,14 @@ - + - + @@ -134,7 +134,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -153,7 +153,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -171,7 +171,7 @@ - + @@ -180,16 +180,31 @@ - + - + + + + + + + + + + + + + + + + @@ -266,66 +281,70 @@ - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + \ No newline at end of file diff --git a/EM_UI/DataSets/CountryConfig.xss b/EM_UI/DataSets/CountryConfig.xss index fe8db0c..5f93207 100644 --- a/EM_UI/DataSets/CountryConfig.xss +++ b/EM_UI/DataSets/CountryConfig.xss @@ -4,30 +4,31 @@ Changes to this file may cause incorrect behavior and will be lost if the code is regenerated. --> - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - 397 + 401 693 @@ -36,7 +37,7 @@ - + 332 @@ -48,10 +49,10 @@ - + - 580 + 577 418 @@ -60,7 +61,7 @@ - + 767 @@ -72,7 +73,7 @@ - + 955 @@ -84,91 +85,91 @@ - + 1442 - 656 + 636 1442 - 701 + 719 - + 750 - 607 + 512 750 - 718 + 719 1306 - 718 + 719 - + 1483 - 656 + 636 1483 - 783 + 801 - + 938 - 537 + 473 938 - 800 + 801 1300 - 800 + 801 - + 1475 - 656 + 636 1475 - 870 + 888 - + 1126 - 603 + 508 1126 - 887 + 888 1307 - 887 + 888 - + 767 @@ -180,35 +181,39 @@ - + 955 - 474 + 473 1227 - 474 + 473 - + - 1143 - 575 + 1118 + 508 + + + 1118 + 565 1180 - 575 + 565 - + 560 - 586 + 514 560 diff --git a/EM_UI/DataSets/CountryConfigFacade.cs b/EM_UI/DataSets/CountryConfigFacade.cs index ebcbd38..c9cf282 100644 --- a/EM_UI/DataSets/CountryConfigFacade.cs +++ b/EM_UI/DataSets/CountryConfigFacade.cs @@ -61,7 +61,7 @@ internal CountryConfig ReadXml(string filePath, string fileName) _countryConfig.AcceptChanges(); MigrateUpratingIndices(); - + return _countryConfig; } @@ -801,6 +801,21 @@ internal List GetParameterValuesPossiblyContainingVariables() return parameterValues; } + internal bool GetParameterBoolValue(CountryConfig.FunctionRow function, string parameterName) + { + CountryConfig.ParameterRow paramRow = GetParameterRowByName(function.ID, parameterName); + if (paramRow != null && !string.IsNullOrWhiteSpace(paramRow.Value)) + { + if (bool.TryParse(paramRow.Value, out bool res)) + return res; + else if (paramRow.Value.Equals(DefPar.Value.YES)) + return true; + else if (paramRow.Value.Equals(DefPar.Value.NO)) + return false; + } + return DefinitionAdmin.GetParDefault(function.Name, parameterName); + } + #endregion parameter_functions #region general_functions @@ -1520,20 +1535,19 @@ internal Dictionary GetUpratingIndexYearValues(CountryConfig.Uprati Dictionary yearValues = new Dictionary(); foreach (string yv in index.YearValues.Split(UpratingIndices.UpratingIndicesForm._separator)) { - if (string.IsNullOrEmpty(yv)) continue; - int year; double value; - bool valEmpty = !EM_Helpers.TryConvertToDouble(yv.Substring(5), out value); + int year; double value = -1; + bool valEmpty = string.IsNullOrEmpty(yv) || !EM_Helpers.TryConvertToDouble(yv.Substring(5), out value); if (int.TryParse(yv.Substring(0, 4), out year) && !yearValues.ContainsKey(year) && (!valEmpty || includeEmpty)) yearValues.Add(year, valEmpty ? -1 : value); } return yearValues; } - internal List GetAllUpratingIndexYears() + internal List GetAllUpratingIndexYears(bool includeEmpty = false) { List years = new List(); foreach (CountryConfig.UpratingIndexRow index in _countryConfig.UpratingIndex) - foreach(int year in GetUpratingIndexYearValues(index).Keys) + foreach(int year in GetUpratingIndexYearValues(index, includeEmpty).Keys) if (!years.Contains(year.ToString())) years.Add(year.ToString()); return years; } @@ -1578,7 +1592,7 @@ void MigrateUpratingIndices() CountryConfig.UpratingIndexRow upInd = _countryConfig.UpratingIndex.AddUpratingIndexRow(Guid.NewGuid().ToString(), infoSplit[0], infoSplit[1], infoSplit[infoSplit.Count - 1].Replace("§$&", "#"), string.Empty); for (int y = 0; y < years.Count; ++y) - upInd.YearValues += years[y] + UpratingIndicesForm._separatorYear + infoSplit[y + 2] + UpratingIndicesForm._separator; + upInd.YearValues += years[y] + UpratingIndicesForm._separatorInner + infoSplit[y + 2] + UpratingIndicesForm._separator; upInd.YearValues = upInd.YearValues.TrimEnd(new char[] { UpratingIndicesForm._separator }); } @@ -1590,5 +1604,127 @@ void MigrateUpratingIndices() } #endregion uprating_index_functions + + #region indirect_taxes_functions + + internal List GetIndirectTaxes() { return _countryConfig.IndirectTax.ToList(); } + + internal CountryConfig.IndirectTaxRow GetIndirectTax(string name) + { + List uis = (from ui in _countryConfig.IndirectTax + where ui.Reference.ToLower() == name.ToLower() + select ui).ToList(); + return uis.Count == 0 ? null : uis[0]; + } + + internal Dictionary GetIndirectTaxYearValues(CountryConfig.IndirectTaxRow index, bool includeEmpty = false) + { + Dictionary yearValues = new Dictionary(); + foreach (string yv in index.YearValues.Split(IndirectTaxes.IndirectTaxesForm.separator)) + { + if (string.IsNullOrEmpty(yv)) continue; + int year; double value; + bool valEmpty = !EM_Helpers.TryConvertToDouble(yv.Substring(5), out value); + if (int.TryParse(yv.Substring(0, 4), out year) && !yearValues.ContainsKey(year) && (!valEmpty || includeEmpty)) + yearValues.Add(year, valEmpty ? -1 : value); + } + return yearValues; + } + + internal List GetAllIndirectTaxYears() + { + List years = new List(); + foreach (CountryConfig.IndirectTaxRow index in _countryConfig.IndirectTax) + foreach (int year in GetIndirectTaxYearValues(index).Keys) + if (!years.Contains(year.ToString())) years.Add(year.ToString()); + return years; + } + + internal void UpdateIndirectTaxes(List> taxes) + { + foreach (var tax in taxes) + { + List ind = (from i in _countryConfig.IndirectTax where i.Reference.ToLower() == tax.Item1.ToLower() select i).ToList(); + if (ind.Count == 0) _countryConfig.IndirectTax.AddIndirectTaxRow(Guid.NewGuid().ToString(), tax.Item1, tax.Item2, tax.Item3); + else { ind[0].Reference = tax.Item1; ind[0].Comment = tax.Item3; ind[0].YearValues = tax.Item4; } + } + List refs = (from i in taxes select i.Item2.ToLower()).ToList(); + for (int i = _countryConfig.IndirectTax.Count - 1; i >= 0; --i) + if (!refs.Contains(_countryConfig.IndirectTax[i].Reference.ToLower())) _countryConfig.IndirectTax.ElementAt(i).Delete(); + } + + #endregion indirect_taxes_functions + + + #region external_statistic_functions + + internal List GetExternalStatistics() { return _countryConfig.ExternalStatistic.ToList(); } + + internal CountryConfig.ExternalStatisticRow GetEXternalStatistic(string category, string name) + { + List uis = (from ui in _countryConfig.ExternalStatistic + where ui.Category.ToLower() == category.ToLower() && ui.Reference.ToLower() == name.ToLower() + select ui).ToList(); + return uis.Count == 0 ? null : uis[0]; + } + + internal Dictionary GetExternalStatisticYearValues(CountryConfig.ExternalStatisticRow exStat, bool includeEmpty = false) + { + Dictionary yearValues = new Dictionary(); + foreach (string yv in exStat.YearValues.Split(InDepthDefinitions.SEPARATOR)) + { + if (string.IsNullOrEmpty(yv)) continue; + int year; double value; + bool valEmpty = !EM_Helpers.TryConvertToDouble(yv.Substring(5), out value); + if (int.TryParse(yv.Substring(0, 4), out year) && !yearValues.ContainsKey(year) && (!valEmpty || includeEmpty)) + yearValues.Add(year, valEmpty ? -1 : value); + } + return yearValues; + } + + internal void UpdateExternalStatistics(List extStatistics) + { + foreach (var extSt in extStatistics) + { + CountryConfig.ExternalStatisticRow ext = (from i in _countryConfig.ExternalStatistic where i.Reference.ToLower() == extSt.name.ToLower() && i.Category.ToLower() == extSt.incomeList.ToLower() select i).FirstOrDefault(); + + if (ext == null) _countryConfig.ExternalStatistic.AddExternalStatisticRow(Guid.NewGuid().ToString(), extSt.incomeList, extSt.name, extSt.description, extSt.yearValues, extSt.comment, extSt.source, extSt.tableName, extSt.destination); + else + { + if (ext.Category.StartsWith("ils_exstat")) { ext.Reference = extSt.name; } + ext.Category = extSt.incomeList; ext.Reference = extSt.name; ext.Description = extSt.description; ext.YearValues = extSt.yearValues; ext.Comment = extSt.comment; ext.Source = extSt.source; ext.TableName = extSt.tableName; ext.Destination = extSt.destination; + } + } + List refs = (from i in extStatistics select i.incomeList.ToLower() + "_" + i.name.ToLower()).ToList(); + for (int i = _countryConfig.ExternalStatistic.Count - 1; i >= 0; --i) + { + string currentRef = _countryConfig.ExternalStatistic[i].Category.ToLower() + "_" + _countryConfig.ExternalStatistic[i].Reference.ToLower(); + if (!refs.Contains(currentRef)){ + _countryConfig.ExternalStatistic.ElementAt(i).Delete(); + } + } + + _countryConfig.AcceptChanges(); + } + + internal List GetAllExternalStatisticsYears() + { + // try to read the first row of the stored external statistics to see which years are available. + // in theory, all rows should have the same years! + List years = new List(); + CountryConfig.ExternalStatisticRow firstStat = _countryConfig.ExternalStatistic.ToList().FirstOrDefault(); + if (firstStat == null) return years; + + foreach (string yv in firstStat.YearValues.Split(InDepthDefinitions.SEPARATOR)) + { + if (string.IsNullOrEmpty(yv)) continue; + string year = yv.Split(InDepthDefinitions.SEPARATOR_INNER).FirstOrDefault(); + if (string.IsNullOrEmpty(year)) continue; + if (int.TryParse(year, out _)) + years.Add(year); + } + return years; + } + #endregion external_statistic_functions } } diff --git a/EM_UI/Dialogs/AddParameterForm.cs b/EM_UI/Dialogs/AddParameterForm.cs index 6043495..9ca436c 100644 --- a/EM_UI/Dialogs/AddParameterForm.cs +++ b/EM_UI/Dialogs/AddParameterForm.cs @@ -158,7 +158,7 @@ void gridParam_CellValidating(object sender, DataGridViewCellValidatingEventArgs string parameterName = e.ColumnIndex == colCount.Index ? string.Empty : dgvParameter.Rows[e.RowIndex].Cells[colParameter.Index].Value.ToString(); if (!ParameterValidation.ValidateGroupInput(value, parameterName, ref errorText)) { - Tools.UserInfoHandler.ShowError(errorText); + UserInfoHandler.ShowError(errorText); e.Cancel = true; } else diff --git a/EM_UI/Dialogs/ComponentSearchForm.cs b/EM_UI/Dialogs/ComponentSearchForm.cs index 1ede7b2..8abf6c9 100644 --- a/EM_UI/Dialogs/ComponentSearchForm.cs +++ b/EM_UI/Dialogs/ComponentSearchForm.cs @@ -7,6 +7,7 @@ using System.Text; using System.Windows.Forms; using EM_UI.Validate; +using EM_UI.Tools; namespace EM_UI.Dialogs { @@ -21,7 +22,7 @@ void btnOK_Click(object sender, EventArgs e) { if (txtSearchByIdentifier.Text == string.Empty) { - Tools.UserInfoHandler.ShowError("Please specify the identifier."); + UserInfoHandler.ShowError("Please specify the identifier."); return; } diff --git a/EM_UI/Dialogs/ConditionalFormattingForm.cs b/EM_UI/Dialogs/ConditionalFormattingForm.cs index 556a92f..db78679 100644 --- a/EM_UI/Dialogs/ConditionalFormattingForm.cs +++ b/EM_UI/Dialogs/ConditionalFormattingForm.cs @@ -167,7 +167,7 @@ int GetSelectedRow(DataGridView dataGridView) { if (dataGridView.SelectedRows.Count == 0) { - Tools.UserInfoHandler.ShowError("Please select a row."); + EM_UI.Tools.UserInfoHandler.ShowError("Please select a row."); return -1; } return dataGridView.SelectedRows[0].Index; diff --git a/EM_UI/Dialogs/ConfigurationForm.cs b/EM_UI/Dialogs/ConfigurationForm.cs index 6881959..95ed96d 100644 --- a/EM_UI/Dialogs/ConfigurationForm.cs +++ b/EM_UI/Dialogs/ConfigurationForm.cs @@ -115,7 +115,7 @@ bool StoreAutoSave() { if (!EM_Helpers.IsNonNegInteger(txtAutosaveInterval.Text)) { - Tools.UserInfoHandler.ShowError("Please insert an integer number for the Autosave Interval."); + EM_UI.Tools.UserInfoHandler.ShowError("Please insert an integer number for the Autosave Interval."); return false; } EM_AppContext.Instance.GetUserSettingsAdministrator().Get().AutoSaveInterval = EM_Helpers.SaveConvertToInt(txtAutosaveInterval.Text) * 60000; diff --git a/EM_UI/Dialogs/DeleteCountryForm.cs b/EM_UI/Dialogs/DeleteCountryForm.cs index 24d176c..a89a276 100644 --- a/EM_UI/Dialogs/DeleteCountryForm.cs +++ b/EM_UI/Dialogs/DeleteCountryForm.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Windows.Forms; +using EM_UI.Tools; namespace EM_UI.Dialogs { @@ -21,7 +22,7 @@ void btnOK_Click(object sender, EventArgs e) ++nSel; if (EM_AppContext.Instance.GetCountryMainForm(it.Text) != null) { - Tools.UserInfoHandler.ShowError("A loaded country cannot be deleted. Please close '" + it.Text + "'."); + EM_UI.Tools.UserInfoHandler.ShowError("A loaded country cannot be deleted. Please close '" + it.Text + "'."); return; } } diff --git a/EM_UI/Dialogs/FindReplaceForm.cs b/EM_UI/Dialogs/FindReplaceForm.cs index f057a47..a5c191f 100644 --- a/EM_UI/Dialogs/FindReplaceForm.cs +++ b/EM_UI/Dialogs/FindReplaceForm.cs @@ -80,7 +80,7 @@ void btnReplace_Click(object sender, EventArgs e) string message = "Focused cell does not match. Try 'Search Next/Previous' to find the next match."; if (cboFind.Text.IndexOfAny(new char[] {'?','*'}) >= 0) message += Environment.NewLine + Environment.NewLine + _messageNoWildcards; - Tools.UserInfoHandler.ShowError(message); + EM_UI.Tools.UserInfoHandler.ShowError(message); return; } @@ -97,7 +97,7 @@ void btnReplace_Click(object sender, EventArgs e) true, GetActiveMainForm().GetTreeListBuilder().GetPolicyColumn()), false); else { - Tools.UserInfoHandler.ShowError("Replace can only change system columns and the comment column."); + EM_UI.Tools.UserInfoHandler.ShowError("Replace can only change system columns and the comment column."); return; } @@ -276,7 +276,7 @@ bool FindMatches() } if (_foundCells.Count == 0) - Tools.UserInfoHandler.ShowError("No match found."); + EM_UI.Tools.UserInfoHandler.ShowError("No match found."); _selectedNodesAtLastSearch = selectedNodes; _selectedColumnsAtLastSearch = selectedColumns; @@ -341,7 +341,7 @@ void btnReplaceAll_Click(object sender, EventArgs e) if (cboFind.Text.IndexOfAny(new char[] { '?', '*' }) >= 0) { - if (Tools.UserInfoHandler.GetInfo(_messageNoWildcards, MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.Cancel) + if (EM_UI.Tools.UserInfoHandler.GetInfo(_messageNoWildcards, MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.Cancel) return; } diff --git a/EM_UI/Dialogs/OptionalWarningsManager.cs b/EM_UI/Dialogs/OptionalWarningsManager.cs index 52161a9..148dd40 100644 --- a/EM_UI/Dialogs/OptionalWarningsManager.cs +++ b/EM_UI/Dialogs/OptionalWarningsManager.cs @@ -74,7 +74,7 @@ internal static void SetOptionalWarnings(string optionalWarnings) //allows at least to easily look up which outdated warnings exist and check whether they can be eliminited meanwhile internal static void ShowOutdatedWarning(string warning) { - Tools.UserInfoHandler.ShowError(warning); + EM_UI.Tools.UserInfoHandler.ShowError(warning); } } } diff --git a/EM_UI/Dialogs/SelectSystemsForm.cs b/EM_UI/Dialogs/SelectSystemsForm.cs index 9445ca5..52e6aa1 100644 --- a/EM_UI/Dialogs/SelectSystemsForm.cs +++ b/EM_UI/Dialogs/SelectSystemsForm.cs @@ -28,7 +28,7 @@ void btnOK_Click(object sender, EventArgs e) { if (_enforceSelection && lstSystems.CheckedItems.Count == 0) { - Tools.UserInfoHandler.ShowError("Please select a system."); + EM_UI.Tools.UserInfoHandler.ShowError("Please select a system."); return; } diff --git a/EM_UI/Dialogs/Tools/ChooseStatistics.Designer.cs b/EM_UI/Dialogs/Tools/ChooseStatistics.Designer.cs new file mode 100644 index 0000000..f8489bc --- /dev/null +++ b/EM_UI/Dialogs/Tools/ChooseStatistics.Designer.cs @@ -0,0 +1,105 @@ + +namespace EM_UI.Dialogs.Tools +{ + partial class ChooseStatistics + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnStatisticsPresenter = new System.Windows.Forms.Button(); + this.btnInDepth = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // btnStatisticsPresenter + // + this.btnStatisticsPresenter.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.btnStatisticsPresenter.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnStatisticsPresenter.Image = global::EM_UI.Properties.Resources.StatisticsPresenter; + this.btnStatisticsPresenter.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.btnStatisticsPresenter.Location = new System.Drawing.Point(95, 76); + this.btnStatisticsPresenter.Name = "btnStatisticsPresenter"; + this.btnStatisticsPresenter.Size = new System.Drawing.Size(163, 152); + this.btnStatisticsPresenter.TabIndex = 0; + this.btnStatisticsPresenter.Text = "Statistics Presenter"; + this.btnStatisticsPresenter.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.btnStatisticsPresenter.UseVisualStyleBackColor = true; + this.btnStatisticsPresenter.Click += new System.EventHandler(this.btnStatisticsPresenter_Click); + // + // btnInDepth + // + this.btnInDepth.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.btnInDepth.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnInDepth.Image = global::EM_UI.Properties.Resources.InDepthAnalysis; + this.btnInDepth.ImageAlign = System.Drawing.ContentAlignment.BottomCenter; + this.btnInDepth.Location = new System.Drawing.Point(341, 76); + this.btnInDepth.Name = "btnInDepth"; + this.btnInDepth.Size = new System.Drawing.Size(163, 152); + this.btnInDepth.TabIndex = 1; + this.btnInDepth.Text = "In-depth Analysis"; + this.btnInDepth.TextAlign = System.Drawing.ContentAlignment.TopCenter; + this.btnInDepth.UseVisualStyleBackColor = true; + this.btnInDepth.Click += new System.EventHandler(this.btnInDepth_Click); + // + // button1 + // + this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.button1.Location = new System.Drawing.Point(453, 316); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(60, 27); + this.button1.TabIndex = 2; + this.button1.TabStop = false; + this.button1.Text = "cancel"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // ChooseStatistics + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.button1; + this.ClientSize = new System.Drawing.Size(592, 290); + this.Controls.Add(this.button1); + this.Controls.Add(this.btnInDepth); + this.Controls.Add(this.btnStatisticsPresenter); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ChooseStatistics"; + this.ShowIcon = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "Please choose a tool"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button btnStatisticsPresenter; + private System.Windows.Forms.Button btnInDepth; + private System.Windows.Forms.Button button1; + } +} \ No newline at end of file diff --git a/EM_UI/Dialogs/Tools/ChooseStatistics.cs b/EM_UI/Dialogs/Tools/ChooseStatistics.cs new file mode 100644 index 0000000..5b756c7 --- /dev/null +++ b/EM_UI/Dialogs/Tools/ChooseStatistics.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace EM_UI.Dialogs.Tools +{ + public partial class ChooseStatistics : Form + { + public enum SelectionType { None, StatisticsPresenter, InDepthAnalysis } + internal SelectionType selection = SelectionType.None; + + public ChooseStatistics() + { + InitializeComponent(); + } + + private void btnStatisticsPresenter_Click(object sender, EventArgs e) + { + Close(); + selection = SelectionType.StatisticsPresenter; + } + + private void btnInDepth_Click(object sender, EventArgs e) + { + Close(); + selection = SelectionType.InDepthAnalysis; + } + + private void button1_Click(object sender, EventArgs e) + { + Close(); + } + } +} diff --git a/EM_UI/VersionControl/Dialogs/VCChangePassword.resx b/EM_UI/Dialogs/Tools/ChooseStatistics.resx similarity index 96% rename from EM_UI/VersionControl/Dialogs/VCChangePassword.resx rename to EM_UI/Dialogs/Tools/ChooseStatistics.resx index 535e804..1af7de1 100644 --- a/EM_UI/VersionControl/Dialogs/VCChangePassword.resx +++ b/EM_UI/Dialogs/Tools/ChooseStatistics.resx @@ -117,7 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 17, 17 - \ No newline at end of file diff --git a/EM_UI/Dialogs/Tools/MacrovalidationForm.Designer.cs b/EM_UI/Dialogs/Tools/MacrovalidationForm.Designer.cs new file mode 100644 index 0000000..2c2d485 --- /dev/null +++ b/EM_UI/Dialogs/Tools/MacrovalidationForm.Designer.cs @@ -0,0 +1,69 @@ + +using System; +using System.Windows.Forms; + +namespace Macrovalidation +{ + partial class MacrovalidationForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MacrovalidationForm)); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(28, 22); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(282, 20); + this.label1.TabIndex = 0; + this.label1.Text = "Running macrovalidation, pelase wait..."; + // + // MacrovalidationForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(354, 62); + this.Controls.Add(this.label1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "MacrovalidationForm"; + this.Text = "Macrovalidation"; + this.Shown += new System.EventHandler(this.MacrovalidationForm_Shown); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Label label1; + } +} + diff --git a/EM_UI/Dialogs/Tools/MacrovalidationForm.cs b/EM_UI/Dialogs/Tools/MacrovalidationForm.cs new file mode 100644 index 0000000..7e1f375 --- /dev/null +++ b/EM_UI/Dialogs/Tools/MacrovalidationForm.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml; +using EM_Common; +using EM_Crypt; +using EM_Statistics; +using EM_Statistics.InDepthAnalysis; +using EM_Statistics.ExternalStatistics; +using EM_Transformer; +using EM_UI; +using EM_UI.CountryAdministration; +using EM_UI.DataSets; +using EM_UI.ExternalStatistics; +using EM_UI.Run; +using EM_XmlHandler; +using EM_Common_Win; + +namespace Macrovalidation +{ + public partial class MacrovalidationForm : Form + { + List filePackages; + + public MacrovalidationForm() + { + // load the template info and let the user select the files + XML_handling.ParseTemplateInfo(EM_Statistics.Resources.Macrovalidation_xml, out Template.TemplateInfo templateInfo, out ErrorCollector errorCollector, true); + if (errorCollector.HasErrors()) MessageBox.Show(errorCollector.GetErrorMessage()); + EM_Statistics.StatisticsPresenter.SelectFilesForm selectFilesForm = new EM_Statistics.StatisticsPresenter.SelectFilesForm(templateInfo); + DialogResult = selectFilesForm.ShowDialog() == DialogResult.OK ? DialogResult.OK : DialogResult.Cancel; + if (DialogResult == DialogResult.Cancel) return; + if (selectFilesForm.filePackages.Count < 1) return; + + filePackages = selectFilesForm.filePackages; + if (filePackages[0].PathsAlt == null || filePackages[0].PathsAlt.Count < 1) return; + string country = Path.GetFileName(filePackages[0].PathsAlt.First()).Split('_').First() + "_"; + if (!filePackages[0].PathsAlt.All(file => Path.GetFileName(file).StartsWith(country))) + { + MessageBox.Show("You can only select output files from one country."); + return; + } + + InitializeComponent(); + Show(); + } + + public static ExeXml.Country GetEM3Country(string emPathFolder, string countryShortName, string systemName) + { + EMPath emPath = new EMPath(emPathFolder); + if (!File.Exists(emPath.GetCountryFilePath(countryShortName, true))) + throw new Exception($"system info cannot be retrieved: country file {emPath.GetCountryFilePath(countryShortName, true)} does not exist."); + + if (!EM3Country.Transform(emPathFolder, countryShortName, out List errors)) + throw new Exception($"transforming to EM3 failed: {string.Join(";", errors)}"); + + string w = string.Empty; Communicator communicator = new Communicator() + { + errorAction = new Action + (ei => { w += $"{Path.GetFileName(emPath.GetFolderOutput())}: {ei.message}" + Environment.NewLine; }) + }; + + ExeXml.Country countryContent = ExeXmlReader.ReadCountry(emPath.GetCountryFilePath(countryShortName), + systemName, null, // null for dataIdentifier + false, communicator, true); // false for 'ignorePrivate', true for 'readComment' + return countryContent; + } + + + + + private void GetExternalStatistics(FilePackageContent filePackageContent, Dictionary>> yearsPerCountry, out Dictionary amounts, out Dictionary ben, out Dictionary level, out Dictionary source, out Dictionary comments, out Dictionary destination, out Dictionary> inequality, out Dictionary> poverty) + { + // Initialize the dictionaries + // The key of each dictionary will be: incomelist_varname_year, and the value will be the value + amounts = new Dictionary(); + ben = new Dictionary(); + level = new Dictionary(); + source = new Dictionary(); + comments = new Dictionary(); + destination = new Dictionary(); + inequality = new Dictionary>(); + poverty = new Dictionary>(); + + string _selectedCountry = yearsPerCountry.Keys.First(); + List _selectedYears = yearsPerCountry[_selectedCountry].Keys.ToList(); + _selectedYears.Sort(); + CountryConfigFacade _countryConfigFacade = CountryAdministrator.GetCountryConfigFacade(yearsPerCountry.Keys.First(), true); + Dictionary xmlIncomeListComponents = ExternalStatisticUtil.GetCountryXMLIncomeListComponents(_selectedCountry, _selectedYears); + ExternalStatistic storedExternalStatistic = ExternalStatisticUtil.GetStoredExternalStatistics(_countryConfigFacade, xmlIncomeListComponents, _selectedYears); + + foreach (KeyValuePair agg in storedExternalStatistic.Aggregate) + { + ExternalStatisticAggregate singleAggr = agg.Value; + string key = singleAggr.IncomeList + (string.IsNullOrEmpty(singleAggr.Name) ? "" : "_" + singleAggr.Name); + Dictionary yearValues = singleAggr.YearValues; + + foreach (string year in _selectedYears) + { + if (yearValues.ContainsKey(year)) + { + string yearKey = key + "_" + year; + amounts.Add(yearKey, yearValues[year].Amount); + ben.Add(yearKey, yearValues[year].Beneficiares); + level.Add(yearKey, yearValues[year].Level); + } + } + + source.Add(key, singleAggr.Source); + comments.Add(key, singleAggr.Comment); + destination.Add(key, singleAggr.Destination); + } + + foreach (ExternalStatisticDistributional agg in storedExternalStatistic.Distributional.Values) + { + Dictionary vals = new Dictionary() { { "description", agg.Description }, { "source", agg.Source }, { "comments", agg.Comment } }; + foreach (string year in _selectedYears) + { + if (agg.YearValues.ContainsKey(year)) + { + vals.Add(year, agg.YearValues[year]); + } + } + if (agg.TableName == ExternalStatisticsForm.DISTRIBUTIONAL_INEQUALITY) + inequality.Add(agg.Name, vals); + else if (agg.TableName == ExternalStatisticsForm.DISTRIBUTIONAL_POVERTY) + poverty.Add(agg.Name, vals); + else + MessageBox.Show("ERROR! Invalid distributional table found."); + } + } + + private void MacrovalidationForm_Shown(object sender, EventArgs e) + { + Refresh(); // make sure the form is displayed properly + Cursor.Current = Cursors.WaitCursor; + + XML_handling.ParseTemplate(EM_Statistics.Resources.Macrovalidation_xml, out Template template, out ErrorCollector errorCollector, true); + if (errorCollector.HasErrors()) MessageBox.Show(errorCollector.GetErrorMessage()); + TemplateApi templateApi = new TemplateApi(template, errorCollector); templateApi.SetEndUserFriendlyActionErrorMode(); + + if (filePackages.Count < 0) return; + + FilePackageContent filePackageContent = filePackages[0]; + if (filePackageContent.PathsAlt.Count < 1) return; + Dictionary>> yearsPerCountry = new Dictionary>>(); + List systems = new List(); + foreach (string filenameAndPath in filePackageContent.PathsAlt) + { + string sysName = Path.GetFileNameWithoutExtension(filenameAndPath); + if (sysName.EndsWith("_std")) sysName = sysName.Substring(0, sysName.Length - 4); + string[] fileInfo = sysName.Split('_'); + if (fileInfo.Length < 2) continue; + if (!yearsPerCountry.ContainsKey(fileInfo[0])) yearsPerCountry.Add(fileInfo[0], new Dictionary>()); + if (!yearsPerCountry[fileInfo[0]].ContainsKey(fileInfo[1])) yearsPerCountry[fileInfo[0]].Add(fileInfo[1], new List()); + yearsPerCountry[fileInfo[0]][fileInfo[1]].Add(filenameAndPath); + systems.Add(sysName); + } + string country = yearsPerCountry.Keys.First(); + List years = yearsPerCountry[country].Keys.ToList(); + + GetExternalStatistics(filePackages[0], yearsPerCountry, out Dictionary amounts, out Dictionary ben, out Dictionary level, + out Dictionary source, out Dictionary comments, out Dictionary destination, + out Dictionary> inequality, out Dictionary> poverty); + + Dictionary> allIncomelists = new Dictionary>(); + int reform = 0; + foreach (string system in systems) + { + Dictionary componentsIncomeList = ExternalStatisticUtil.ReadIncomeListComponentsFromXMLFile(country, new List() { system }, true, false); + Cursor.Current = Cursors.WaitCursor; + foreach (ExternalStatisticsComponent esc in componentsIncomeList.Values) + { + foreach (KeyValuePair> keyValuePair in esc.fiscalIls) + { + string il = keyValuePair.Key; + if (!allIncomelists.ContainsKey(il)) allIncomelists.Add(il, new Dictionary()); + foreach (string var in keyValuePair.Value.Keys) + { + if (!allIncomelists[il].ContainsKey(var)) + { + SettingsMacrovalidation.ILVarSummary ivi = new SettingsMacrovalidation.ILVarSummary() + { + varName = var, + description = keyValuePair.Value[var].description + }; + string varKey = il + (string.IsNullOrEmpty(var) ? "" : "_" + var); + if (destination.ContainsKey(varKey)) ivi.destination = destination[varKey]; + // all previous years it did not exist, but it exists in this one, so add values for previous years too + for (int i = 0; i < (reform); i++) + { + ivi.exists.Add(false); + ivi.reformsSubstract.Add(null); + } + ivi.exists.Add(true); + ivi.reformsSubstract.Add(keyValuePair.Value[var].subtract); + allIncomelists[il].Add(var, ivi); + } + else + { + allIncomelists[il][var].exists.Add(true); + allIncomelists[il][var].reformsSubstract.Add(keyValuePair.Value[var].subtract); + } + } + } + } + reform++; + // finally, there might have been some missing varialbes in this year, that existed before + // add values for them too. make sure you do this *after* increasing "reform"! + allIncomelists.All(il => il.Value.All(v => { + if (v.Value.exists.Count < reform) v.Value.exists.Add(false); + if (v.Value.reformsSubstract.Count < reform) v.Value.reformsSubstract.Add(null); + return true; + })); + + } + + SettingsMacrovalidation settingsmacrovalidation = new SettingsMacrovalidation(); + + + //settingsmacrovalidation.getSystemNamesAndYears(yearsPerCountry); + settingsmacrovalidation.ModifyTemplate(templateApi, out List systemSpecificVars, yearsPerCountry.First().Value, allIncomelists, + amounts, ben, level, source, comments, destination, inequality, poverty); + + EM_Statistics.StatisticsPresenter.StatisticsPresenter.Run(new Dictionary { + { "template", templateApi.GetTemplate() }, + { "FilePackages", filePackages }, + { "userinput", systemSpecificVars } }); + + Cursor.Current = Cursors.Default; + Close(); + } + } +} diff --git a/EM_UI/Dialogs/Tools/MacrovalidationForm.resx b/EM_UI/Dialogs/Tools/MacrovalidationForm.resx new file mode 100644 index 0000000..125c044 --- /dev/null +++ b/EM_UI/Dialogs/Tools/MacrovalidationForm.resx @@ -0,0 +1,1227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAfYAAAAEAIAAoAgEAFgAAACgAAAB9AAAAAAEAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfvwAI07wATNS9AJrTvADN1LwA7NW8APzUvAD11LwA4tS9 + ALzVuwB407sAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZvwAU1LsAj9S8APTUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA1NS7AFP//wABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAB1bwActW8 + APDUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W8 + AMbWuQAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA378ACNW8AKPUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APPTvQBRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5AAvUuwDI1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP3VvABmAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAB1bwAqNS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8APvVvQBCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADfvwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANW8 + AHnUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AOzRvwAcAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + AAHTugA01L0Ag9W8AMbUvADu1LwA/9S8AP/UvAD61LwA2tS8AKfUvQBZzLsADwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADYugAa1LwA9NS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP+AAALTvQBd1LwA3dS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD51bwAndG/ABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANS8AJvUvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/dW7ADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSvgAz1LwAz9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1bwA9tO7AICqqgADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVuAAS1LwA+9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/07sAngAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1b0AVdS8APXUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + ALfPvwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANS7AF7UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvADsv78ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANW9 + AGzUvAD+1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9O9ANPPvwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1LwArNS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/WvQA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADTvABF1LwA+9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S7ALmqqgADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUvADj1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9O9AHQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1r0AH9S8AO/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9W8AIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA1aoABtS8AP7UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1b0AlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVvACj1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA+dO9ACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXvAAT1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvQClAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA07wALtS8AP3UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/07wApAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANLDABHUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AKEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTuwCe1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD91b8AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAqqoAA9S8APvUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1bwAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqoAA9W9AOrUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvQBkAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1LwA2tS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADVvAA91LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W8 + ALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVvACc1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9a5ACwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANW8AHPUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANS9AE3UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvADfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA070AktS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/zLMACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA378ACNW8APDUvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W8AIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADUvACg1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/WuAAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1LwAfdS8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/VvAL50b8AHAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANW8AJzUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9m/ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADRuQAL1LwA5tS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9fJ + Yvnf2cwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1bsAi9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/VvAD8zMwABQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTuwBS1LwA/tS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/VwCP/3NfF/9zYztLmzMwKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADUuwBl1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + ANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADVvQB/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1b4P/9vVsv/c2M//3NjP/9vYzp0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANW/ACTUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwAmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAHTvACY1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W+D//a0Z//3NjP/9zY + z//c2M//3NjP/93Y0GEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANS8ANbUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/TvABMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVvABm1LwA+9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/VwB7/2tOv/9zYz//c2M//3NjP/9zYz//c2M//3NjQ99vb0DEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA1LwAgdS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1bwA8N+/ + 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 + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c18+7//+qAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADc18+u3NjP/9zYz//c2M//3NjP/9vVuf/Wwir/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APvVuwBtAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADc2M973NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M97AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA29jQXNzYz//c2M//3NjP/9zYz//c2M//3NjP/9vXx//Yymb/1L0J/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/TvADB1LwANQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wHc2M+w3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz/3e1s9FAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvbzhXc2M/q3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//b1rz/18ld/9XAGP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + APnUvAC41L0ATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOHS + 0hHd2M/e3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z+nZ2dAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA29jQrNzY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjO/9rTpv/XyVjO1bwAndW8 + AK7UvAC21bwAqNS8AInTvABXzLsADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN3ZzzXc2M/43NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz8bMzMwFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANzZzljc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP5uPV1RIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzX0Gzc2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9vYzogAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZ2cwU3NjP6dzYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2dBRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANzY0KLc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/tzZ0FEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN3Yz6rc2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NnPoAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1dXVDNzXz9Xc2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP79ra0iIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADb2M5O3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z+Xh0tIRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3tjRJ9zY + z/Lc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//29jP0OPj + xgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA19fJE9zZz+jc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3dnPSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA3dfOWdzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//29jPlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADc2c+m3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/93Y0JwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NjOmNzYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NnOXgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3dfQTNzY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M/k4dLSEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADb29sH3NjQzNzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//d2M/029vOKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN/fzxDc2M/k3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/tzYzUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADe1s4f3NjP7NzYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M/Y2NjYDQAAAAAAAAAAAAAAAAAAAAC2UkActVI+PrRS + QUu0UT9Vt1M+SrRPPz24Uj0ZAAAAAAAAAAAAAAAA3NjQotzYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M6YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd19BM3NjP/tzY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c19Cnt1BAILZQ + P3a2UD64tVE/8rVRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT/wtVE+tMB2Z5nYyb//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP4NjY2A0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADc2M+J3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c187/0bGl/79zY/+1UT/+tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7ZSQf+/dmf/0rWp/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z/7b19BGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/vwTd18/B3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//1Lyx/75uXv+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//vnJi/9XAtf/c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3dfPlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7T + 0xfc2M/m3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NbM/8ePgf+2UkH/tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVNB/8iViP/b183/3NjP/9zYz//c2M//3NjP/93Yz97Y2NgNAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANvXz0Dc2M/83NjP/9zYz//c2M//3NjP/9nNw/++cGD/tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//8B1Zv/a0Mf/3NjP/9zYz//c2M/929fOPwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzYz3vc2M//3NjP/9zY + z//Xyb7/u2VV/7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//71q + Wf/YzML/3NjP/9zYz5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AdzYz7Dc2M//2c3E/7xmVf+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7xpWf/ZzsXf1dXVDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4dLSEdzVyt++cGD/tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7hdTMqAgAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvGRUo7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7RRPnsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALVTQDS1UT/8tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE/+7VPPi0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAABtVE/yrVRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tFE+vAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALVRQEy1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tE8/PQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAtVE/wbVRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT+zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALdQQCC1UT/+tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/u1VUAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtVFAeLVRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7RSP2oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANWqAAbVvgA3070AXdO8 + AG7VvABy07sAYtS8AEHMuwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC1UD+7tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVI+rAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqqoAA9W9 + AFXVvACo1LwA8dS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APrVvAC61LwAa9u2AA4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAgIAAArVSP/S1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT/oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANa8AETUvADQ1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA7NS9AHfbtgAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1UkIftVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+vUEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5AAvUvACr1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AM/WvQAfAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALNQ + QEC1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//82soJnb19FN2dnMFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTuQAd1LwAztS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AOnVuwA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAtVFBT7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//0raq/9zYz//c2M//3NjP5tvZz7Pb18+A29fRTdzc0RYAAAAAAAAAAAAAAAAAAAAA2MQADdS8 + ANTUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APPTvAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2Uj5XtVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP//QsKX/3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z+bb2c+z29fPgNvVzk7VvQi61LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AODRuQAWAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALRS + Pk61UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//9K2qv/c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//2Mx0/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAs1BAQLVRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//1L6y/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9vWw//UvhD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/tK8ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACzVTwetVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP//Zz8b/3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//2Mpl/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwAvQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8A + AAG1Uj/0tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//uV1M/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//VwBz/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD+0b8AHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALVQP7u1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P//BfW7/3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//2tOq/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/VvABnAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADf1coYxYt+07VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//8yglP/c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//Yy2//1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S7 + ALEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B3NnPZdzY + z+/Xx73/tVJA/7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1U0H/2MzC/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9fGTf/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LsA2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA2trSItzXz7vc2M//3NjP/9zYz/++cmL/tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//8B6 + a//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//1sQ6/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvADyAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAv7+/BN3Yz2/d2M/03NjP/9zYz//c2M//3NjP/9Cwpf+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//07it/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//WwzT/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + APsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN7YzS7c2M/K3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NfO/75uXv+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7dVRMLb19FN29fPgNvZz7Pc2M/s3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9bEPP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1bwA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN/fvwjd2c+G3NjP+9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//1L2z/7ZTQP+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT/5tFE+KQAA + AAAAAAAAAAAAAP///wLf2cwo29jQXNzY0JHc2M/F3NjP9tzYz//c2M//18hS/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvADUAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADc2M873NjP1tzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//x5CC/7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7ZSP3oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//6oD29XQK9zZ + zl7Yx1rA1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AKcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADb28gO3NjQkdzYz/3c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c1sz/vnBg/7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT+3gIAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANe/ACDUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/07wAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3dnPStzYz+Hc2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//ZzsX/u2dW/7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE/0q9QQBAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANW8ANLUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APvXvAATAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3NzRFtzX0Kfc2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//Yyb//u2dW/7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VQ + P865UToWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA1L0AcNS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwAqgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvY + z1Xc2M/r3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//XyL+7tlZEyrVRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+2UD64tkk3DgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVqgAG1LwA3dS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8APvTuwApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN/XzyDc2M643NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M/u3NfQZgAAAAC/QEAEtlFAiLVR + P/y1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT/6tFE+e4CAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUvQBZ1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LsAkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAALTvQA61LsAcdS7AJPUvACh1bwAndS8AI3VvABn0b4AJwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wHc19Bm3NjP8tzYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3djPqtvb + zhUAAAAAAAAAAAAAAAAAAAAAs1I9MrZRP8a1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE/vbZPPSoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADTvACY1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9O8AM3MswAKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANa5ACzUvACb1LwA6dS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1L0A19W8AIXOtgAVAAAAAAAAAADd1s8l3NjPwNzYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP5tzZz1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALRTQUe1UD+7tVE//bVR + P/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7VRP/+1UT/8tFA/tbZR + QT8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzMAAXVvQDA1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvADl0L0AGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANC9ABvTuwCe1bwA/NS8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APHSvAR+2tbBfNzY + z/jc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/tzZz5nb28gOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACzVTwexIN1tcF5af+4Wkj/tVE//7VRP/+1UT//tVE//7VRP/+1UT//tVE//7ha + Sv/Bemv/woJ0rLhSPRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANW/ + AAzVvACu1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA2dG+ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADVuwA81LwA6dS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/WwSX/29W1/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz9zc2NFCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADb18963NjP/9zYz//YzML/07qv/9G0 + qf/QrKD/0bSp/9S6sP/ZzcP/3NjP/9zYz//c2M5uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+AAALVuwCE1LwA+9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W8AK7YxAANAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA1L0AZNS8APrUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/VvhP/29Ki/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz/vc2NCR0dHRCwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvX + z3rc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYzm4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADSuQAo1LwAqtS8 + AP7UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8ANTVvQBVAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANW9AEnVvAD81LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/Uvg//29Sz/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M/R3djONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA29fPetzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjObgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA07wALtO7AIDUvADP1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA4dO9 + AJLVugBD/4AAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWuQAs1LwA8tS8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/WwSX/3NfF/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2ND329fPgNXV1QYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADb18963NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M5uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPvwAQ07oANNa8 + AETTvABF1bsAPNW/ABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANS7AMTUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/XyWL/3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjPxN/ZzCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvX + z3rc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYzm4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTuwBS1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S9Bv/b1Lf/3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP9d3Y0Hf///8CAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA29fPetzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjObgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANS8ANTUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9fIVv/c2M//3NjP/9zYz//c2M//3NjP/9zY + z7bd1cweAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADb18963NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M5uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADVvAAq1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1b4T/9zX + zf/c2M//3NjP/9zYz+vd2M9bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvX + z3rc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYzm4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANW8AHnUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/2tKh/9zYz//d2M+q29vOFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA29fPetzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjObgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1L0AvNS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/YymTy3dfQUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADb18963NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M5uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADUvADj1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W9 + CKoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvX + z3rc2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zYzm4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANS8APfUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwAtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA29fPetzYz//c2M//3NjP/9zYz//c2M//3NjP/9zYz//c2M//3NjP/9zY + z//c2M//3NjObgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1LwA+9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAC+AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADb18963NjP/9vTrv/Zy3L/2MdQ/9bE + Ov/WxDf/1sQ7/9fHUf/YzHX/29Wy/9zYz//c2M5uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADUvADv1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + ALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1b8ADNbF + RrrVwB//1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1cAj/9XERbHGxgAJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANS8ANDUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1bwAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA//8AAdO9AGjUvADn1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AOLUuwBeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1bwAndS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvABfAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANG5AAvUvACs1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvACnxsYACQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADWvABQ1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1bwA/Nm/ + ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTvAAX1LwAz9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/TvADH0sMAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMyzAArUvAD11LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/VvQDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMwABdW9 + AMDUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/VvAC6v78ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANS8AJXUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9W9AFUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADVvACd1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvACNAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA0bkAFtS8APLUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvADK//8AAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1r0APtS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP3SvgAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1bsAeNS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1bwA/NW7ADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAHVvADG1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AL4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAB070AqdS8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvQBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA1bwASNS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9K8 + ADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADVvwAM07wAzdS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1L0AmgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUvQCa1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1bwAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVvwAM1LwAsNS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/tS8 + AIj/gAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAtS8AOfUvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UuwDbAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/gAAC1LwAgtS8APjUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AOjUuwBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADVvAAq1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/QvQAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1r0AH9W7AKLUvAD91LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8APPTuwCA1b8ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANW7AE/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9O7AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANO8 + ABfUvQBk1LwAstW9AOrUvAD/1LwA/9S8AP/UvAD91LwA39S8AKDTvQBRzLMACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1b0AYdS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/07sAUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANW/AAzWuAAZzrYAFd+/AAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADTvABj1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/VvQBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANW9AFXUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9O9AEYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA07oANNS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1b8AJAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADGxgAJ1LwA9NS8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AOuqqgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTvACv1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANS7AF7UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/VuwBPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA378ACNS8AOLUvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA2czM + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA07wAY9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/TuwBSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqqgAD1LsAyNS8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/07wAu///AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADWuAAZ1LwA49S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AN/OtgAVAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTugA01bwA8NS8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvADr1b4AKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADWugAl1L0A19S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/070A09G5ACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVuAAS1LsAptS8AP7UvAD/1LwA/9S8AP/UvAD/1LwA/9S8 + AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/dW8AJ3YxAANAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0r4AM9S7 + ALnUvAD91LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1LwA/9S8AP/UvAD/1bwA/NS8ALPSuwAtAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAANa4ABnVvABm1LwAsNS7ANvUvADy1LwA/9S8APHUvADZ1L0ArdO7 + AGLOtgAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///4AP//////////////+P// + 4AAf//////////////j//4AAD//////////////4//8AAAf/////////////+P/+AAAD//////////// + //j//AAAAf////////7////4//wAAAD///////+AB///+P/4AAAA///////+AAH///j/+AAAAH////// + /AAAf//4//AAAAB///////gAAD//+P/wAAAAP//////wAAAf//j/8AAAAD//////4AAAD//4//AAAAA/ + /////8AAAA//+P/gAAAAP//////AAAAH//j/4AAAAD//////gAAAB//4/+AAAAA//////4AAAAP/+P/g + AAAAP/////8AAAAD//j/8AAAAD//////AAAAA//4//AAAAA//////wAAAAP/+P/wAAAAf/////8AAAAB + //j/8AAAAH//////AAAAAf/4//gAAAB//////wAAAAH/+P/4AAAAf/////8AAAAB//j//AAAAD////// + AAAAA//4//4AAAA//////wAAAAP/+P/+AAAAH/////+AAAAD//j//4AAAA//////gAAAA//4///AAAAH + /////4AAAAf/+P//4AAAB//////AAAAH//j///wAAAP/////wAAAD//4/////AAB/////4AAAB//+P// + //4AAP////8AAAAf//j/////AAB/////AAAAf//4/////4AAf////gAAAP//+P////+AAD////wAAAP/ + //j/////wAAf///8AAAP///4/////+AAD///+AAH////+P/////wAA////AAD/////j/////+AAH///w + AB/////4//////gAA///4AAf////+P/////8AAH//8AAP/////j//////gAB///AAH/////4//////8A + AP//gAB/////+P//////AAB//wAA//////j//////4AAPAcAAf/////4///////AAAAAAAH/////+P// + ////4AAAAAAD//////j//////+AAAAAAB//////4///////wAAAAAAf/////+P//////+AAAAAAP//// + //j///////wAAAAAH//////4///////8AAAAAB//////+P///////gAAAAAf//////j///////8AAAAA + H//////4///////+AAAAAA//////+P///////AAAAAAP//////j///////wAAAAAB//////4///////8 + AAAAAAf/////+P//////+AAAAAAD//////j///////gAAAAAA///wD/4///////4AAAAAAP//gAH+P// + ////8AAAAAAD//wAAfj///////AAAAAAAf/wAAD4///////wAAAAAAB/4AAAeP//////8AAAAAAAA8AA + ADj///////AAAAAAAAAAAAAY///////wAAAAAAAAAAAAGP//////8AAAAAAAAAAAAAj///////AAAAAA + AAAAAAAI///////wAAAAAAAAAAAAAP//////+AAAAAAAAAAAAAD///////AAAAAAAAAAAAAA///////A + AAAAAAAAAAAAAP//////gAAAAAAAAAAAAAD//////gAAAAAAAAAAAAAA//////wAAAAAAAAAAAAAAP// + ///wAAAAAAAOAAAAAAD/////4AAAAAAAH/AAAAAA/////4AAAAAAAB/+AAAAAP////8AAAAAAAA//wAA + AAD////8AAAAAAAAf/8AAAAI////+AAAAAAAAP//AAAACP///+AAABAAAAH//4AAABj/wB+AAAA8AAAH + ///AAAAY/wADAAAA/wAAH///wAAAOPwAAAAAAf/AAH///+AAAHj4AAAAAAf/4AD////wAAD48AAAAAAP + /+AA/////AAD+OAAAAAAP//gAP////8AB/jAAAAAAH//4AD/////4H/4wAAAAAH//+AA////////+IAA + AAAD///gAP////////iAAAAAD///4AD////////4AAAAAD///+AA////////+AAAAAB////gAP////// + //gAAAAB////4AD////////4AAAAA////+AA////////+AAAAAP////gAP////////gAAAAD////4AD/ + ///////4AAAAA////8AAf///////+AAAAAP///8AAD////////gAAAAD///+AAAP///////4AAAAA/// + /AAAB///////+AAAAAf///gAAAP///////iAAAAH///4AAAD///////4gAAAB///8AAAAf//////+MAA + AA///+AAAAH///////jAAAAf///gAAAA///////44AAAP///4AAAAP//////+PAAAD///8AAAAD///// + //j4AAD////AAAAAf//////4/gAB////wAAAAH//////+P+AB////8AAAAB///////j/+H/////AAAAA + f//////4////////wAAAAH//////+P///////8AAAAB///////j////////AAAAAf//////4//////// + 4AAAAP//////+P///////+AAAAD///////j////////gAAAA///////4////////8AAAAf//////+P// + //////AAAAH///////j////////4AAAD///////4/////////AAAB///////+P////////4AAA////// + //j/////////AAAf///////4/////////8AAf///////+P/////////wAf////////g= + + + \ No newline at end of file diff --git a/EM_UI/Dialogs/PolicyEffects.Asc.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffects.Asc.cs similarity index 98% rename from EM_UI/Dialogs/PolicyEffects.Asc.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffects.Asc.cs index 7f93914..3746818 100644 --- a/EM_UI/Dialogs/PolicyEffects.Asc.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffects.Asc.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Windows.Forms; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { partial class PolicyEffects { @@ -91,8 +91,7 @@ private void goAsc() arguments.Add("FilePackages", filePackages); arguments.Add("userinput", userVariables); - PiInterface statisticsPresenter = PiLoader.GetPlugIn("Statistics Presenter"); - statisticsPresenter.Run(arguments); + EM_Statistics.StatisticsPresenter.StatisticsPresenter.Run(arguments); } catch (Exception exception) { MessageBox.Show(exception.Message); } } diff --git a/EM_UI/Dialogs/PolicyEffects.Designer.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffects.Designer.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffects.Designer.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffects.Designer.cs index 57aa96b..5153760 100644 --- a/EM_UI/Dialogs/PolicyEffects.Designer.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffects.Designer.cs @@ -1,6 +1,6 @@ using System.Drawing; using System.Windows.Forms; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { partial class PolicyEffects { diff --git a/EM_UI/Dialogs/PolicyEffects.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffects.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffects.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffects.cs index d0af4a5..aff42ec 100644 --- a/EM_UI/Dialogs/PolicyEffects.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffects.cs @@ -15,7 +15,7 @@ using System.Linq; using System.Windows.Forms; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { internal partial class PolicyEffects : Form { diff --git a/EM_UI/Dialogs/PolicyEffects.resx b/EM_UI/Dialogs/Tools/PET/PolicyEffects.resx similarity index 100% rename from EM_UI/Dialogs/PolicyEffects.resx rename to EM_UI/Dialogs/Tools/PET/PolicyEffects.resx diff --git a/EM_UI/Dialogs/PolicyEffectsAlphaRange.Designer.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.Designer.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffectsAlphaRange.Designer.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.Designer.cs index b77ef26..1a71e8c 100644 --- a/EM_UI/Dialogs/PolicyEffectsAlphaRange.Designer.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.Designer.cs @@ -1,4 +1,4 @@ -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { partial class PolicyEffectsAlphaRange { diff --git a/EM_UI/Dialogs/PolicyEffectsAlphaRange.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffectsAlphaRange.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.cs index 6eccbe4..d336ee9 100644 --- a/EM_UI/Dialogs/PolicyEffectsAlphaRange.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Windows.Forms; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { public partial class PolicyEffectsAlphaRange : Form { diff --git a/EM_UI/Dialogs/PolicyEffectsAlphaRange.resx b/EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.resx similarity index 100% rename from EM_UI/Dialogs/PolicyEffectsAlphaRange.resx rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsAlphaRange.resx diff --git a/EM_UI/Dialogs/PolicyEffectsChooseMode.Designer.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.Designer.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffectsChooseMode.Designer.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.Designer.cs index 5959dad..7c519ae 100644 --- a/EM_UI/Dialogs/PolicyEffectsChooseMode.Designer.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.Designer.cs @@ -1,4 +1,4 @@ -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { partial class PolicyEffectsChooseMode { diff --git a/EM_UI/Dialogs/PolicyEffectsChooseMode.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.cs similarity index 97% rename from EM_UI/Dialogs/PolicyEffectsChooseMode.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.cs index 996d1e5..583dca8 100644 --- a/EM_UI/Dialogs/PolicyEffectsChooseMode.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; using System.Windows.Forms; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { public partial class PolicyEffectsChooseMode : Form { diff --git a/EM_UI/Dialogs/PolicyEffectsChooseMode.resx b/EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.resx similarity index 100% rename from EM_UI/Dialogs/PolicyEffectsChooseMode.resx rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsChooseMode.resx diff --git a/EM_UI/Dialogs/PolicyEffectsEM2.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffectsEM2.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffectsEM2.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsEM2.cs index 240c10e..6f9a259 100644 --- a/EM_UI/Dialogs/PolicyEffectsEM2.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffectsEM2.cs @@ -13,7 +13,7 @@ using System.Windows.Forms; using System.Xml; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { internal partial class PolicyEffects : Form { diff --git a/EM_UI/Dialogs/PolicyEffectsEM3.cs b/EM_UI/Dialogs/Tools/PET/PolicyEffectsEM3.cs similarity index 99% rename from EM_UI/Dialogs/PolicyEffectsEM3.cs rename to EM_UI/Dialogs/Tools/PET/PolicyEffectsEM3.cs index 2f02cef..a522534 100644 --- a/EM_UI/Dialogs/PolicyEffectsEM3.cs +++ b/EM_UI/Dialogs/Tools/PET/PolicyEffectsEM3.cs @@ -10,7 +10,7 @@ using System.Linq; using System.Windows.Forms; -namespace EM_UI.Dialogs +namespace EM_UI.Dialogs.Tools { internal partial class PolicyEffects : Form { diff --git a/EM_UI/EM_UI.csproj b/EM_UI/EM_UI.csproj index 5895fa4..d5845fa 100644 --- a/EM_UI/EM_UI.csproj +++ b/EM_UI/EM_UI.csproj @@ -148,12 +148,21 @@ ..\packages\EPPlus.4.5.3.2\lib\net40\EPPlus.dll + + ..\packages\Microsoft.AspNetCore.Connections.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Hosting.2.2.7\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.dll + ..\packages\Microsoft.AspNetCore.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll ..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll + ..\packages\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll @@ -163,28 +172,73 @@ ..\packages\Microsoft.AspNetCore.Http.Features.3.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll + + ..\packages\Microsoft.AspNetCore.Server.Kestrel.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.dll + + + ..\packages\Microsoft.AspNetCore.Server.Kestrel.Core.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Core.dll + + + ..\packages\Microsoft.AspNetCore.Server.Kestrel.Https.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Https.dll + + + ..\packages\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.2.2.1\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll + ..\packages\Microsoft.AspNetCore.StaticFiles.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.StaticFiles.dll + + ..\packages\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll + ..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + ..\packages\Microsoft.Extensions.Configuration.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll + ..\packages\Microsoft.Extensions.Configuration.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll + + ..\packages\Microsoft.Extensions.Configuration.Binder.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll + + + ..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll + + + ..\packages\Microsoft.Extensions.Configuration.FileExtensions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Configuration.FileExtensions.dll + + + ..\packages\Microsoft.Extensions.DependencyInjection.3.1.2\lib\net461\Microsoft.Extensions.DependencyInjection.dll + ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll ..\packages\Microsoft.Extensions.FileProviders.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll + + ..\packages\Microsoft.Extensions.FileProviders.Physical.3.1.2\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Physical.dll + + + ..\packages\Microsoft.Extensions.FileSystemGlobbing.3.1.2\lib\netstandard2.0\Microsoft.Extensions.FileSystemGlobbing.dll + ..\packages\Microsoft.Extensions.Hosting.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll + + ..\packages\Microsoft.Extensions.Logging.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Logging.dll + ..\packages\Microsoft.Extensions.Logging.Abstractions.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + ..\packages\Microsoft.Extensions.ObjectPool.3.1.2\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll + ..\packages\Microsoft.Extensions.Options.3.1.2\lib\netstandard2.0\Microsoft.Extensions.Options.dll @@ -204,10 +258,14 @@ ..\packages\Octokit.0.41.0\lib\net46\Octokit.dll + ..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll + + ..\packages\System.Collections.Immutable.1.7.0\lib\netstandard2.0\System.Collections.Immutable.dll + ..\packages\System.ComponentModel.Annotations.4.7.0\lib\net461\System.ComponentModel.Annotations.dll @@ -215,6 +273,9 @@ + + ..\packages\System.Diagnostics.DiagnosticSource.4.7.0\lib\net46\System.Diagnostics.DiagnosticSource.dll + ..\packages\System.IO.Pipelines.4.7.0\lib\netstandard2.0\System.IO.Pipelines.dll @@ -226,16 +287,24 @@ ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + ..\packages\System.Reflection.Metadata.1.8.0\lib\netstandard2.0\System.Reflection.Metadata.dll + ..\packages\System.Runtime.CompilerServices.Unsafe.4.7.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Security.Cryptography.Cng.4.7.0\lib\net462\System.Security.Cryptography.Cng.dll + True + ..\packages\System.Text.Encodings.Web.4.7.0\lib\netstandard2.0\System.Text.Encodings.Web.dll ..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + @@ -270,6 +339,18 @@ ShowLicenceForm.cs + + Form + + + ChooseStatistics.cs + + + Form + + + MacrovalidationForm.cs + @@ -487,19 +568,19 @@ AdminExtensionsOrGroups.cs - + Form - + Form - + PolicyEffectsAlphaRange.cs - + Form - + PolicyEffectsChooseMode.cs @@ -538,16 +619,16 @@ NumberedSearchResultsForm.cs - + Form - + PolicyEffects.cs - + Form - + Form @@ -594,6 +675,15 @@ + + + + Form + + + ExternalStatisticsForm.cs + + Form @@ -1087,13 +1177,19 @@ ShowLicenceForm.cs + + ChooseStatistics.cs + + + MacrovalidationForm.cs + AdminExtensionsOrGroups.cs - + PolicyEffectsAlphaRange.cs - + PolicyEffectsChooseMode.cs @@ -1122,7 +1218,7 @@ ConfigurePathsForm.cs Designer - + PolicyEffects.cs @@ -1143,6 +1239,10 @@ UnhideRowsForm.cs Designer + + ExternalStatisticsForm.cs + Designer + ExchangeRatesForm.cs @@ -1379,7 +1479,11 @@ - + + + + + @@ -1481,6 +1585,10 @@ {3f552049-a3a8-4afc-aa44-ccb648ff76a1} EM_Transformer + + {5ef7f33a-2161-4523-9f6a-61a5d7316177} + EM_BackEnd + {9cfaccaa-f897-480f-b05f-c6087c3ef15f} EM_Common_Win diff --git a/EM_UI/EM_UI_MainForm.Designer.cs b/EM_UI/EM_UI_MainForm.Designer.cs index abce001..6fdb5b9 100644 --- a/EM_UI/EM_UI_MainForm.Designer.cs +++ b/EM_UI/EM_UI_MainForm.Designer.cs @@ -30,14 +30,14 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EM_UI_MainForm)); - DevExpress.Utils.SuperToolTip superToolTip1 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipItem toolTipItem1 = new DevExpress.Utils.ToolTipItem(); - DevExpress.Utils.SuperToolTip superToolTip2 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipItem toolTipItem2 = new DevExpress.Utils.ToolTipItem(); - DevExpress.Utils.SuperToolTip superToolTip3 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipItem toolTipItem3 = new DevExpress.Utils.ToolTipItem(); - DevExpress.Utils.SuperToolTip superToolTip4 = new DevExpress.Utils.SuperToolTip(); - DevExpress.Utils.ToolTipItem toolTipItem4 = new DevExpress.Utils.ToolTipItem(); + DevExpress.Utils.SuperToolTip superToolTip5 = new DevExpress.Utils.SuperToolTip(); + DevExpress.Utils.ToolTipItem toolTipItem5 = new DevExpress.Utils.ToolTipItem(); + DevExpress.Utils.SuperToolTip superToolTip6 = new DevExpress.Utils.SuperToolTip(); + DevExpress.Utils.ToolTipItem toolTipItem6 = new DevExpress.Utils.ToolTipItem(); + DevExpress.Utils.SuperToolTip superToolTip7 = new DevExpress.Utils.SuperToolTip(); + DevExpress.Utils.ToolTipItem toolTipItem7 = new DevExpress.Utils.ToolTipItem(); + DevExpress.Utils.SuperToolTip superToolTip8 = new DevExpress.Utils.SuperToolTip(); + DevExpress.Utils.ToolTipItem toolTipItem8 = new DevExpress.Utils.ToolTipItem(); this.EM_MainRibbon = new DevExpress.XtraBars.Ribbon.RibbonControl(); this.applicationMenu = new DevExpress.XtraBars.Ribbon.ApplicationMenu(this.components); this.btnSave = new DevExpress.XtraBars.BarButtonItem(); @@ -177,6 +177,9 @@ private void InitializeComponent() this.btnVCMergeVariablesOnlineBundle = new DevExpress.XtraBars.BarButtonItem(); this.btnVCNewBundleLocalVersion = new DevExpress.XtraBars.BarButtonItem(); this.btnLicence = new DevExpress.XtraBars.BarButtonItem(); + this.btnExternalStatistics = new DevExpress.XtraBars.BarButtonItem(); + this.btnMacroValidation = new DevExpress.XtraBars.BarButtonItem(); + this.btnStatistics = new DevExpress.XtraBars.BarButtonItem(); this.ribbonPageEuromod = new DevExpress.XtraBars.Ribbon.RibbonPage(); this.CountriesRun = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); this.ribbonPageGroupLoadedCountry = new DevExpress.XtraBars.Ribbon.RibbonPageGroup(); @@ -393,10 +396,12 @@ private void InitializeComponent() this.btnVCMergeVariableOnlineBundle, this.btnVCMergeVariablesOnlineBundle, this.btnVCNewBundleLocalVersion, - this.btnLicence}); + this.btnLicence, + this.btnExternalStatistics, + this.btnMacroValidation, + this.btnStatistics}); this.EM_MainRibbon.Location = new System.Drawing.Point(0, 0); - this.EM_MainRibbon.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); - this.EM_MainRibbon.MaxItemId = 303; + this.EM_MainRibbon.MaxItemId = 305; this.EM_MainRibbon.Name = "EM_MainRibbon"; this.EM_MainRibbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { this.ribbonPageEuromod, @@ -414,7 +419,7 @@ private void InitializeComponent() this.EM_MainRibbon.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonControlStyle.Office2010; this.EM_MainRibbon.ShowExpandCollapseButton = DevExpress.Utils.DefaultBoolean.False; this.EM_MainRibbon.ShowToolbarCustomizeItem = false; - this.EM_MainRibbon.Size = new System.Drawing.Size(1594, 155); + this.EM_MainRibbon.Size = new System.Drawing.Size(1366, 144); this.EM_MainRibbon.StatusBar = this.ribbonStatusBar1; this.EM_MainRibbon.Toolbar.ItemLinks.Add(this.btnUndo); this.EM_MainRibbon.Toolbar.ItemLinks.Add(this.btnRedo); @@ -1377,9 +1382,9 @@ private void InitializeComponent() this.btnVCDisConnect.Id = 199; this.btnVCDisConnect.LargeGlyph = global::EM_UI.Properties.Resources.vc_connect; this.btnVCDisConnect.Name = "btnVCDisConnect"; - toolTipItem1.Text = "Connect your currently open local project to a VC project/bundle."; - superToolTip1.Items.Add(toolTipItem1); - this.btnVCDisConnect.SuperTip = superToolTip1; + toolTipItem5.Text = "Connect your currently open local project to a VC project/bundle."; + superToolTip5.Items.Add(toolTipItem5); + this.btnVCDisConnect.SuperTip = superToolTip5; this.btnVCDisConnect.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnVCLinkUnLink_ItemClick); // // btnVCRemovePrivate @@ -1478,9 +1483,9 @@ private void InitializeComponent() this.btnVCDownloadBundle.Id = 215; this.btnVCDownloadBundle.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("btnVCDownloadBundle.LargeGlyph"))); this.btnVCDownloadBundle.Name = "btnVCDownloadBundle"; - toolTipItem2.Text = "Update the currently open local project"; - superToolTip2.Items.Add(toolTipItem2); - this.btnVCDownloadBundle.SuperTip = superToolTip2; + toolTipItem6.Text = "Update the currently open local project"; + superToolTip6.Items.Add(toolTipItem6); + this.btnVCDownloadBundle.SuperTip = superToolTip6; this.btnVCDownloadBundle.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnVCDownloadBundle_ItemClick); // // btnVCStartMerging @@ -1491,10 +1496,10 @@ private void InitializeComponent() this.btnVCStartMerging.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("btnVCStartMerging.LargeGlyph"))); this.btnVCStartMerging.Name = "btnVCStartMerging"; this.btnVCStartMerging.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.Large; - toolTipItem3.Text = "The online version will be locked. Users will not be allowed to change or upload " + + toolTipItem7.Text = "The online version will be locked. Users will not be allowed to change or upload " + "a bundle to this project until you finish the current merge."; - superToolTip3.Items.Add(toolTipItem3); - this.btnVCStartMerging.SuperTip = superToolTip3; + superToolTip7.Items.Add(toolTipItem7); + this.btnVCStartMerging.SuperTip = superToolTip7; this.btnVCStartMerging.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnVCStartMerging_ItemClick); // // btnVCFinishMerging @@ -1541,9 +1546,9 @@ private void InitializeComponent() this.btnVCNewProject.Id = 221; this.btnVCNewProject.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("btnVCNewProject.LargeGlyph"))); this.btnVCNewProject.Name = "btnVCNewProject"; - toolTipItem4.Text = "Create a new local project out of a given VC project/bundle."; - superToolTip4.Items.Add(toolTipItem4); - this.btnVCNewProject.SuperTip = superToolTip4; + toolTipItem8.Text = "Create a new local project out of a given VC project/bundle."; + superToolTip8.Items.Add(toolTipItem8); + this.btnVCNewProject.SuperTip = superToolTip8; this.btnVCNewProject.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnNewProject_ItemClick); // // btnVCSettings @@ -1606,6 +1611,32 @@ private void InitializeComponent() this.btnLicence.Name = "btnLicence"; this.btnLicence.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnLicence_ItemClick); // + // btnExternalStatistics + // + this.btnExternalStatistics.Caption = "External Statistics"; + this.btnExternalStatistics.Glyph = global::EM_UI.Properties.Resources.ValidationInfo; + this.btnExternalStatistics.Id = 302; + this.btnExternalStatistics.Name = "btnExternalStatistics"; + this.btnExternalStatistics.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.barExternalStatistics_ItemClick); + // + // btnMacroValidation + // + this.btnMacroValidation.Caption = "Macrovalidation"; + this.btnMacroValidation.Glyph = ((System.Drawing.Image)(resources.GetObject("btnMacroValidation.Glyph"))); + this.btnMacroValidation.Id = 303; + this.btnMacroValidation.LargeGlyph = ((System.Drawing.Image)(resources.GetObject("btnMacroValidation.LargeGlyph"))); + this.btnMacroValidation.Name = "btnMacroValidation"; + this.btnMacroValidation.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnMacroValidation_ItemClick); + // + // btnStatistics + // + this.btnStatistics.Caption = "EUROMOD Statistics"; + this.btnStatistics.Glyph = global::EM_UI.Properties.Resources.EUROMODStatistics; + this.btnStatistics.Id = 304; + this.btnStatistics.LargeGlyph = global::EM_UI.Properties.Resources.EUROMODStatistics; + this.btnStatistics.Name = "btnStatistics"; + this.btnStatistics.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.btnStatistics_ItemClick); + // // ribbonPageEuromod // this.ribbonPageEuromod.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { @@ -1737,7 +1768,7 @@ private void InitializeComponent() // this.ribbonPageGroupThisAndThat.ItemLinks.Add(this.btnRestore); this.ribbonPageGroupThisAndThat.ItemLinks.Add(this.btnUpratingIndices); - this.ribbonPageGroupThisAndThat.ItemLinks.Add(this.btnIndirectTaxes); + this.ribbonPageGroupThisAndThat.ItemLinks.Add(this.btnExternalStatistics); this.ribbonPageGroupThisAndThat.ItemLinks.Add(this.btnMergeCountry); this.ribbonPageGroupThisAndThat.Name = "ribbonPageGroupThisAndThat"; this.ribbonPageGroupThisAndThat.ShowCaptionButton = false; @@ -1747,6 +1778,7 @@ private void InitializeComponent() // this.ribbonPageGroupExtensions.ItemLinks.Add(this.btnAdminLExtensions); this.ribbonPageGroupExtensions.ItemLinks.Add(this.btnSetExtensionsSwitches); + this.ribbonPageGroupExtensions.ItemLinks.Add(this.btnIndirectTaxes); this.ribbonPageGroupExtensions.ItemLinks.Add(this.btnAddToOnExtension, true); this.ribbonPageGroupExtensions.ItemLinks.Add(this.btnAddToOffExtension); this.ribbonPageGroupExtensions.ItemLinks.Add(this.btnRemoveFromExtension); @@ -1930,6 +1962,8 @@ private void InitializeComponent() // ribbonPageGroupTools // this.ribbonPageGroupTools.ItemLinks.Add(this.btnPolicyEffects); + this.ribbonPageGroupTools.ItemLinks.Add(this.btnMacroValidation); + this.ribbonPageGroupTools.ItemLinks.Add(this.btnStatistics); this.ribbonPageGroupTools.Name = "ribbonPageGroupTools"; this.ribbonPageGroupTools.Text = "Tools"; // @@ -1972,11 +2006,10 @@ private void InitializeComponent() this.ribbonStatusBar1.ItemLinks.Add(this.barText_TextSize); this.ribbonStatusBar1.ItemLinks.Add(this.btnTextSizePlus); this.ribbonStatusBar1.ItemLinks.Add(this.btnTextSizeMinus); - this.ribbonStatusBar1.Location = new System.Drawing.Point(0, 923); - this.ribbonStatusBar1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.ribbonStatusBar1.Location = new System.Drawing.Point(0, 744); this.ribbonStatusBar1.Name = "ribbonStatusBar1"; this.ribbonStatusBar1.Ribbon = this.EM_MainRibbon; - this.ribbonStatusBar1.Size = new System.Drawing.Size(1594, 31); + this.ribbonStatusBar1.Size = new System.Drawing.Size(1366, 31); // // ribbonPageGroup1 // @@ -2015,10 +2048,9 @@ private void InitializeComponent() this.treeList.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.helpProvider.SetHelpNavigator(this.treeList, System.Windows.Forms.HelpNavigator.TableOfContents); this.treeList.ImeMode = System.Windows.Forms.ImeMode.Katakana; - this.treeList.Location = new System.Drawing.Point(0, 155); + this.treeList.Location = new System.Drawing.Point(0, 144); this.treeList.LookAndFeel.SkinName = "Black"; this.treeList.LookAndFeel.UseDefaultLookAndFeel = false; - this.treeList.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.treeList.Name = "treeList"; this.treeList.OptionsBehavior.AllowCopyToClipboard = false; this.treeList.OptionsBehavior.DragNodes = true; @@ -2033,7 +2065,7 @@ private void InitializeComponent() this.YesNoEditorCombo}); this.treeList.RightToLeft = System.Windows.Forms.RightToLeft.No; this.helpProvider.SetShowHelp(this.treeList, true); - this.treeList.Size = new System.Drawing.Size(1594, 768); + this.treeList.Size = new System.Drawing.Size(1366, 600); this.treeList.StateImageList = this.mainFormStateImageList; this.treeList.TabIndex = 2; this.treeList.ToolTipController = this.toolTipController; @@ -2154,6 +2186,11 @@ private void InitializeComponent() this.mainFormStateImageList.Images.SetKeyName(4, "redarrow.png"); this.mainFormStateImageList.Images.SetKeyName(5, "PrivateFunction.png"); this.mainFormStateImageList.Images.SetKeyName(6, "PrivateParameter.png"); + this.mainFormStateImageList.Images.SetKeyName(7, "FunctionInconsistent.png"); + this.mainFormStateImageList.Images.SetKeyName(8, "blueballInconsistent.png"); + this.mainFormStateImageList.Images.SetKeyName(9, "PrivateParameterInconsistent.png"); + this.mainFormStateImageList.Images.SetKeyName(10, "PrivateFunctionInconsistent.png"); + this.mainFormStateImageList.Images.SetKeyName(11, "warning.png"); // // toolTipController // @@ -2173,10 +2210,9 @@ private void InitializeComponent() this.lstFormulaEditorIntelli.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(230))))); this.lstFormulaEditorIntelli.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; this.lstFormulaEditorIntelli.HorizontalScrollbar = true; - this.lstFormulaEditorIntelli.Location = new System.Drawing.Point(875, 127); - this.lstFormulaEditorIntelli.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); + this.lstFormulaEditorIntelli.Location = new System.Drawing.Point(750, 103); this.lstFormulaEditorIntelli.Name = "lstFormulaEditorIntelli"; - this.lstFormulaEditorIntelli.Size = new System.Drawing.Size(49, 20); + this.lstFormulaEditorIntelli.Size = new System.Drawing.Size(43, 17); this.lstFormulaEditorIntelli.TabIndex = 5; this.lstFormulaEditorIntelli.Visible = false; // @@ -2186,10 +2222,10 @@ private void InitializeComponent() this.lblComboboxEditorToolTip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(230))))); this.lblComboboxEditorToolTip.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.lblComboboxEditorToolTip.ForeColor = System.Drawing.Color.Black; - this.lblComboboxEditorToolTip.Location = new System.Drawing.Point(875, 63); - this.lblComboboxEditorToolTip.MaximumSize = new System.Drawing.Size(466, 369); + this.lblComboboxEditorToolTip.Location = new System.Drawing.Point(750, 51); + this.lblComboboxEditorToolTip.MaximumSize = new System.Drawing.Size(400, 300); this.lblComboboxEditorToolTip.Name = "lblComboboxEditorToolTip"; - this.lblComboboxEditorToolTip.Size = new System.Drawing.Size(54, 19); + this.lblComboboxEditorToolTip.Size = new System.Drawing.Size(43, 15); this.lblComboboxEditorToolTip.TabIndex = 8; this.lblComboboxEditorToolTip.Text = "ToolTip"; this.lblComboboxEditorToolTip.Visible = false; @@ -2262,16 +2298,15 @@ private void InitializeComponent() this.AllowDraggingByPageCategory = DevExpress.Utils.DefaultBoolean.False; this.Appearance.BackColor = System.Drawing.Color.Transparent; this.Appearance.Options.UseBackColor = true; - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 16F); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1594, 954); + this.ClientSize = new System.Drawing.Size(1366, 775); this.Controls.Add(this.lblComboboxEditorToolTip); this.Controls.Add(this.lstFormulaEditorIntelli); this.Controls.Add(this.treeList); this.Controls.Add(this.ribbonStatusBar1); this.Controls.Add(this.EM_MainRibbon); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4); this.Name = "EM_UI_MainForm"; this.Ribbon = this.EM_MainRibbon; this.StatusBar = this.ribbonStatusBar1; @@ -2495,6 +2530,9 @@ private void InitializeComponent() private DevExpress.XtraBars.BarButtonItem btnVCMergeVariablesOnlineBundle; private DevExpress.XtraBars.BarButtonItem btnVCNewBundleLocalVersion; private DevExpress.XtraBars.BarButtonItem btnLicence; + private DevExpress.XtraBars.BarButtonItem btnExternalStatistics; + private DevExpress.XtraBars.BarButtonItem btnMacroValidation; + private DevExpress.XtraBars.BarButtonItem btnStatistics; } } diff --git a/EM_UI/EM_UI_MainForm.cs b/EM_UI/EM_UI_MainForm.cs index 45a194e..4051f9c 100644 --- a/EM_UI/EM_UI_MainForm.cs +++ b/EM_UI/EM_UI_MainForm.cs @@ -12,6 +12,7 @@ using EM_UI.DeveloperInfo; using EM_UI.DeveloperInfo.ReleaseValidation; using EM_UI.Dialogs; +using EM_UI.Dialogs.Tools; using EM_UI.Editor; using EM_UI.ExtensionAndGroupManagement; using EM_UI.GlobalAdministration; @@ -48,6 +49,7 @@ internal partial class EM_UI_MainForm : DevExpress.XtraBars.Ribbon.RibbonForm TreeListBuilder _treeListBuilder = null; TreeListManager _treeListManager = null; ComponentUseForm _componentUseForm = null; + EM_Statistics.InDepthAnalysis.InDepthAnalysisForm _InDepthAnalysisForm = null; ADOUndoManager _undoManager = null; FormulaEditorManager _formulaEditorManager = null; @@ -183,6 +185,15 @@ void EM_UI_MainForm_FormClosing(object sender, FormClosingEventArgs e) e.Cancel = true; return; } + if (_InDepthAnalysisForm != null && !_InDepthAnalysisForm.IsDisposed) + { + if (MessageBox.Show("InDepthAnalysis is still open, would you like to close EUROMOD anyway?", "Closing EUROMOD", MessageBoxButtons.OKCancel) == DialogResult.Cancel) + { + e.Cancel = true; + return; + } + else _InDepthAnalysisForm.Close(); + } if (_componentUseForm != null) _componentUseForm.Close(); EM_AppContext.Instance.RemoveCountryMainForm(this); isClosing = true; @@ -517,6 +528,7 @@ internal void SetButtonGreyState() btnSetNotPrivateExtensionL.Enabled = _countryConfigFacade != null && !_isAddOn; btnExpandLookGroup.Enabled = _countryConfigFacade != null && !_isAddOn; btnUpratingIndices.Enabled = _countryConfigFacade != null && !_isAddOn; + btnExternalStatistics.Enabled = _countryConfigFacade != null && !_isAddOn; btnIndirectTaxes.Enabled = _countryConfigFacade != null && !_isAddOn; btnRestore.Enabled = _countryConfigFacade != null && !(_treeListBuilder != null && _treeListBuilder.SinglePolicyView); btnMergeCountry.Enabled = _countryConfigFacade != null && !(_treeListBuilder != null && _treeListBuilder.SinglePolicyView); @@ -541,6 +553,9 @@ internal void SetButtonGreyState() btnShowMatrixViewOfIncomelists.Enabled = _countryConfigFacade != null; btnShowHiddenSystems.Enabled = _countryConfigFacade != null; + btnExternalStatistics.Visibility = BarItemVisibility.Always; + btnMacroValidation.Visibility = BarItemVisibility.Always; + ribbonPageLookGroup.Visible = !_isAddOn; ribbonPageGroupExtensions.Visible = !_isAddOn; @@ -1113,6 +1128,7 @@ internal bool PerformAction(BaseAction action, bool updateNodes = true, bool upd void btnRun_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_runMainForm == null || _runMainForm.IsDisposed) _runMainForm = new RunMainForm(); _runMainForm.Show(_countryShortName); } void btnUpratingIndices_ItemClick(object sender, ItemClickEventArgs e) { (new UpratingIndices.UpratingIndicesForm(this)).ShowDialog(); } + void barExternalStatistics_ItemClick(object sender, ItemClickEventArgs e){ new ExternalStatistics.ExternalStatisticsForm(this).ShowDialog(); } void btnIndirectTaxes_ItemClick(object sender, ItemClickEventArgs e) { new IndirectTaxes.IndirectTaxesForm(this).ShowDialog(); } void btnHICP_ItemClick(object sender, ItemClickEventArgs e) { GlobalAdministrator.ShowHICPDialog(); } void btnExchangeRates_ItemClick(object sender, ItemClickEventArgs e) { GlobalAdministrator.ShowExchangeRatesDialog(); } @@ -1303,6 +1319,19 @@ internal void ShowComponentUseForm() if (!_componentUseForm.Visible) _componentUseForm.Show(); } + internal void ShowStatisticsPresetnerForm() + { + EM_Statistics.StatisticsPresenter.StatisticsPresenter.Run(); + } + + internal void ShowInDepthAnalysisForm() + { + if (_InDepthAnalysisForm == null || _InDepthAnalysisForm.IsDisposed) + _InDepthAnalysisForm = new EM_Statistics.InDepthAnalysis.InDepthAnalysisForm(); + if (!_InDepthAnalysisForm.Visible) _InDepthAnalysisForm.Show(); + _InDepthAnalysisForm.BringToFront(); + } + void OpenOutputFile() { OpenFileDialog openFileDialog = new OpenFileDialog(); @@ -1417,6 +1446,22 @@ private void btnPolicyEffects_ItemClick(object sender, ItemClickEventArgs e) pc.Show(this); } + private void btnMacroValidation_ItemClick(object sender, ItemClickEventArgs e) + { + new Macrovalidation.MacrovalidationForm(); + //if (mf != null && !mf.IsDisposed) mf.Show(); + } + + private void btnStatistics_ItemClick(object sender, ItemClickEventArgs e) + { + EM_UI.Dialogs.Tools.ChooseStatistics cs = new EM_UI.Dialogs.Tools.ChooseStatistics(); + cs.ShowDialog(); + if (cs.selection == ChooseStatistics.SelectionType.StatisticsPresenter) + ShowStatisticsPresetnerForm(); + else if (cs.selection == ChooseStatistics.SelectionType.InDepthAnalysis) + ShowInDepthAnalysisForm(); + } + private void btnShowHiddenSystems_ItemClick(object sender, ItemClickEventArgs e) { showHiddenSystemsBox(); @@ -1513,8 +1558,9 @@ internal void FillPlugInGallery() } } - #endregion plugins + + #endregion plugins } } diff --git a/EM_UI/EM_UI_MainForm.resx b/EM_UI/EM_UI_MainForm.resx index 7bbf1b8..69b4b4b 100644 --- a/EM_UI/EM_UI_MainForm.resx +++ b/EM_UI/EM_UI_MainForm.resx @@ -2871,6 +2871,162 @@ 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 + bJGc7QAAAABJRU5ErkJggg== + + + + + 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 + bJGc7QAAAABJRU5ErkJggg== @@ -2879,12 +3035,170 @@ 656, 18 + + 485, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAW + IQAAAk1TRnQBSQFMAgEBDAEAASgBDQEoAQ0BEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABQAMAAQEBAAEgBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8AIgAk/wHhAfcC/wEC + AcIC/wEAAcEC/wEAAcAB/QH/AQABwAH+Af8BAAHBAv8BAwHDJv8B4QH3Av8BAgHCAv8BAAHBAv8BAAHA + Af0B/wEAAcAB/gH/AQABwQL/AQMBwyb/AXIB3gL/AQMBwgL/AQABwQL/AQABvQH6Af8BAAHAAf4B/wEA + AcEC/wELAcQC/wNVAbIBAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHB + Av8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BLgGNAasB9ST/AfEB/AL/AWAB2gL/ + AQABwQL/AQABowHXAf8BAAGqAeEB/wEAAcEC/wFxAd4m/wHxAfwC/wFgAdoC/wEAAcEC/wEAAaMB1wH/ + AQABqgHhAf8BAAHBAv8BcQHeJv8ByAHxAv8BNQHPAv8BAAHBAv8BAAGFAa8B/wEAAbIB6wH/AQABwQL/ + AZQB5AL/AVMCVAGsAQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABvgH7Af8BAAGi + AdYB/wEAAcEC/wEAAcEC/wEAAcEC/wEAAcEC/wEAAcEC/wEAAcEC/wEAAcEq/wHNAfMC/wEaAcgC/wEA + AVcBgAH/AQABbwGfAf8BIAHKAv8B5gH5Kv8BzQHzAv8BGgHIAv8BAAFXAYAB/wEAAW8BnwH/ASABygL/ + AeYB+Sr/AZ4B5wL/ARoByAL/AQABJgE2Af8BAAGdAc8B/wFOAdUC/wH2Af0C/wUAAcEC/wEAAcEC/wEA + AcEC/wEAAcEC/wEAAcEC/wEAAcEC/wEAAV4BiAH/AwAB/wEAAcEC/wEAAcEC/wEAAcEC/wEAAcEC/wEA + AcEC/wEAAcEC/wFWAlcBuBT/Av0B9gH/AfsB+AHlAf8B+gH3AeIB/wH9AfsB8An/AaQB6AL/AQABcAGg + Af8BAAGMAbcB/wHCAfAa/wL5Av8C7QL/AusC/wL4Cv8BpAHoAv8BAAFwAaAB/wEAAYwBtwH/AcIB8Ar/ + AsoB/AH/ApMB+QH/AvwG/wL4Av8CwgH8Af8CpAH6Af8C5QH+Cf8BUQHWAv8BAAFvAaAB/wECAbAB5wH/ + AeEB+Ab/BAABUAJSAaQBAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BAAGsAeQB/wEAAWgBlQH/ + AQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABwQL/AwcBCg7/Af4B/wH6AfcB4AH/Ae8B5gGf + Af8B5gHYAV8B/wHkAdUBVQH/AesB4AGJAf8B9wHyAc0F/wHDAfAC/wEpAcwC/wE0Ac8C/wHXAfUS/wL9 + Av8C3gL/AqkC/wKAAv8CbwL/Ap8C/wLTBv8BwwHwAv8BKQHMAv8BNAHPAv8B1wH1Cv8CtQH7Af8CFgHy + Af8C3wH+Bf8C+QL/ArwB+wH/Ak0B9gH/Ao8B+QH/AvEB/gX/AcMB8AL/ASUBywL/AYkB4QL/AfQB/Ab/ + BAADBAEGAQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABwQL/AQABtwHyAf8BAAFVAXMB/wEAAcEC/wEA + AcEC/wEAAcEC/wEAAcEC/wEAAcEC/wNRAaIEAAz/AfoB+AHiAf8B5wHZAWUB/wHYAcEBCgH/AdUBvQEA + Af8B1AG8AQAB/wHVAb0BAAH/Ad8BzAE0Af8B9gHyAcsF/wGyAewC/wHFAfEW/wLeAv8CXgL/AgsC/wIA + Av8CAAL/AgAC/wJCAv8C1Ab/AbIB7AL/AcUB8Q7/AuYB/gH/AhgB8wH/Aq0B+wn/AvcC/wKqAfsB/wJJ + AfYB/wKUAfoB/wJtAfgB/wKKAfkB/wG7Ad4B/gH/AfQB/Ar/CAADUQGiAQABwQL/AQABwQL/AQABwQL/ + AQABwQL/AQABpQHaAf8DAAH/AQABwQL/AQABwQL/AQABwQL/AQABwQL/AQcBrwHtAf4IAAj/Af4B/QH4 + Af8B7wHmAZ4B/wHYAcIBDAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1QG9AQAB/wHk + AdQBUAH/AfwB+wHvGf8C+AL/ApoC/wIIAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wJmAv8C+hb/AvMB/gH/ + Aj8B9QH/Am4B9w3/AvcC/wKWAfkB/wIhAfQB/wIxAfQB/wK+AfsB/wL7Dv8IAAMFAQcBAAHBAv8BAAHB + Av8BAAHBAv8BAAHBAv8BAAGXAccB/wMAAf8BAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BTQJOAZUIAAj/ + AfwB+QHpAf8B5gHYAV8B/wHVAb0BAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8 + AQAB/wHcAcgBJAH/AfYB8QHJGf8C6AL/Al4C/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wI6Av8C5xb/ + AvcC/wJuAfcB/wI6AfQN/wL9Av8CngH6Af8CFAHyAf8COwH1Af8C0QH9Ef8MAAFLAkwBkAEAAcEC/wEA + AcEC/wEAAcEC/wEAAYoBtgH/AwAB/wEAAcEC/wEAAcEC/wEAAcEC/wEAAcEC/wMDAQQIAAj/AfoB9wHi + Af8B4gHTAUwB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHa + AcUBGQH/AfMB7AG2Gf8C4gL/Ak0C/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wIzAv8C3Bb/AvsC/wKu + AfoB/wIhAfMB/wLfAf4F/wL7Av8CtQH7Af8COQH1Af8CbgH4Af8CUwH2Af8CYAH4Af8C3AH9Af8C/gr/ + EAABEAG2AeQB/QEAAcEC/wEAAcEC/wEAAXMBpAH/AwAB/wEAAcEC/wEAAcEC/wEAAcEC/wNMAZIMAAj/ + AfwB+gHrAf8B5gHZAWQB/wHVAb0BAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8 + AQAB/wHdAcgBJgH/AfYB8gHMGf8C7AL/AmgC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wI9Av8C7Bb/ + AvwC/wKzAfoB/wISAfMB/wKMAfkB/wLAAfwB/wKpAfoB/wJLAfYB/wJjAfcB/wLjAf4B/wLZAf0B/wJL + AfYB/wJzAfgB/wLmAf0B/wL+Bv8QAAFIAkkBhwEAAcEC/wEAAcEC/wEAAWUBkQH/AwAB/wEAAcEC/wEA + AcEC/wEAAcEC/wMDAQQMAAj/Av4B+gH/AfAB6AGmAf8B2AHDAQ8B/wHUAbwBAAH/AdQBvAEAAf8B1AG8 + AQAB/wHUAbwBAAH/AdUBvQEAAf8B5QHVAVcB/wH9AfwB8xn/AvsC/wKqAv8CEgL/AgAC/wIAAv8CAAL/ + AgAC/wIBAv8CgQL/AvwW/wL4Af4B/wKFAfgB/wIhAfMB/wIfAfMB/wJYAfYB/wJbAfcB/wKBAfgB/wLR + Af0J/wLDAfwB/wJ0AfgB/wLVAf0B/wL9Bv8QAAMBAQIBBwGvAe0B/gEAAcEC/wEAAbQB7gH/AQABpQHa + Af8BAAHBAv8BAAHBAv8DRwGCEAAM/wH7AfoB6wH/AekB3QF0Af8B2AHCAQ0B/wHVAb0BAAH/AdQBvAEA + Af8B1gG+AQAB/wHhAc8BPQH/AfkB9AHWIf8C6wL/AoQC/wIUAv8CAAL/AgAC/wIHAv8CXwL/AuUe/wLz + Av8ChwH5Af8CSgH2Af8C+Cr/FAABRgJHAYEBAAHBAv8BAAHBAv8BAAHBAv8BAAHBAv8BEAGtAdIB/BQA + Dv8B/gH/AfwB+gHsAf8B8wHsAbUB/wHpAd0BcQH/AecB2QFlAf8B7wHmAZ8B/wH6AfcB4AP/Af4h/wL+ + Av8C7gL/AskC/wKhAv8CmwL/AsMC/wLpIv8C/AL/AsUB/AH/AjwB9QH/ArEB+wH/AvkB/iX/FwABAQEA + AcEC/wEAAcEC/wEAAcEC/wEAAcEC/wNCAXUUABT/Av4B+gH/Af0B/AHyAf8B/QH7AfAB/wH+Af0B9zH/ + Av0C/wL4Av8C9wL/Av0q/wL0Av8CqQH6Af8CTQH2Af8CPwH1Af8ChwH4Af8C7AH+Hf8YAAE/AkABbgEA + AcEC/wEAAcEC/wEHAa8B7QH+AwEBAhQAkP8C+AL/AugB/gH/AuEB/QH/AusB/gH/Avwe/xwAASEBngHE + AfkBAAHBAv8DQAFxGADA/xwAAykBPwFWAWkBcQHhNAACWAFfAeMCAAGmAf8CAAGmAf8CWAFfAeOYACT/ + AeEB9wL/AQIBwgL/AQABwQL/AQABwAH9Af8BAAHAAf4B/wEAAcEC/wEDAcMC/xoAAaYB/wIAAaYB/wIA + AaYB/wIAAaYB/5gAJP8B8QH8Av8BYAHaAv8BAAHBAv8BAAGjAdcB/wEAAaoB4QH/AQABwQL/AXEB3gL/ + GgABpgH/AgABpgH/AgABpgH/AgABpgH/HAADOwFjAkEBgwH5AwUBBwgAAyIBMgJIAWIB9gI+AT8BbAwA + AlMBVAGsAlkBYAHrAxYBHkQABP8D6QH/A9wB/wP+Bf8D+QH/A9oB/wPoCf8BzQHzAv8BGgHIAv8BAAFX + AYAB/wEAAW8BnwH/ASABygL/AeYB+QL/GgABpgH/AgABpgH/AgABpgH/AgABpgH/HAADHQEpAgAB8QH/ + AycBOwwAAzgBXAJBAYMB+QMjATQEAAI/AUABbwIkAY4B/AIrASwBQyAAAxwBJwI0ATUBVQMzAVIDFgEe + GAAE/wOWAf8DNQH/A/MF/wPoAf8DUAH/A14B/wPyCf8BpAHoAv8BAAFwAaAB/wEAAYwBtwH/AcIB8Ab/ + GgABpgH/AgABpgH/AgABpgH/AgABpgH/HwABAQNdAe0DQgF1EAADSwGOAlcBXAHfAy4BRwIpAX0B+gNC + AXQcAAMQARUCVwFaAb0CUwFkAfECPgF8AfgCTgGBAfcCTgFdAfADUQGiAwEBAhAABP8DxwH/AycB/wPP + Cf8D0AH/AzEB/wOWAf8D7AX/AcMB8AL/ASkBzAL/ATQBzwL/AdcB9Qb/BAADFAEcA0sBjgMUARwKAAGm + Af8CAAGmAf8CAAGmAf8CAAGmAf8IAAMUARwDSwGOAxQBHAwAAlUBVgG0A1QBrxAAAwIBAwJWAVgBvAID + AbAB/gJSAVMBqB8AAQEDWwHIAgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/A1ABmhAABP8D5AH/AzEB/wOp + Df8DsAH/AyMB/wNzAf8D0AX/AbIB7AL/AcUB8Qr/AyYBOQJYAV8B4wIAAaYB/wJYAV8B4wMUARwGAAGm + Af8CAAGmAf8CAAGmAf8CAAGmAf8EAAMUARwCWAFfAeMCAAGmAf8CWgFhAeQDKAE9CAADRAF6AlgBYgHp + EAADAwEEAlgBWgHAAgAB8QH/A04BlBwAAyoBQQJIAWIB9gIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wJV + AVwB6gMOARMMAAT/A+wB/wNPAf8Dgg3/A/wB/wM3Af8DAgH/A4gV/wJYAV8B4wIAAaYB/wIAAaYB/wIA + AaYB/wJYAV8B4wMUARwCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8DFAEcAlgBXwHjAgABpgH/AgABpgH/ + AgABpgH/AlgBXwHjCAADKgFAAgAB8QH/AxoBJAwAAksBTAGPAlIBZQH0AzEBTwJTAWQB8QM7AWQYAAND + AXcCAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AlMBZAHxAyYBOQwABP8D9AH/A3IB/wNWAf8D9gn/ + A78B/wMbAf8DSwH/A1cB/wPgEf8CWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CWAFfAeMCAAGm + Af8CAAGmAf8CAAGmAf8CAAGmAf8CWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CWAFfAeMIAAMH + AQoCIQGOAfsDOAFeCAADNgFZAgAB8QH/AzYBWQQAAzMBUwJBAYMB+QMnATsUAAJBAUIBcwIAAv8CAAL/ + AgAC/wIAAv8CAAL/AgAC/wIAAv8CUwFkAfEDJAE2DAAE/wP7Af8DpwH/Az0B/wPdBf8D2QH/AzsB/wNY + Af8DzgH/A1UB/wOAAf8D7w3/AxQBHAJYAV8B4wIAAaYB/wIAAaYB/wIAAaYB/wIAAaYB/wIAAaYB/wIA + AaYB/wIAAaYB/wIAAaYB/wIAAaYB/wIAAaYB/wIAAaYB/wIAAaYB/wJYAV8B4wMUARwIAANVAbICAAHx + Af8CAAHxAf8CAAHxAf8CJAGvAf0CSAFiAfYCTQFOAZYMAANLAY4CWAFiAekDFQEdEAADJAE1AlIBZQH0 + AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AlcBXwHoAwwBEAwABP8D8QH/A2AB/wMOAf8DRAH/A1YB/wNB + Af8DOAH/A94B/wP7Af8DuwH/A0QB/wOiAf8D+An/BAADFAEcAlgBXwHjAgABpgH/AgABpgH/AgABpgH/ + AgABpgH/AgABpgH/AgABpgH/AgABpgH/AgABpgH/AgABpgH/AgABpgH/AlgBXwHjAxQBHBAAA0gBhgJZ + AVwBzDwAAlUBVgG0AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AkkBSgGJEAAE/wP4Af8DqwH/AzcB/wNf + Af8DsAH/A7IB/wPMCf8D9AH/A8gB/wPWAf8D/An/CAADFAEcAlgBXwHjAgABpgH/AgABpgH/AgABpgH/ + AgABpgH/AgABpgH/AgABpgH/AgABpgH/AgABpgH/AlgBXwHjAxQBHBQAAykBPgIkAY4B/AMPARQ4AAMH + AQoDVAGvAlgBYgHvAkIBagH1AlIBZQH0AlgBYgHpAkkBSgGJFAAI/wPsAf8DaQH/A4AB/wP6Kf8MAAMU + ARwCWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CWAFfAeMDFAEcHAACVgFZ + Ab4CUAFSAaQDDAEQPAADFAEcAy4BRwIrASwBQwMPARQYAAj/A/wB/wOsAf8DTAH/A8QB/wP8Jf8QAAMU + ARwCWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CWAFfAeMDFAEcIAADDQESAk8BUwGlAlQBYQHu + Aj4BeQH4AyMBM1wADP8D8AH/A5kB/wM0Af8DHgH/A70h/xQAAxQBHAJYAV8B4wIAAaYB/wIAAaYB/wJY + AV8B4wMUARyUABD/A/kB/wPyAf8D8AH/A/oh/xgAAxQBHAJYAV8B4wJYAV8B4wMUARyYAED/mAABXwJY + AeMBtQEwAR4B/wG1ATABHgH/AV8CWAHj8AABtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/1wA + AzsBYwNBAfkDBQEHCAADIgEyA0gB9gM+AWwMAANTAawDWQHrAxYBHlwAAbUBMAEeAf8BtQEwAR4B/wG1 + ATABHgH/AbUBMAEeAf9cAAMdASkDAAH/AycBOwwAAzgBXANBAfkDIwE0BAADPwFvAyEB/AMrAUMgAAMo + AT0DQgF1A0IBdQMoATwwAAG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/MAADHAEnAjQBNQFV + AzMBUgMWAR4fAAEBA10B7QNCAXUQAANLAY4DVwHfAy4BRwMpAfoDQgF0HAADCAELAlgBVgG5AmIBSAH2 + AdQBvAEAAf8B1AG8AQAB/wJiAUgB9gJXAVYBuAMIAQsoAAG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1 + ATABHgH/KAADEAEVAlcBWgG9AlMBZAHxAj4BfAH4Ak4BgQH3Ak4BXQHwA1EBogMBAQIYAANVAbQDVAGv + EAADAgEDA1YBvAMAAf4DUgGoIAACVwFVAboB1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHU + AbwBAAH/AdQBvAEAAf8CVwFWAbgUAAMUARwDSwGOAxQBHAgAAbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/ + AbUBMAEeAf8IAAMUARwDSwGOAxQBHBMAAQEDWwHIAgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/A1ABmhgA + A0QBegNYAekQAAMDAQQDWAHAAwAB/wNOAZQcAAMpAT4CYgFIAfYB1AG8AQAB/wHUAbwBAAH/AdQBvAEA + Af8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8CYgFIAfYDKAE8DAADJgE5AV8CWAHjAbUBMAEeAf8BXwJY + AeMDFAEcBAABtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wQAAxQBHAFfAlgB4wG1ATABHgH/ + AWECWgHkAygBPQwAAyoBQQJIAWIB9gIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wJVAVwB6gMOARMUAAMq + AUADAAH/AxoBJAwAA0sBjwNSAfQDMQFPA1MB8QM7AWQYAANCAXUB1AG8AQAB/wHUAbwBAAH/AdQBvAEA + Af8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/A0IBdAwAAV8CWAHjAbUBMAEe + Af8BtQEwAR4B/wG1ATABHgH/AV8CWAHjAxQBHAG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/ + AxQBHAFfAlgB4wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wFfAlgB4wwAA0MBdwIAAv8CAAL/AgAC/wIA + Av8CAAL/AgAC/wIAAv8CUwFkAfEDJgE5FAADBwEKAyEB+wM4AV4IAAM2AVkDAAH/AzYBWQQAAzMBUwNB + AfkDJwE7FAADQgF2AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/ + AdQBvAEAAf8B1AG8AQAB/wNCAXUMAAFfAlgB4wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/ + AV8CWAHjAbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BXwJYAeMBtQEwAR4B/wG1ATABHgH/ + AbUBMAEeAf8BtQEwAR4B/wFfAlgB4wwAAkEBQgFzAgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wJT + AWQB8QMkATYUAANVAbIDAAH/AwAB/wMAAf8DIQH9A0gB9gNNAZYMAANLAY4DWAHpAxUBHRAAAykBPgJi + AUgB9gHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wJiAUgB9gMo + AT0MAAMUARwBXwJYAeMBtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AbUBMAEe + Af8BtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BXwJYAeMDFAEc + DAADJAE1AlIBZQH0AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AlcBXwHoAwwBEBgAA0gBhgNZAcw8AAJY + AVYBuwHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wJYAVYBuRQA + AxQBHAFfAlgB4wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1 + ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AV8CWAHjAxQBHBQAAlUBVgG0AgAC/wIAAv8CAAL/ + AgAC/wIAAv8CAAL/AkkBSgGJHAADKQE+AyEB/AMPARQ4AAMJAQwCWAFWAbsCYgFIAfYB1AG8AQAB/wHU + AbwBAAH/AmIBSAH2AlcBVQG6AwgBCxgAAxQBHAFfAlgB4wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1 + ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BXwJYAeMDFAEcGAADBwEKA1QBrwJY + AWIB7wJCAWoB9QJSAWUB9AJYAWIB6QJJAUoBiSQAA1YBvgNQAaQDDAEQPAADKQE+A0IBdgNCAXYDKAE9 + JAADFAEcAV8CWAHjAbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/ + AV8CWAHjAxQBHCQAAxQBHAMuAUcCKwEsAUMDDwEUKAADDQESA08BpQNUAe4DPgH4AyMBM2wAAxQBHAFf + AlgB4wG1ATABHgH/AbUBMAEeAf8BtQEwAR4B/wG1ATABHgH/AV8CWAHjAxQBHOQAAxQBHAFfAlgB4wG1 + ATABHgH/AbUBMAEeAf8BXwJYAeMDFAEc7AADFAEcAV8CWAHjAV8CWAHjAxQBHFgAAUIBTQE+BwABPgMA + ASgDAAFAAwABQAMAAQEBAAEBBgABAhYAA/+XAAGABwABgAcAAYABAQYAAcABAwYAAcABAwYAAeABAwYA + AfABBwYAAfABBwYAAfABDwYAAfgBHwYAAfgBHwYAAfwBHwYAAf4BPwYAAf4BfwH8AT8E/wIAAfwBPwT/ + AgAB/AE/AYwBcQL/AgAB/AE/AY4BIwH8AT8CAAH8AT8BjwEHAfABDwIAAYwBMQHPAQ8B4AEPAgABBAEg + Ac8BDwHgAQcEAAHHAQcB4AEHBAABxgEjAeABBwQAAcABcQHgAQcCAAGAAQEB5wH/AfABDwIAAcABAwHj + Af8B8AEfAgAB4AEHAfEB/wH8AT8CAAHwAQ8B8AF/Av8CAAH4AR8E/wIAAfwBPwT/AgAE/wH8AT8G/wH8 + AT8C/wGMAXEC/wH8AT8C/wGOASMB/AE/AfwBPwH8AT8BjwEHAfABDwH8AT8B8AEPAc8BDwHwAQ8BjAEx + AeABDwHPAQ8B4AEHAQQBIAHgAQcBxwEHAeABBwIAAeABBwHGASMB4AEHAgAB4AEHAcABcQHgAQcCAAHg + AQcB5wH/AfABDwGAAQEB8AEPAeMB/wHwAQ8BwAEDAfABHwHxAf8B/AE/AeABBwH8AT8B8AF/Av8B8AEP + Bv8B+AEfBv8B/AE/Av8L + + + + 351, 17 + + + 656, 18 + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk - CgAAAk1TRnQBSQFMAgEBBAEAAdABDAHQAQwBJwEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGc + CgAAAk1TRnQBSQFMAgEBBAEAASABDQEgAQ0BJwEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGc AwABIAMAAQEBAAEgBgABTv8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AAcAAa0B2AH/ AQABrQHYAf8BAAGtAdgB/wEAAa0B2AH/DQABrQHYAf8BAAGtAdgB/wEAAa0B2AH/AQABrQHYAf9YAAOB @@ -2931,95 +3245,6 @@ AcQBfwr/Ac8C/wHfAv8B8BP/AfAT/wHwCw== - - 485, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACq - EQAAAk1TRnQBSQFMAgEBBwEAAdABDAHQAQwBEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABIAMAAQEBAAEgBgABICoAAlgBXwHjAgABpgH/AgABpgH/AlgBXwHj8gABpgH/AgABpgH/AgABpgH/ - AgABpgH/8gABpgH/AgABpgH/AgABpgH/AgABpgH/HAADOwFjAjEBjgH5AwUBBwgAAyIBMgI9AXcB9gI+ - AT8BbAwAAlMBVAGsAlkBZgHrAxYBHp4AAaYB/wIAAaYB/wIAAaYB/wIAAaYB/xwAAx0BKQIAAfEB/wMn - ATsMAAM4AVwCMQGOAfkDIwE0BAACPwFAAW8CGQGtAfwCKwEsAUMgAAMcAScCNAE1AVUDMwFSAxYBHnIA - AaYB/wIAAaYB/wIAAaYB/wIAAaYB/x8AAQECWQFlAe0DQgF1EAADSwGOAlcBXAHfAy4BRwIpAZoB+gNC - AXQcAAMQARUCVwFaAb0CUwFyAfECOwGWAfgCPAGOAfcCTgFqAfADUQGiAwEBAlQAAxQBHANLAY4DFAEc - CgABpgH/AgABpgH/AgABpgH/AgABpgH/CAADFAEcA0sBjgMUARwMAAJVAVYBtANUAa8QAAMCAQMCVgFY - AbwCAwHGAf4CUgFTAagfAAEBA1sByAIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wNQAZpQAAMmATkCWAFf - AeMCAAGmAf8CWAFfAeMDFAEcBgABpgH/AgABpgH/AgABpgH/AgABpgH/BAADFAEcAlgBXwHjAgABpgH/ - AloBYQHkAygBPQgAA0QBegJYAWIB6RAAAwMBBAJYAVoBwAIAAfEB/wNOAZQcAAMqAUECOAF9AfYCAAL/ - AgAC/wIAAv8CAAL/AgAC/wIAAv8CVQFiAeoDDgETTAACWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CWAFf - AeMDFAEcAgABpgH/AgABpgH/AgABpgH/AgABpgH/AxQBHAJYAV8B4wIAAaYB/wIAAaYB/wIAAaYB/wJY - AV8B4wgAAyoBQAIAAfEB/wMaASQMAAJLAUwBjwJIAXUB9AMxAU8CUwFvAfEDOwFkGAADQwF3AgAC/wIA - Av8CAAL/AgAC/wIAAv8CAAL/AgAC/wJTAXIB8QMmATlMAAJYAV8B4wIAAaYB/wIAAaYB/wIAAaYB/wIA - AaYB/wJYAV8B4wIAAaYB/wIAAaYB/wIAAaYB/wIAAaYB/wJYAV8B4wIAAaYB/wIAAaYB/wIAAaYB/wIA - AaYB/wJYAV8B4wgAAwcBCgIhAZsB+wM4AV4IAAM2AVkCAAHxAf8DNgFZBAADMwFTAjEBjgH5AycBOxQA - AkEBQgFzAgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wJTAXIB8QMkATZMAAMUARwCWAFfAeMCAAGm - Af8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGm - Af8CAAGmAf8CWAFfAeMDFAEcCAADVQGyAgAB8QH/AgAB8QH/AgAB8QH/AhkBugH9Aj0BdwH2Ak0BTgGW - DAADSwGOAlgBYgHpAxUBHRAAAyQBNQJEAXsB9AIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wJXAWMB6AMM - ARBQAAMUARwCWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGm - Af8CAAGmAf8CAAGmAf8CWAFfAeMDFAEcEAADSAGGAlkBXAHMPAACVQFWAbQCAAL/AgAC/wIAAv8CAAL/ - AgAC/wIAAv8CSQFKAYlYAAMUARwCWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGm - Af8CAAGmAf8CAAGmAf8CWAFfAeMDFAEcFAADKQE+AhkBrQH8Aw8BFDgAAwcBCgNUAa8CUgFoAe8CQgGA - AfUCRAF7AfQCWAFiAekCSQFKAYlgAAMUARwCWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CAAGm - Af8CAAGmAf8CWAFfAeMDFAEcHAACVgFZAb4CUAFSAaQDDAEQPAADFAEcAy4BRwIrASwBQwMPARRoAAMU - ARwCWAFfAeMCAAGmAf8CAAGmAf8CAAGmAf8CAAGmAf8CWAFfAeMDFAEcIAADDQESAk8BUwGlAlQBYwHu - Aj4BjgH4AyMBM7AAAxQBHAJYAV8B4wIAAaYB/wIAAaYB/wJYAV8B4wMUARzsAAMUARwCWAFfAeMCWAFf - AeMDFAEc/wBxAAFfAlgB4wG1ATsBKQH/AbUBOwEpAf8BXwJYAePwAAG1ATsBKQH/AbUBOwEpAf8BtQE7 - ASkB/wG1ATsBKQH/XAADOwFjAy8B+QMFAQcIAAMiATIDOwH2Az4BbAwAA1MBrANZAesDFgEeXAABtQE7 - ASkB/wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/1wAAx0BKQMAAf8DJwE7DAADOAFcAy8B+QMjATQEAAM/ - AW8DFgH8AysBQyAAAygBPQNCAXUDQgF1AygBPDAAAbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEp - Af8wAAMcAScCNAE1AVUDMwFSAxYBHh8AAQEDWQHtA0IBdRAAA0sBjgNXAd8DLgFHAygB+gNCAXQcAAMI - AQsCWAFWAbkBdQFxATgB9gHUAbwBAAH/AdQBvAEAAf8BdQFxATgB9gJXAVYBuAMIAQsoAAG1ATsBKQH/ - AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/KAADEAEVAlcBWgG9AlMBcgHxAjsBlgH4AjwBjgH3Ak4BagHw - A1EBogMBAQIYAANVAbQDVAGvEAADAgEDA1YBvAMAAf4DUgGoIAACVwFVAboB1AG8AQAB/wHUAbwBAAH/ - AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8CVwFWAbgUAAMUARwDSwGOAxQBHAgAAbUBOwEp - Af8BtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8IAAMUARwDSwGOAxQBHBMAAQEDWwHIAgAC/wIAAv8CAAL/ - AgAC/wIAAv8CAAL/A1ABmhgAA0QBegNYAekQAAMDAQQDWAHAAwAB/wNOAZQcAAMpAT4BdQFxATgB9gHU - AbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wF1AXEBOAH2AygBPAwA - AyYBOQFfAlgB4wG1ATsBKQH/AV8CWAHjAxQBHAQAAbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEp - Af8EAAMUARwBXwJYAeMBtQE7ASkB/wFhAloB5AMoAT0MAAMqAUECOAF9AfYCAAL/AgAC/wIAAv8CAAL/ - AgAC/wIAAv8CVQFiAeoDDgETFAADKgFAAwAB/wMaASQMAANLAY8DRgH0AzEBTwNTAfEDOwFkGAADQgF1 - AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8B1AG8 - AQAB/wNCAXQMAAFfAlgB4wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wFfAlgB4wMUARwBtQE7ASkB/wG1 - ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wMUARwBXwJYAeMBtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8BXwJY - AeMMAANDAXcCAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CAAL/AlMBcgHxAyYBORQAAwcBCgMhAfsDOAFe - CAADNgFZAwAB/wM2AVkEAAMzAVMDLwH5AycBOxQAA0IBdgHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHU - AbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEAAf8DQgF1DAABXwJYAeMBtQE7ASkB/wG1 - ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wFfAlgB4wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/ - AV8CWAHjAbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8BXwJYAeMMAAJBAUIBcwIAAv8CAAL/ - AgAC/wIAAv8CAAL/AgAC/wIAAv8CUwFyAfEDJAE2FAADVQGyAwAB/wMAAf8DAAH/AxYB/QM7AfYDTQGW - DAADSwGOA1gB6QMVAR0QAAMpAT4BdQFxATgB9gHUAbwBAAH/AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/ - AdQBvAEAAf8B1AG8AQAB/wF1AXEBOAH2AygBPQwAAxQBHAFfAlgB4wG1ATsBKQH/AbUBOwEpAf8BtQE7 - ASkB/wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/ - AbUBOwEpAf8BtQE7ASkB/wFfAlgB4wMUARwMAAMkATUCRAF7AfQCAAL/AgAC/wIAAv8CAAL/AgAC/wIA - Av8CVwFjAegDDAEQGAADSAGGA1kBzDwAAlgBVgG7AdQBvAEAAf8B1AG8AQAB/wHUAbwBAAH/AdQBvAEA - Af8B1AG8AQAB/wHUAbwBAAH/AlgBVgG5FAADFAEcAV8CWAHjAbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/ - AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8BXwJY - AeMDFAEcFAACVQFWAbQCAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CSQFKAYkcAAMpAT4DFgH8Aw8BFDgA - AwkBDAJYAVYBuwF1AXEBOAH2AdQBvAEAAf8B1AG8AQAB/wF1AXEBOAH2AlcBVQG6AwgBCxgAAxQBHAFf - AlgB4wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/ - AbUBOwEpAf8BXwJYAeMDFAEcGAADBwEKA1QBrwJSAWgB7wJCAYAB9QJEAXsB9AJYAWIB6QJJAUoBiSQA - A1YBvgNQAaQDDAEQPAADKQE+A0IBdgNCAXYDKAE9JAADFAEcAV8CWAHjAbUBOwEpAf8BtQE7ASkB/wG1 - ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1ATsBKQH/AV8CWAHjAxQBHCQAAxQBHAMuAUcCKwEsAUMDDwEU - KAADDQESA08BpQNUAe4DPQH4AyMBM2wAAxQBHAFfAlgB4wG1ATsBKQH/AbUBOwEpAf8BtQE7ASkB/wG1 - ATsBKQH/AV8CWAHjAxQBHOQAAxQBHAFfAlgB4wG1ATsBKQH/AbUBOwEpAf8BXwJYAeMDFAEc7AADFAEc - AV8CWAHjAV8CWAHjAxQBHFgAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYAA/8BAAH8 - AT8E/wIAAfwBPwT/AgAB/AE/AYwBcQL/AgAB/AE/AY4BIwH8AT8CAAH8AT8BjwEHAfABDwIAAYwBMQHP - AQ8B4AEPAgABBAEgAc8BDwHgAQcEAAHHAQcB4AEHBAABxgEjAeABBwQAAcABcQHgAQcCAAGAAQEB5wH/ - AfABDwIAAcABAwHjAf8B8AEfAgAB4AEHAfEB/wH8AT8CAAHwAQ8B8AF/Av8CAAH4AR8E/wIAAfwBPwT/ - AgAE/wH8AT8G/wH8AT8C/wGMAXEC/wH8AT8C/wGOASMB/AE/AfwBPwH8AT8BjwEHAfABDwH8AT8B8AEP - Ac8BDwHwAQ8BjAExAeABDwHPAQ8B4AEHAQQBIAHgAQcBxwEHAeABBwIAAeABBwHGASMB4AEHAgAB4AEH - AcABcQHgAQcCAAHgAQcB5wH/AfABDwGAAQEB8AEPAeMB/wHwAQ8BwAEDAfABHwHxAf8B/AE/AeABBwH8 - AT8B8AF/Av8B8AEPBv8B+AEfBv8B/AE/Av8L - - - - 351, 17 - 743, 18 @@ -3028,7 +3253,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 - CgAAAk1TRnQBSQFMAgEBBQEAAVwBDwFcAQ8BDAEAAQwBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CgAAAk1TRnQBSQFMAgEBBQEAAawBDwGsAQ8BDAEAAQwBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABMAMAARgDAAEBAQABCAUAAYABBBgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz diff --git a/EM_UI/Editor/FormulaEditorManager.cs b/EM_UI/Editor/FormulaEditorManager.cs index 19f65f0..edee82f 100644 --- a/EM_UI/Editor/FormulaEditorManager.cs +++ b/EM_UI/Editor/FormulaEditorManager.cs @@ -122,7 +122,7 @@ void Handle_lstIntelli(KeyPressEventArgs e, MemoEdit activeEditor, string lastWo List GetIntelliItems() { - List intelliItems = new List(); + List intelliItems = new List(); intelliItems.Clear(); try @@ -188,6 +188,32 @@ List GetIntelliItems() foreach (CountryConfig.UpratingIndexRow ur in ccf.GetUpratingIndices()) intelliItems.Add(new IntelliItem(ur.Reference, ur.Description, _intelliImageConstant)); } + + // indirect taxes + if (specficIntelliItems == null || specficIntelliItems.Contains(_intelliContainsIndTaxFactor)) + { + string cc = EM_AppContext.Instance.GetActiveCountryMainForm().GetCountryShortName(); + CountryConfigFacade ccf = CountryAdministration.CountryAdministrator.GetCountryConfigFacade(cc); + foreach (CountryConfig.IndirectTaxRow it in ccf.GetIndirectTaxes()) + intelliItems.Add(new IntelliItem(it.Reference, it.Comment, _intelliImageConstant)); + } + + // external statistics + if (specficIntelliItems == null || specficIntelliItems.Contains(_intelliContainsExternalStatistic)) + { + string cc = EM_AppContext.Instance.GetActiveCountryMainForm().GetCountryShortName(); + CountryConfigFacade ccf = CountryAdministration.CountryAdministrator.GetCountryConfigFacade(cc); + foreach (CountryConfig.ExternalStatisticRow es in ccf.GetExternalStatistics()) + { + if (!es.IsTableNameNull() && es.TableName.Equals("Aggregates")) + { + intelliItems.Add(new IntelliItem(DefVarName.EXSTAT_NUMBER_CONSTANT_PREFIX + es.Reference, es.Description, _intelliImageConstant)); + intelliItems.Add(new IntelliItem(DefVarName.EXSTAT_AMOUNT_CONSTANT_PREFIX + es.Reference, es.Description, _intelliImageConstant)); + } + else + intelliItems.Add(new IntelliItem(DefVarName.EXSTAT_INDICATOR_CONSTANT_PREFIX + es.Reference, es.Description, _intelliImageConstant)); + } + } //standard variables defined in VarConfig (idhh, yem, poa, ...) if (specficIntelliItems == null || specficIntelliItems.Contains(_intelliContainsStandardVar)) @@ -524,6 +550,8 @@ void editor_Leave(object sender, EventArgs e) internal static int _intelliContainsRandAbsMinMax = 7; internal static int _intelliContainsDefTUMembers = 8; internal static int _intelliContainsUpRateFactor = 9; + internal static int _intelliContainsIndTaxFactor = 10; + internal static int _intelliContainsExternalStatistic = 11; internal FormulaEditorManager(ListBox lstIntelli, Label lblComboBoxEditorToolTip, ImageList imlIntelliIcons, TreeList treeList) { diff --git a/EM_UI/ExternalStatistics/ExternalStatisticUtil.cs b/EM_UI/ExternalStatistics/ExternalStatisticUtil.cs new file mode 100644 index 0000000..ea1a4df --- /dev/null +++ b/EM_UI/ExternalStatistics/ExternalStatisticUtil.cs @@ -0,0 +1,277 @@ +using EM_Common; +using EM_UI.CountryAdministration; +using EM_UI.DataSets; +using EM_XmlHandler; +using EM_Statistics.ExternalStatistics; +using System; +using System.Collections.Generic; +using EM_XmlHandler; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static EM_UI.ExternalStatistics.ExternalStatisticsComponent; + +namespace EM_UI.ExternalStatistics +{ + class ExternalStatisticUtil + { + /// + /// Returns the External Statistics ready to be included in the tables + /// + /// + public static ExternalStatistic LoadExternatStatisticsComponentsAndValues(string countryShortName) + { + //We are going to obtain information from two different sources + //1) The income list components (HU.xml, EM3 version) + List years; + CountryConfigFacade _countryConfigFacade = CountryAdministrator.GetCountryConfigFacade(countryShortName, true); + years = GetYearsFromStoredExternalStatistics(_countryConfigFacade); + Dictionary xmlIncomeListComponents = GetCountryXMLIncomeListComponents(countryShortName, years); + + //2) The information stored in the XML by the user (HU.xml, EM2 version) is combined with the information in the income list + ExternalStatistic storedExternalStatistic = GetStoredExternalStatistics(_countryConfigFacade, xmlIncomeListComponents, years); + + return storedExternalStatistic; + } + + // this quickly tries to return the years in the External Statistics by checking the first row only + // it assumes that all rows have the same set of years (something that should be always true in the table) + public static List GetYearsFromStoredExternalStatistics(CountryConfigFacade _countryConfigFacade) + { + List years = new List(); + CountryConfig.ExternalStatisticRow row = _countryConfigFacade.GetExternalStatistics().FirstOrDefault(); + if (row != null) + { + string yearValues = row.YearValues; + if (!String.IsNullOrEmpty(yearValues)) + { + string[] yearValuesArray = yearValues.Split(InDepthDefinitions.SEPARATOR); + if (yearValuesArray != null && yearValuesArray.Length > 0) + { + foreach (string yearValue in yearValuesArray) + { + string[] eachFieldSeparated = yearValue.Split(InDepthDefinitions.SEPARATOR_INNER); + years.Add(eachFieldSeparated[0]); + } + } + } + } + return years; + } + + public static ExternalStatistic GetStoredExternalStatistics(CountryConfigFacade _countryConfigFacade, Dictionary xmlIncomeListComponents, List years) + { + // This is static, so it can be read every time without impacting the speed + Dictionary distComponents = GetDistributionalComponents(); + + ExternalStatistic externalStatistics = new ExternalStatistic(); + + foreach (CountryConfig.ExternalStatisticRow stat in _countryConfigFacade.GetExternalStatistics()) // add one row for each index + { + if (stat.TableName.Equals(ExternalStatisticsForm.AGGREGATES)) { + //New ExternalStatisticAggregate + ExternalStatisticAggregate aggregate = null; + if (xmlIncomeListComponents.ContainsKey(stat.Category + "_" + stat.Reference)) + aggregate = xmlIncomeListComponents[stat.Category + "_" + stat.Reference]; + else + continue; + + if(aggregate == null) + { + aggregate = new ExternalStatisticAggregate(); + aggregate.Name = stat.Reference; + aggregate.IncomeList = stat.Category; + aggregate.Description = stat.Description; + } + + aggregate.Source = stat.Source; + aggregate.Comment = stat.Comment; + aggregate.Destination = stat.Destination; + + string yearValues = stat.YearValues; + Dictionary valuePerYear = new Dictionary(); + + if (!String.IsNullOrEmpty(yearValues)) + { + string[] yearValuesArray = yearValues.Split(InDepthDefinitions.SEPARATOR); + if (yearValuesArray != null && yearValuesArray.Length > 0) + { + foreach (string yearValue in yearValuesArray) + { + string[] eachFieldSeparated = yearValue.Split(InDepthDefinitions.SEPARATOR_INNER); + if (eachFieldSeparated != null && eachFieldSeparated.Length > 0 && eachFieldSeparated.Length == 4) + { + string year = eachFieldSeparated[0]; + if (years.Contains(year)) + { + ExternalStatisticAggregateValues extValues = new ExternalStatisticAggregateValues(); + extValues.Amount = eachFieldSeparated[1]; + extValues.Beneficiares = eachFieldSeparated[2]; + extValues.Level = eachFieldSeparated[3]; + valuePerYear.Add(year, extValues); + } + } + } + } + } + + aggregate.YearValues = valuePerYear; + xmlIncomeListComponents[stat.Category + "_" + stat.Reference] = aggregate; + } + else + { + if (!distComponents.ContainsKey(stat.Reference)) continue; + //New ExternalStatisticDistributional + string yearValues = stat.YearValues; + Dictionary yearValuesDictionary = new Dictionary(); + + if(!String.IsNullOrEmpty(yearValues)) + { + string[] yearValuesArray = yearValues.Split(InDepthDefinitions.SEPARATOR); + if (yearValuesArray != null && yearValuesArray.Length > 0) + { + foreach (string yearValue in yearValuesArray) + { + string[] eachFieldSeparated = yearValue.Split(InDepthDefinitions.SEPARATOR_INNER); + if (years.Contains(eachFieldSeparated[0])) + { + if (eachFieldSeparated != null && eachFieldSeparated.Length > 0 && eachFieldSeparated.Length == 2) + { + yearValuesDictionary.Add(eachFieldSeparated[0], eachFieldSeparated[1]); + } + } + } + } + } + distComponents[stat.Reference].Source = stat.Source; + distComponents[stat.Reference].Comment = stat.Comment; + distComponents[stat.Reference].YearValues = yearValuesDictionary; + } + } + + externalStatistics.Aggregate = xmlIncomeListComponents; + externalStatistics.Distributional = distComponents; + externalStatistics.Years = years; + + return externalStatistics; + } + + public static Dictionary GetCountryXMLIncomeListComponents(string countryShortName, List years) + { + Dictionary componentsIncomeList = ReadIncomeListComponentsFromXMLFile(countryShortName, years, false, true); + Dictionary externalStatisticsAgregate = new Dictionary(); + Dictionary> tempStatisticsAgregate = new Dictionary>(); + foreach (KeyValuePair yearIncomeLists in componentsIncomeList) + { + string year = yearIncomeLists.Key; + + //They key is the incomelist, it contains all variables inside + Dictionary> fiscalIls = yearIncomeLists.Value.fiscalIls; + + foreach (KeyValuePair> currentIncomeList in fiscalIls) + { + string incomeListName = currentIncomeList.Key; + Dictionary componentsInfo = currentIncomeList.Value; + + // then add the incomelist variables + foreach (KeyValuePair component in componentsInfo) + { + string variableName = component.Key; + IlVarInfo varInfo = component.Value; + + //We add the variables grouped in incomelists. This is because the componentsIncomeList (outer loop) + //is comming grouped in years and can contain different variables in different years. + string aggregateKey = incomeListName + "_" + variableName; + if (!tempStatisticsAgregate.ContainsKey(incomeListName)) // If the incomelist it doesn't exist, add it + tempStatisticsAgregate.Add(incomeListName, new Dictionary()); + //The key for the variable is the income list + variable name + if (!tempStatisticsAgregate[incomeListName].ContainsKey(aggregateKey)) // If the variable doesn't exist, add it + { + tempStatisticsAgregate[incomeListName].Add(aggregateKey, new ExternalStatisticAggregate() { + Name = variableName, + Description = varInfo.description, + IncomeList = varInfo.incomeList, + CanBeDeleted = false + }); + } + tempStatisticsAgregate[incomeListName][aggregateKey].YearValues.Add(year, new ExternalStatisticAggregateValues()); + } + + } + } + // Then we use the grouped array to populate the flat externalStatisticsAgregate + foreach (string ils in tempStatisticsAgregate.Keys) + { + foreach (string aggregateKey in tempStatisticsAgregate[ils].Keys) + { + if (!externalStatisticsAgregate.ContainsKey(aggregateKey)) + externalStatisticsAgregate.Add(aggregateKey, tempStatisticsAgregate[ils][aggregateKey]); + } + } + + return externalStatisticsAgregate; + } + + static public Dictionary ReadIncomeListComponentsFromXMLFile(string countryShortName, List yearsOrSystems, bool doEarns = false, bool doYears = false) + { + Dictionary componentsIncomeLists = new Dictionary(); + CountryConfigFacade _countryConfigFacade = CountryAdministrator.GetCountryConfigFacade(countryShortName, true); + + //Here we need to read from the currently open country, the short name and all the systems. + foreach (CountryConfig.SystemRow systemRow in _countryConfigFacade.GetSystemRowsOrdered()) + { + string baselineCurrent = countryShortName + "_" + systemRow.Year; // if working with years, do baselines only + if ((doYears && (!yearsOrSystems.Contains(systemRow.Year, true) || !baselineCurrent.Equals(systemRow.Name, StringComparison.InvariantCultureIgnoreCase))) || (!doYears && !yearsOrSystems.Contains(systemRow.Name, true))) continue; + + //Then we iterate and populate a dictionary of components (one component per system). The key will be the year. + ExternalStatisticsComponent component = new ExternalStatisticsComponent(countryShortName, systemRow.Name, out Dictionary externalStatistics, doEarns); + if (component != null) + { + componentsIncomeLists.Add(doYears ? systemRow.Year : systemRow.Name, component); + } + } + + return componentsIncomeLists; + } + + static Dictionary GetDistributionalComponents() + { + Dictionary distComponents = new Dictionary(); + foreach (List comp in InDepthDefinitions.ROWS_INEQUALITY) + { + distComponents.Add(comp[0], new ExternalStatisticDistributional(ExternalStatisticsForm.DISTRIBUTIONAL_INEQUALITY, comp[0], comp[1], "", "")); + } + foreach (List comp in InDepthDefinitions.ROWS_POVERTY) + { + distComponents.Add(comp[0], new ExternalStatisticDistributional(ExternalStatisticsForm.DISTRIBUTIONAL_POVERTY, comp[0], comp[1], "", "")); + } + return distComponents; + } + } + + public class ExternalStatsTuple + { + internal string incomeList; + internal string name; + internal string description; + internal string yearValues; + internal string comment; + internal string source; + internal string tableName; + internal string destination; + + public ExternalStatsTuple() { } + + public ExternalStatsTuple(string incomeList, string name, string description, string yearValues, string comment, string source, string tableName, string destination) + { + this.incomeList = incomeList; + this.name = name; + this.description = description; + this.yearValues = yearValues; + this.comment = comment; + this.source = source; + this.tableName = tableName; + this.destination = destination; + } + } +} diff --git a/EM_UI/ExternalStatistics/ExternalStatisticsAction.cs b/EM_UI/ExternalStatistics/ExternalStatisticsAction.cs new file mode 100644 index 0000000..ce2f51c --- /dev/null +++ b/EM_UI/ExternalStatistics/ExternalStatisticsAction.cs @@ -0,0 +1,27 @@ +using EM_UI.Actions; +using EM_UI.DataSets; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EM_UI.ExternalStatistics +{ + internal class ExternalStatisticsAction : BaseAction + { + ExternalStatisticsForm _externalStatisticForm = null; + CountryConfigFacade _countryConfigFacade = null; + + internal ExternalStatisticsAction(ExternalStatisticsForm externalStatisticsForm) + { + _externalStatisticForm = externalStatisticsForm; + _countryConfigFacade = _externalStatisticForm._countryConfigFacade; + } + + internal override void PerformAction() + { + _countryConfigFacade.UpdateExternalStatistics(_externalStatisticForm.GetExternalStatisticsInfo()); + } + } +} diff --git a/EM_UI/ExternalStatistics/ExternalStatisticsComponent.cs b/EM_UI/ExternalStatistics/ExternalStatisticsComponent.cs new file mode 100644 index 0000000..c482ec7 --- /dev/null +++ b/EM_UI/ExternalStatistics/ExternalStatisticsComponent.cs @@ -0,0 +1,175 @@ +using EM_Common; +using EM_Common_Win; +using EM_Transformer; +using EM_XmlHandler; +using EM_Statistics.ExternalStatistics; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EM_UI.ExternalStatistics +{ + public class ExternalStatisticsComponent + { + internal string systemName = null; + internal string countryShortName = null; + internal string systemYear = null; + internal bool isBaseline = false; + + internal Dictionary> fiscalIls = new Dictionary>(StringComparer.OrdinalIgnoreCase); + + public ExternalStatisticsComponent(string countryShortNameParam, string systemNameParam, out Dictionary externalStatistics, bool doEarns = false) + { + countryShortName = countryShortNameParam; + systemName = systemNameParam; + + List all_ils = new List(InDepthDefinitions.ILS_ALL); + if (doEarns) all_ils.Add(InDepthDefinitions.ILS_EARNS); + + foreach (string il in all_ils) + fiscalIls.Add(il, new Dictionary(StringComparer.OrdinalIgnoreCase)); + + string emPathFolder = UISessionInfo.GetEuromodFilesFolder(); + EMPath emPath = new EMPath(emPathFolder); + if (!File.Exists(emPath.GetCountryFilePath(countryShortName, true))) + throw new Exception($"system info cannot be retrieved: country file {emPath.GetCountryFilePath(countryShortName, true)} does not exist."); + + if (!EM3Country.Transform(emPathFolder, countryShortName, out List errors)) + throw new Exception($"transforming to EM3 failed: {string.Join(";", errors)}"); + + string w = string.Empty; Communicator communicator = new Communicator() + { + errorAction = new Action + (ei => { w += $"{Path.GetFileName(emPath.GetFolderOutput())}: {ei.message}" + Environment.NewLine; }) + }; + + ExeXml.Country countryContent = ExeXmlReader.ReadCountry(emPath.GetCountryFilePath(countryShortName), + systemName, null, // null for dataIdentifier + false, communicator, true); // false for 'ignorePrivate', true for 'readComment' + + externalStatistics = countryContent.extStats; + AnalyseCountryFile(countryContent, + out Dictionary> contentILs); // not (yet) flat content of incomelists; key: incomelist-name, value: incomelist-content: names + factors of variables/incomelists); + + + foreach (string key in fiscalIls.Keys) + { + GetContentIL(key, fiscalIls[key]); + } + + void GetContentIL(string ilNames, Dictionary contentIL) + { + foreach (string ilName in ilNames.Split(',')) + { + if (!contentILs.ContainsKey(ilName)) return; + foreach (var v in GetFlatIl(contentILs[ilName], ilName)) + { + string varName = v.Key; IlVarInfo varInfo = v.Value; + if (!contentIL.ContainsKey(varName)) + contentIL.Add(varName, new IlVarInfo() { description = varInfo.description, incomeList = ilName, subtract = varInfo.subtract }); + else throw new Exception($"Duplicate variable '{varName}' found in income list: {ilName}"); + } + } + } + + Dictionary GetFlatIl(Dictionary il, string il_name, bool substract = false) + { + Dictionary flatIl = new Dictionary(); + foreach (var entry in il) + { + string entryName = entry.Key; IlVarInfo entryVarInfo = entry.Value; + if (il_name.Equals(InDepthDefinitions.ILS_EXTSTAT_OTHER) || !contentILs.ContainsKey(entryName)) // variable + { + if (!flatIl.ContainsKey(entryName)) flatIl.Add(entryName, entryVarInfo); + } + else // another incomelist + { + foreach (var subIlEntry in GetFlatIl(contentILs[entryName], entryName, entryVarInfo.subtract)) + { + string subIlEntryName = subIlEntry.Key; IlVarInfo subILEntryVarInfo = subIlEntry.Value; + if (!flatIl.ContainsKey(subIlEntryName)) flatIl.Add(subIlEntryName, subILEntryVarInfo); + } + } + } + return flatIl; + } + } + + private static void AnalyseCountryFile(ExeXml.Country countryContent, out Dictionary> contentILs) + { + Dictionary> _contentILs = new Dictionary>(StringComparer.OrdinalIgnoreCase); + + foreach (ExeXml.Pol pol in countryContent.cao.pols.Values) + { + if (!pol.on) continue; + foreach (var fun in pol.funs.Values) + { + if (!fun.on) continue; + if (fun.Name.ToLower() == DefFun.DefIl.ToLower()) AnalyseDefIL(fun); + else if (fun.Name.ToLower() == DefFun.DefVar.ToLower()) AnalyseDefVar(fun, false); + else if (fun.Name.ToLower() == DefFun.DefConst.ToLower()) AnalyseDefVar(fun, true); + } + } + contentILs = _contentILs; + + void AnalyseDefIL(ExeXml.Fun fun) + { + string ilName = null; Dictionary content = new Dictionary(StringComparer.OrdinalIgnoreCase); + content.Add("", new IlVarInfo() { description = fun.comment }); + foreach (var par in fun.pars.Values.OrderBy(x => x.order)) + { + if (par.Name.ToLower() == DefPar.DefIl.Name.ToLower()) ilName = par.val; + else if (!GetNamedParList(fun.Name).Contains(par.Name, true)) + content.Add(par.Name, new IlVarInfo() { description = par.comment, subtract = FactorToSubstract(par.val) }); + } + if (ilName == null || _contentILs.ContainsKey(ilName)) return; + _contentILs.Add(ilName, content); + + bool FactorToSubstract(string parVal) + { + double factor = double.NaN; parVal = parVal.Trim(); + if (parVal == "+") return false; + else if (parVal == "-") return true; + else + { + if (parVal.StartsWith("+")) parVal = parVal.Substring(1); + if (double.TryParse(parVal, out double d)) factor = d; + } + return factor < 0; + } + } + + void AnalyseDefVar(ExeXml.Fun fun, bool isConst) + { + Dictionary varAndGroup = new Dictionary(); + List groupsNonMonVars = new List(); + foreach (var par in fun.pars.Values) // just assess whether variables are monetary and ignore other complexities (dataset, systemyear, condition) for simplicity + { + if (!GetNamedParList(fun.Name).Contains(par.Name, true)) varAndGroup.TryAdd(par.Group, par.Name); + else if (par.Name.ToLower() == DefPar.DefVar.Var_Monetary.ToLower() && par.val.ToLower() == DefPar.Value.NO) + groupsNonMonVars.Add(par.Group); + } + } + + List GetNamedParList(string funName) + { + List namedParList = DefinitionAdmin.GetFunDefinition(funName, false).GetParList().Keys.ToList(); + foreach (Dictionary parList in from g in DefinitionAdmin.GetFunDefinition(funName, false).GetGroupParList() select g.par) + namedParList.AddRange(from p in parList select p.Key); + return namedParList; + } + } + + internal Dictionary GetIncomelistContent(string ilName) + { + if (fiscalIls.ContainsKey(ilName)) return fiscalIls[ilName]; + throw new Exception($"Programm error: unknown incomelist {ilName}"); + } + + } + + +} diff --git a/EM_UI/ExternalStatistics/ExternalStatisticsForm.Designer.cs b/EM_UI/ExternalStatistics/ExternalStatisticsForm.Designer.cs new file mode 100644 index 0000000..6568f74 --- /dev/null +++ b/EM_UI/ExternalStatistics/ExternalStatisticsForm.Designer.cs @@ -0,0 +1,912 @@ + +namespace EM_UI.ExternalStatistics +{ + partial class ExternalStatisticsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExternalStatisticsForm)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + this.tabExternalStatistics = new System.Windows.Forms.TabControl(); + this.tabAggAmounts = new System.Windows.Forms.TabPage(); + this.dgvExStatAggAmountsData = new System.Windows.Forms.DataGridView(); + this.colAmID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAmIncomeList = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAmName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAmDescription = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAmComments = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAmSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAmDestination = new System.Windows.Forms.DataGridViewComboBoxColumn(); + this.panel1 = new System.Windows.Forms.Panel(); + this.btnDeleteYear = new System.Windows.Forms.Button(); + this.cmbYearToDelete = new System.Windows.Forms.ComboBox(); + this.updwnYearToAdd = new System.Windows.Forms.NumericUpDown(); + this.btnAddYear = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.tabAggNumBenTaxPay = new System.Windows.Forms.TabPage(); + this.dgvExStatAggBenTaxData = new System.Windows.Forms.DataGridView(); + this.label4 = new System.Windows.Forms.Label(); + this.tabAggLevel = new System.Windows.Forms.TabPage(); + this.dgvExStatAggLevelData = new System.Windows.Forms.DataGridView(); + this.colLevelID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevelIncomeList = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevelName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevelDescription = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevelComments = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevelSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLevelDestination = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label3 = new System.Windows.Forms.Label(); + this.tabDistIneq = new System.Windows.Forms.TabPage(); + this.dgvExStatDistIneqData = new System.Windows.Forms.DataGridView(); + this.colIneqID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colIneqName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colIneqDesc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colIneqComments = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colIneqSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label2 = new System.Windows.Forms.Label(); + this.tabDistPov = new System.Windows.Forms.TabPage(); + this.dgvExStatDistPovData = new System.Windows.Forms.DataGridView(); + this.colPovID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPovName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPovDesc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPovComments = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colPovSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.label1 = new System.Windows.Forms.Label(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.contextMenuStripRows = new System.Windows.Forms.ContextMenuStrip(this.components); + this.toolStripMenuItemDelete = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemSetAllToIndividual = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemSetAllToHousehold = new System.Windows.Forms.ToolStripMenuItem(); + this.colBenID = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBenIncomeList = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBenName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBenDescription = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBenComments = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBenSource = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colBenDestination = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tabExternalStatistics.SuspendLayout(); + this.tabAggAmounts.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatAggAmountsData)).BeginInit(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.updwnYearToAdd)).BeginInit(); + this.tabAggNumBenTaxPay.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatAggBenTaxData)).BeginInit(); + this.tabAggLevel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatAggLevelData)).BeginInit(); + this.tabDistIneq.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatDistIneqData)).BeginInit(); + this.tabDistPov.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatDistPovData)).BeginInit(); + this.contextMenuStripRows.SuspendLayout(); + this.SuspendLayout(); + // + // tabExternalStatistics + // + this.tabExternalStatistics.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabExternalStatistics.Controls.Add(this.tabAggAmounts); + this.tabExternalStatistics.Controls.Add(this.tabAggNumBenTaxPay); + this.tabExternalStatistics.Controls.Add(this.tabAggLevel); + this.tabExternalStatistics.Controls.Add(this.tabDistIneq); + this.tabExternalStatistics.Controls.Add(this.tabDistPov); + this.tabExternalStatistics.Location = new System.Drawing.Point(12, 12); + this.tabExternalStatistics.Margin = new System.Windows.Forms.Padding(2); + this.tabExternalStatistics.Name = "tabExternalStatistics"; + this.tabExternalStatistics.SelectedIndex = 0; + this.tabExternalStatistics.Size = new System.Drawing.Size(1133, 571); + this.tabExternalStatistics.TabIndex = 0; + this.tabExternalStatistics.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabExternalStatistics_Selected); + // + // tabAggAmounts + // + this.tabAggAmounts.BackColor = System.Drawing.SystemColors.Control; + this.tabAggAmounts.Controls.Add(this.dgvExStatAggAmountsData); + this.tabAggAmounts.Controls.Add(this.panel1); + this.tabAggAmounts.Controls.Add(this.label5); + this.tabAggAmounts.Location = new System.Drawing.Point(4, 22); + this.tabAggAmounts.Name = "tabAggAmounts"; + this.tabAggAmounts.Padding = new System.Windows.Forms.Padding(3); + this.tabAggAmounts.Size = new System.Drawing.Size(1125, 545); + this.tabAggAmounts.TabIndex = 0; + this.tabAggAmounts.Text = "Aggregates - Amounts"; + // + // dgvExStatAggAmountsData + // + this.dgvExStatAggAmountsData.AllowUserToAddRows = false; + this.dgvExStatAggAmountsData.AllowUserToDeleteRows = false; + this.dgvExStatAggAmountsData.AllowUserToResizeRows = false; + this.dgvExStatAggAmountsData.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.dgvExStatAggAmountsData.BackgroundColor = System.Drawing.SystemColors.Control; + this.dgvExStatAggAmountsData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvExStatAggAmountsData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colAmID, + this.colAmIncomeList, + this.colAmName, + this.colAmDescription, + this.colAmComments, + this.colAmSource, + this.colAmDestination}); + this.dgvExStatAggAmountsData.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvExStatAggAmountsData.Location = new System.Drawing.Point(3, 29); + this.dgvExStatAggAmountsData.Margin = new System.Windows.Forms.Padding(2); + this.dgvExStatAggAmountsData.Name = "dgvExStatAggAmountsData"; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvExStatAggAmountsData.RowHeadersDefaultCellStyle = dataGridViewCellStyle1; + this.dgvExStatAggAmountsData.RowHeadersWidth = 51; + this.dgvExStatAggAmountsData.Size = new System.Drawing.Size(1119, 455); + this.dgvExStatAggAmountsData.TabIndex = 0; + this.dgvExStatAggAmountsData.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dgv_Scroll); + // + // colAmID + // + this.colAmID.DataPropertyName = "ID"; + this.colAmID.Frozen = true; + this.colAmID.HeaderText = ""; + this.colAmID.MinimumWidth = 20; + this.colAmID.Name = "colAmID"; + this.colAmID.ReadOnly = true; + this.colAmID.Visible = false; + this.colAmID.Width = 20; + // + // colAmIncomeList + // + this.colAmIncomeList.DataPropertyName = "colAmIncomeList"; + this.colAmIncomeList.Frozen = true; + this.colAmIncomeList.HeaderText = "Income List"; + this.colAmIncomeList.MinimumWidth = 6; + this.colAmIncomeList.Name = "colAmIncomeList"; + this.colAmIncomeList.ReadOnly = true; + this.colAmIncomeList.Width = 125; + // + // colAmName + // + this.colAmName.DataPropertyName = "colAmName"; + this.colAmName.Frozen = true; + this.colAmName.HeaderText = "Variable"; + this.colAmName.MinimumWidth = 6; + this.colAmName.Name = "colAmName"; + this.colAmName.Width = 125; + // + // colAmDescription + // + this.colAmDescription.DataPropertyName = "colAmDescription"; + this.colAmDescription.HeaderText = "Description"; + this.colAmDescription.MinimumWidth = 6; + this.colAmDescription.Name = "colAmDescription"; + this.colAmDescription.Width = 125; + // + // colAmComments + // + this.colAmComments.DataPropertyName = "colAmComments"; + this.colAmComments.HeaderText = "Comments"; + this.colAmComments.MinimumWidth = 6; + this.colAmComments.Name = "colAmComments"; + this.colAmComments.Width = 125; + // + // colAmSource + // + this.colAmSource.DataPropertyName = "colAmSource"; + this.colAmSource.HeaderText = "Source"; + this.colAmSource.MinimumWidth = 6; + this.colAmSource.Name = "colAmSource"; + this.colAmSource.Width = 125; + // + // colAmDestination + // + this.colAmDestination.DataPropertyName = "colAmDestination"; + this.colAmDestination.HeaderText = "Destination"; + this.colAmDestination.Name = "colAmDestination"; + // + // panel1 + // + this.panel1.Controls.Add(this.btnDeleteYear); + this.panel1.Controls.Add(this.cmbYearToDelete); + this.panel1.Controls.Add(this.updwnYearToAdd); + this.panel1.Controls.Add(this.btnAddYear); + this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.panel1.Location = new System.Drawing.Point(3, 484); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1119, 58); + this.panel1.TabIndex = 15; + // + // btnDeleteYear + // + this.btnDeleteYear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnDeleteYear.Location = new System.Drawing.Point(1017, 30); + this.btnDeleteYear.Margin = new System.Windows.Forms.Padding(2); + this.btnDeleteYear.Name = "btnDeleteYear"; + this.btnDeleteYear.Size = new System.Drawing.Size(82, 21); + this.btnDeleteYear.TabIndex = 13; + this.btnDeleteYear.Text = "Delete Year"; + this.btnDeleteYear.UseVisualStyleBackColor = true; + this.btnDeleteYear.Click += new System.EventHandler(this.btnDeleteYear_Click); + // + // cmbYearToDelete + // + this.cmbYearToDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cmbYearToDelete.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cmbYearToDelete.FormattingEnabled = true; + this.cmbYearToDelete.Location = new System.Drawing.Point(1017, 6); + this.cmbYearToDelete.Margin = new System.Windows.Forms.Padding(2); + this.cmbYearToDelete.Name = "cmbYearToDelete"; + this.cmbYearToDelete.Size = new System.Drawing.Size(82, 21); + this.cmbYearToDelete.TabIndex = 10; + // + // updwnYearToAdd + // + this.updwnYearToAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.updwnYearToAdd.Location = new System.Drawing.Point(931, 6); + this.updwnYearToAdd.Margin = new System.Windows.Forms.Padding(2); + this.updwnYearToAdd.Maximum = new decimal(new int[] { + 2500, + 0, + 0, + 0}); + this.updwnYearToAdd.Minimum = new decimal(new int[] { + 1900, + 0, + 0, + 0}); + this.updwnYearToAdd.Name = "updwnYearToAdd"; + this.updwnYearToAdd.Size = new System.Drawing.Size(82, 20); + this.updwnYearToAdd.TabIndex = 11; + this.updwnYearToAdd.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.updwnYearToAdd.Value = new decimal(new int[] { + 2022, + 0, + 0, + 0}); + // + // btnAddYear + // + this.btnAddYear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnAddYear.Location = new System.Drawing.Point(931, 30); + this.btnAddYear.Margin = new System.Windows.Forms.Padding(2); + this.btnAddYear.Name = "btnAddYear"; + this.btnAddYear.Size = new System.Drawing.Size(82, 21); + this.btnAddYear.TabIndex = 13; + this.btnAddYear.Text = "Add Year"; + this.btnAddYear.UseVisualStyleBackColor = true; + this.btnAddYear.Click += new System.EventHandler(this.btnAddYear_Click); + // + // label5 + // + this.label5.Dock = System.Windows.Forms.DockStyle.Top; + this.label5.Location = new System.Drawing.Point(3, 3); + this.label5.Name = "label5"; + this.label5.Padding = new System.Windows.Forms.Padding(5); + this.label5.Size = new System.Drawing.Size(1119, 26); + this.label5.TabIndex = 14; + this.label5.Text = "Aggregates - amounts (million)"; + // + // tabAggNumBenTaxPay + // + this.tabAggNumBenTaxPay.BackColor = System.Drawing.SystemColors.Control; + this.tabAggNumBenTaxPay.Controls.Add(this.dgvExStatAggBenTaxData); + this.tabAggNumBenTaxPay.Controls.Add(this.label4); + this.tabAggNumBenTaxPay.Location = new System.Drawing.Point(4, 22); + this.tabAggNumBenTaxPay.Name = "tabAggNumBenTaxPay"; + this.tabAggNumBenTaxPay.Padding = new System.Windows.Forms.Padding(3); + this.tabAggNumBenTaxPay.Size = new System.Drawing.Size(1125, 545); + this.tabAggNumBenTaxPay.TabIndex = 1; + this.tabAggNumBenTaxPay.Text = "Aggregates - Number of ben/taxpayers"; + // + // dgvExStatAggBenTaxData + // + this.dgvExStatAggBenTaxData.AllowUserToAddRows = false; + this.dgvExStatAggBenTaxData.AllowUserToDeleteRows = false; + this.dgvExStatAggBenTaxData.AllowUserToResizeRows = false; + this.dgvExStatAggBenTaxData.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.dgvExStatAggBenTaxData.BackgroundColor = System.Drawing.SystemColors.Control; + this.dgvExStatAggBenTaxData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvExStatAggBenTaxData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colBenID, + this.colBenIncomeList, + this.colBenName, + this.colBenDescription, + this.colBenComments, + this.colBenSource, + this.colBenDestination}); + this.dgvExStatAggBenTaxData.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvExStatAggBenTaxData.Location = new System.Drawing.Point(3, 29); + this.dgvExStatAggBenTaxData.Margin = new System.Windows.Forms.Padding(2); + this.dgvExStatAggBenTaxData.Name = "dgvExStatAggBenTaxData"; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvExStatAggBenTaxData.RowHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvExStatAggBenTaxData.RowHeadersWidth = 51; + this.dgvExStatAggBenTaxData.Size = new System.Drawing.Size(1119, 513); + this.dgvExStatAggBenTaxData.TabIndex = 1; + this.dgvExStatAggBenTaxData.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dgv_Scroll); + // + // label4 + // + this.label4.Dock = System.Windows.Forms.DockStyle.Top; + this.label4.Location = new System.Drawing.Point(3, 3); + this.label4.Name = "label4"; + this.label4.Padding = new System.Windows.Forms.Padding(5); + this.label4.Size = new System.Drawing.Size(1119, 26); + this.label4.TabIndex = 5; + this.label4.Text = "Aggregates - number of beneficiaries/payers (thousands)"; + // + // tabAggLevel + // + this.tabAggLevel.BackColor = System.Drawing.SystemColors.Control; + this.tabAggLevel.Controls.Add(this.dgvExStatAggLevelData); + this.tabAggLevel.Controls.Add(this.label3); + this.tabAggLevel.Location = new System.Drawing.Point(4, 22); + this.tabAggLevel.Name = "tabAggLevel"; + this.tabAggLevel.Padding = new System.Windows.Forms.Padding(3); + this.tabAggLevel.Size = new System.Drawing.Size(1125, 545); + this.tabAggLevel.TabIndex = 2; + this.tabAggLevel.Text = "Aggregates - Level"; + // + // dgvExStatAggLevelData + // + this.dgvExStatAggLevelData.AllowUserToAddRows = false; + this.dgvExStatAggLevelData.AllowUserToDeleteRows = false; + this.dgvExStatAggLevelData.AllowUserToResizeRows = false; + this.dgvExStatAggLevelData.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.dgvExStatAggLevelData.BackgroundColor = System.Drawing.SystemColors.Control; + this.dgvExStatAggLevelData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvExStatAggLevelData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colLevelID, + this.colLevelIncomeList, + this.colLevelName, + this.colLevelDescription, + this.colLevelComments, + this.colLevelSource, + this.colLevelDestination}); + this.dgvExStatAggLevelData.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvExStatAggLevelData.Location = new System.Drawing.Point(3, 29); + this.dgvExStatAggLevelData.Margin = new System.Windows.Forms.Padding(2); + this.dgvExStatAggLevelData.Name = "dgvExStatAggLevelData"; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvExStatAggLevelData.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.dgvExStatAggLevelData.RowHeadersWidth = 51; + this.dgvExStatAggLevelData.Size = new System.Drawing.Size(1119, 513); + this.dgvExStatAggLevelData.TabIndex = 2; + this.dgvExStatAggLevelData.Scroll += new System.Windows.Forms.ScrollEventHandler(this.dgv_Scroll); + // + // colLevelID + // + this.colLevelID.DataPropertyName = "colLevelID"; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.Azure; + this.colLevelID.DefaultCellStyle = dataGridViewCellStyle3; + this.colLevelID.HeaderText = ""; + this.colLevelID.MinimumWidth = 20; + this.colLevelID.Name = "colLevelID"; + this.colLevelID.ReadOnly = true; + this.colLevelID.Visible = false; + this.colLevelID.Width = 20; + // + // colLevelIncomeList + // + this.colLevelIncomeList.DataPropertyName = "colLevelIncomeList"; + this.colLevelIncomeList.HeaderText = "Income List"; + this.colLevelIncomeList.MinimumWidth = 6; + this.colLevelIncomeList.Name = "colLevelIncomeList"; + this.colLevelIncomeList.ReadOnly = true; + this.colLevelIncomeList.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colLevelIncomeList.Width = 125; + // + // colLevelName + // + this.colLevelName.DataPropertyName = "colLevelName"; + this.colLevelName.HeaderText = "Variable"; + this.colLevelName.MinimumWidth = 6; + this.colLevelName.Name = "colLevelName"; + this.colLevelName.ReadOnly = true; + this.colLevelName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colLevelName.Width = 125; + // + // colLevelDescription + // + this.colLevelDescription.DataPropertyName = "colLevelDescription"; + this.colLevelDescription.HeaderText = "Description"; + this.colLevelDescription.MinimumWidth = 6; + this.colLevelDescription.Name = "colLevelDescription"; + this.colLevelDescription.ReadOnly = true; + this.colLevelDescription.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colLevelDescription.Width = 125; + // + // colLevelComments + // + this.colLevelComments.DataPropertyName = "colLevelComments"; + this.colLevelComments.HeaderText = "Comments"; + this.colLevelComments.MinimumWidth = 6; + this.colLevelComments.Name = "colLevelComments"; + this.colLevelComments.ReadOnly = true; + this.colLevelComments.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colLevelComments.Width = 125; + // + // colLevelSource + // + this.colLevelSource.DataPropertyName = "colLevelSource"; + this.colLevelSource.HeaderText = "Source"; + this.colLevelSource.MinimumWidth = 6; + this.colLevelSource.Name = "colLevelSource"; + this.colLevelSource.ReadOnly = true; + this.colLevelSource.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colLevelSource.Width = 125; + // + // colLevelDestination + // + this.colLevelDestination.DataPropertyName = "colLevelDestination"; + this.colLevelDestination.HeaderText = "Destination"; + this.colLevelDestination.Name = "colLevelDestination"; + this.colLevelDestination.ReadOnly = true; + // + // label3 + // + this.label3.Dock = System.Windows.Forms.DockStyle.Top; + this.label3.Location = new System.Drawing.Point(3, 3); + this.label3.Name = "label3"; + this.label3.Padding = new System.Windows.Forms.Padding(5); + this.label3.Size = new System.Drawing.Size(1119, 26); + this.label3.TabIndex = 3; + this.label3.Text = "Level at which the statistics are collected (individual or household)"; + // + // tabDistIneq + // + this.tabDistIneq.BackColor = System.Drawing.SystemColors.Control; + this.tabDistIneq.Controls.Add(this.dgvExStatDistIneqData); + this.tabDistIneq.Controls.Add(this.label2); + this.tabDistIneq.Location = new System.Drawing.Point(4, 22); + this.tabDistIneq.Name = "tabDistIneq"; + this.tabDistIneq.Padding = new System.Windows.Forms.Padding(3); + this.tabDistIneq.Size = new System.Drawing.Size(1125, 545); + this.tabDistIneq.TabIndex = 3; + this.tabDistIneq.Text = "Distributional - Inequality"; + // + // dgvExStatDistIneqData + // + this.dgvExStatDistIneqData.AllowUserToAddRows = false; + this.dgvExStatDistIneqData.AllowUserToDeleteRows = false; + this.dgvExStatDistIneqData.AllowUserToResizeRows = false; + this.dgvExStatDistIneqData.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.dgvExStatDistIneqData.BackgroundColor = System.Drawing.SystemColors.Control; + this.dgvExStatDistIneqData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvExStatDistIneqData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colIneqID, + this.colIneqName, + this.colIneqDesc, + this.colIneqComments, + this.colIneqSource}); + this.dgvExStatDistIneqData.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvExStatDistIneqData.Location = new System.Drawing.Point(3, 81); + this.dgvExStatDistIneqData.Margin = new System.Windows.Forms.Padding(2); + this.dgvExStatDistIneqData.Name = "dgvExStatDistIneqData"; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvExStatDistIneqData.RowHeadersDefaultCellStyle = dataGridViewCellStyle5; + this.dgvExStatDistIneqData.RowHeadersWidth = 51; + this.dgvExStatDistIneqData.Size = new System.Drawing.Size(1119, 461); + this.dgvExStatDistIneqData.TabIndex = 3; + // + // colIneqID + // + this.colIneqID.DataPropertyName = "colIneqID"; + this.colIneqID.HeaderText = ""; + this.colIneqID.MinimumWidth = 20; + this.colIneqID.Name = "colIneqID"; + this.colIneqID.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colIneqID.Visible = false; + this.colIneqID.Width = 20; + // + // colIneqName + // + this.colIneqName.DataPropertyName = "colIneqName"; + this.colIneqName.HeaderText = "Name"; + this.colIneqName.Name = "colIneqName"; + this.colIneqName.ReadOnly = true; + this.colIneqName.Visible = false; + // + // colIneqDesc + // + this.colIneqDesc.DataPropertyName = "colIneqDesc"; + this.colIneqDesc.HeaderText = "Indicator"; + this.colIneqDesc.MinimumWidth = 6; + this.colIneqDesc.Name = "colIneqDesc"; + this.colIneqDesc.ReadOnly = true; + this.colIneqDesc.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colIneqDesc.Width = 125; + // + // colIneqComments + // + this.colIneqComments.DataPropertyName = "colIneqComments"; + this.colIneqComments.HeaderText = "Comments"; + this.colIneqComments.MinimumWidth = 6; + this.colIneqComments.Name = "colIneqComments"; + this.colIneqComments.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colIneqComments.Width = 125; + // + // colIneqSource + // + this.colIneqSource.DataPropertyName = "colIneqSource"; + this.colIneqSource.HeaderText = "Source"; + this.colIneqSource.MinimumWidth = 6; + this.colIneqSource.Name = "colIneqSource"; + this.colIneqSource.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colIneqSource.Width = 125; + // + // label2 + // + this.label2.Dock = System.Windows.Forms.DockStyle.Top; + this.label2.Location = new System.Drawing.Point(3, 3); + this.label2.Name = "label2"; + this.label2.Padding = new System.Windows.Forms.Padding(5); + this.label2.Size = new System.Drawing.Size(1119, 78); + this.label2.TabIndex = 5; + this.label2.Text = resources.GetString("label2.Text"); + // + // tabDistPov + // + this.tabDistPov.BackColor = System.Drawing.SystemColors.Control; + this.tabDistPov.Controls.Add(this.dgvExStatDistPovData); + this.tabDistPov.Controls.Add(this.label1); + this.tabDistPov.Location = new System.Drawing.Point(4, 22); + this.tabDistPov.Name = "tabDistPov"; + this.tabDistPov.Padding = new System.Windows.Forms.Padding(3); + this.tabDistPov.Size = new System.Drawing.Size(1125, 545); + this.tabDistPov.TabIndex = 4; + this.tabDistPov.Text = "Distributional - Poverty"; + // + // dgvExStatDistPovData + // + this.dgvExStatDistPovData.AllowUserToAddRows = false; + this.dgvExStatDistPovData.AllowUserToDeleteRows = false; + this.dgvExStatDistPovData.AllowUserToResizeRows = false; + this.dgvExStatDistPovData.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.dgvExStatDistPovData.BackgroundColor = System.Drawing.SystemColors.Control; + this.dgvExStatDistPovData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvExStatDistPovData.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colPovID, + this.colPovName, + this.colPovDesc, + this.colPovComments, + this.colPovSource}); + this.dgvExStatDistPovData.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvExStatDistPovData.Location = new System.Drawing.Point(3, 29); + this.dgvExStatDistPovData.Margin = new System.Windows.Forms.Padding(2); + this.dgvExStatDistPovData.Name = "dgvExStatDistPovData"; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.6F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvExStatDistPovData.RowHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.dgvExStatDistPovData.RowHeadersWidth = 51; + this.dgvExStatDistPovData.Size = new System.Drawing.Size(1119, 513); + this.dgvExStatDistPovData.TabIndex = 3; + // + // colPovID + // + this.colPovID.DataPropertyName = "colPovID"; + this.colPovID.HeaderText = ""; + this.colPovID.MinimumWidth = 20; + this.colPovID.Name = "colPovID"; + this.colPovID.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colPovID.Visible = false; + this.colPovID.Width = 20; + // + // colPovName + // + this.colPovName.DataPropertyName = "colPovName"; + this.colPovName.HeaderText = "Name"; + this.colPovName.Name = "colPovName"; + this.colPovName.ReadOnly = true; + this.colPovName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colPovName.Visible = false; + // + // colPovDesc + // + this.colPovDesc.DataPropertyName = "colPovDesc"; + this.colPovDesc.HeaderText = "Indicator"; + this.colPovDesc.MinimumWidth = 6; + this.colPovDesc.Name = "colPovDesc"; + this.colPovDesc.ReadOnly = true; + this.colPovDesc.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colPovDesc.Width = 125; + // + // colPovComments + // + this.colPovComments.DataPropertyName = "colPovComments"; + this.colPovComments.HeaderText = "Comments"; + this.colPovComments.MinimumWidth = 6; + this.colPovComments.Name = "colPovComments"; + this.colPovComments.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colPovComments.Width = 125; + // + // colPovSource + // + this.colPovSource.DataPropertyName = "colPovSource"; + this.colPovSource.HeaderText = "Source"; + this.colPovSource.MinimumWidth = 6; + this.colPovSource.Name = "colPovSource"; + this.colPovSource.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colPovSource.Width = 125; + // + // label1 + // + this.label1.Dock = System.Windows.Forms.DockStyle.Top; + this.label1.Location = new System.Drawing.Point(3, 3); + this.label1.Name = "label1"; + this.label1.Padding = new System.Windows.Forms.Padding(5); + this.label1.Size = new System.Drawing.Size(1119, 26); + this.label1.TabIndex = 4; + this.label1.Text = "At-risk-of-poverty rates for different poverty lines and population groups"; + // + // btnOK + // + this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnOK.AutoSize = true; + this.btnOK.Image = ((System.Drawing.Image)(resources.GetObject("btnOK.Image"))); + this.btnOK.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btnOK.Location = new System.Drawing.Point(967, 589); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(101, 25); + this.btnOK.TabIndex = 14; + this.btnOK.Text = " Save && Close"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // btnCancel + // + this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancel.AutoSize = true; + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Image = ((System.Drawing.Image)(resources.GetObject("btnCancel.Image"))); + this.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.btnCancel.Location = new System.Drawing.Point(1074, 589); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(67, 25); + this.btnCancel.TabIndex = 15; + this.btnCancel.Text = " Cancel"; + this.btnCancel.UseVisualStyleBackColor = true; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // contextMenuStripRows + // + this.contextMenuStripRows.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripMenuItemDelete, + this.toolStripMenuItemSetAllToIndividual, + this.toolStripMenuItemSetAllToHousehold}); + this.contextMenuStripRows.Name = "contextMenuStrip1"; + this.contextMenuStripRows.Size = new System.Drawing.Size(191, 70); + this.contextMenuStripRows.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripRows_Opening); + // + // toolStripMenuItemDelete + // + this.toolStripMenuItemDelete.Name = "toolStripMenuItemDelete"; + this.toolStripMenuItemDelete.Size = new System.Drawing.Size(190, 22); + this.toolStripMenuItemDelete.Text = "Delete item(s)"; + this.toolStripMenuItemDelete.Click += new System.EventHandler(this.toolStripMenuItemDelete_Click); + // + // toolStripMenuItemSetAllToIndividual + // + this.toolStripMenuItemSetAllToIndividual.Name = "toolStripMenuItemSetAllToIndividual"; + this.toolStripMenuItemSetAllToIndividual.Size = new System.Drawing.Size(190, 22); + this.toolStripMenuItemSetAllToIndividual.Text = "Set all to \"Individual\""; + this.toolStripMenuItemSetAllToIndividual.Click += new System.EventHandler(this.toolStripMenuItemSetAllToIndividual_Click); + // + // toolStripMenuItemSetAllToHousehold + // + this.toolStripMenuItemSetAllToHousehold.Name = "toolStripMenuItemSetAllToHousehold"; + this.toolStripMenuItemSetAllToHousehold.Size = new System.Drawing.Size(190, 22); + this.toolStripMenuItemSetAllToHousehold.Text = "Set all to \"Household\""; + this.toolStripMenuItemSetAllToHousehold.Click += new System.EventHandler(this.toolStripMenuItemSetAllToHousehold_Click); + // + // colBenID + // + this.colBenID.DataPropertyName = "colBenID"; + this.colBenID.HeaderText = ""; + this.colBenID.MinimumWidth = 20; + this.colBenID.Name = "colBenID"; + this.colBenID.ReadOnly = true; + this.colBenID.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colBenID.Visible = false; + this.colBenID.Width = 20; + // + // colBenIncomeList + // + this.colBenIncomeList.DataPropertyName = "colBenIncomeList"; + this.colBenIncomeList.HeaderText = "Income List"; + this.colBenIncomeList.MinimumWidth = 6; + this.colBenIncomeList.Name = "colBenIncomeList"; + this.colBenIncomeList.ReadOnly = true; + this.colBenIncomeList.Width = 125; + // + // colBenName + // + this.colBenName.DataPropertyName = "colBenName"; + this.colBenName.HeaderText = "Variable"; + this.colBenName.MinimumWidth = 6; + this.colBenName.Name = "colBenName"; + this.colBenName.ReadOnly = true; + this.colBenName.Width = 125; + // + // colBenDescription + // + this.colBenDescription.DataPropertyName = "colBenDescription"; + this.colBenDescription.HeaderText = "Description"; + this.colBenDescription.MinimumWidth = 6; + this.colBenDescription.Name = "colBenDescription"; + this.colBenDescription.ReadOnly = true; + this.colBenDescription.Width = 125; + // + // colBenComments + // + this.colBenComments.DataPropertyName = "colBenComments"; + this.colBenComments.HeaderText = "Comments"; + this.colBenComments.MinimumWidth = 6; + this.colBenComments.Name = "colBenComments"; + this.colBenComments.ReadOnly = true; + this.colBenComments.Width = 125; + // + // colBenSource + // + this.colBenSource.DataPropertyName = "colBenSource"; + this.colBenSource.HeaderText = "Source"; + this.colBenSource.MinimumWidth = 6; + this.colBenSource.Name = "colBenSource"; + this.colBenSource.ReadOnly = true; + this.colBenSource.Width = 125; + // + // colBenDestination + // + this.colBenDestination.DataPropertyName = "colBenDestination"; + this.colBenDestination.HeaderText = "Destination"; + this.colBenDestination.Name = "colBenDestination"; + this.colBenDestination.ReadOnly = true; + // + // ExternalStatisticsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1155, 626); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.tabExternalStatistics); + this.Name = "ExternalStatisticsForm"; + this.ShowIcon = false; + this.Text = "External Statistics"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.ExternalStatisticsForm_FormClosing); + this.tabExternalStatistics.ResumeLayout(false); + this.tabAggAmounts.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatAggAmountsData)).EndInit(); + this.panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.updwnYearToAdd)).EndInit(); + this.tabAggNumBenTaxPay.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatAggBenTaxData)).EndInit(); + this.tabAggLevel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatAggLevelData)).EndInit(); + this.tabDistIneq.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatDistIneqData)).EndInit(); + this.tabDistPov.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvExStatDistPovData)).EndInit(); + this.contextMenuStripRows.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TabControl tabExternalStatistics; + private System.Windows.Forms.TabPage tabAggAmounts; + private System.Windows.Forms.TabPage tabAggNumBenTaxPay; + private System.Windows.Forms.TabPage tabDistPov; + private System.Windows.Forms.DataGridView dgvExStatAggAmountsData; + private System.Windows.Forms.NumericUpDown updwnYearToAdd; + private System.Windows.Forms.ComboBox cmbYearToDelete; + private System.Windows.Forms.Button btnAddYear; + private System.Windows.Forms.Button btnDeleteYear; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + private System.Windows.Forms.DataGridView dgvExStatAggBenTaxData; + private System.Windows.Forms.TabPage tabAggLevel; + private System.Windows.Forms.DataGridView dgvExStatAggLevelData; + private System.Windows.Forms.TabPage tabDistIneq; + private System.Windows.Forms.DataGridView dgvExStatDistIneqData; + private System.Windows.Forms.DataGridView dgvExStatDistPovData; + private System.Windows.Forms.ContextMenuStrip contextMenuStripRows; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemDelete; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemSetAllToIndividual; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemSetAllToHousehold; + private System.Windows.Forms.DataGridViewTextBoxColumn colIneqID; + private System.Windows.Forms.DataGridViewTextBoxColumn colIneqName; + private System.Windows.Forms.DataGridViewTextBoxColumn colIneqDesc; + private System.Windows.Forms.DataGridViewTextBoxColumn colIneqComments; + private System.Windows.Forms.DataGridViewTextBoxColumn colIneqSource; + private System.Windows.Forms.DataGridViewTextBoxColumn colPovID; + private System.Windows.Forms.DataGridViewTextBoxColumn colPovName; + private System.Windows.Forms.DataGridViewTextBoxColumn colPovDesc; + private System.Windows.Forms.DataGridViewTextBoxColumn colPovComments; + private System.Windows.Forms.DataGridViewTextBoxColumn colPovSource; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.DataGridViewTextBoxColumn colAmID; + private System.Windows.Forms.DataGridViewTextBoxColumn colAmIncomeList; + private System.Windows.Forms.DataGridViewTextBoxColumn colAmName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAmDescription; + private System.Windows.Forms.DataGridViewTextBoxColumn colAmComments; + private System.Windows.Forms.DataGridViewTextBoxColumn colAmSource; + private System.Windows.Forms.DataGridViewComboBoxColumn colAmDestination; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelID; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelIncomeList; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelName; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelDescription; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelComments; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelSource; + private System.Windows.Forms.DataGridViewTextBoxColumn colLevelDestination; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenID; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenIncomeList; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenName; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenDescription; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenComments; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenSource; + private System.Windows.Forms.DataGridViewTextBoxColumn colBenDestination; + } +} \ No newline at end of file diff --git a/EM_UI/ExternalStatistics/ExternalStatisticsForm.cs b/EM_UI/ExternalStatistics/ExternalStatisticsForm.cs new file mode 100644 index 0000000..6bf0260 --- /dev/null +++ b/EM_UI/ExternalStatistics/ExternalStatisticsForm.cs @@ -0,0 +1,1124 @@ +using EM_Common; +using EM_Common_Win; +using EM_UI.CountryAdministration; +using EM_UI.DataSets; +using EM_UI.Tools; +using EM_Statistics.ExternalStatistics; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web.UI.WebControls; +using System.Windows.Controls; +using System.Windows.Forms; +using System.Xml; +using static EM_UI.ExternalStatistics.ExternalStatisticsComponent; + +namespace EM_UI.ExternalStatistics +{ + public partial class ExternalStatisticsForm : Form + { + internal EM_UI_MainForm _mainForm = null; + internal CountryConfigFacade _countryConfigFacade = null; + + + //Aggregates - Amounts tab + DataSet dgvDataSetExStatAggAmounts = new DataSet("dgvDataSetExStatAggAmounts"); + DataTable dgvDataTableExStatAggAmounts = new DataTable("dgvDataTableExStatAggAmounts"); + + //Aggregates - Beneficiaries/Taxpayers tab + DataSet dgvDataSetExStatAggBenTax = new DataSet("dgvDataSetExStatAggBenTax"); + DataTable dgvDataTableExStatAggBenTax = new DataTable("dgvDataTableExStatAggBenTax"); + + //Aggregates - Level + DataSet dgvDataSetExStatAggLevel = new DataSet("dgvDataSetExStatAggLevel"); + DataTable dgvDataTableExStatAggLevel = new DataTable("dgvDataTableExStatAggLevel"); + + //Distributional - inequality + DataSet dgvDataSetExStatDistIneq = new DataSet("dgvDataSetExStatDistIneq"); + DataTable dgvDataTableExStatDistIneq = new DataTable("dgvDataTableExStatDistIneq"); + + //Distributional - poverty + DataSet dgvDataSetExStatDistPov = new DataSet("dgvDataSetExStatDistPov"); + DataTable dgvDataTableExStatDistPov = new DataTable("dgvDataTableExStatDistPov"); + + bool keepUndoData = false; + bool scrolling = false; + bool columnsChanged = false; + ADOUndoManager undoManager = new ADOUndoManager(); + const string _colYear = "colYear"; + const string _other = "Other"; + public const string AGGREGATES = "Aggregates"; + public const string DISTRIBUTIONAL = "Distributional"; + public const string DISTRIBUTIONAL_INEQUALITY = "Distributional - Inequality"; + public const string DISTRIBUTIONAL_POVERTY = "Distributional - Poverty"; + int colIdIndex = 0; + int colNameIndex = 0; + int colDescriptionIndex = 0; + int colCommentsIndex = 0; + int colSourceIndex = 0; + int colIncomeListIndex = 0; + int colDestinationIndex = 0; + List years = new List(); + + internal ExternalStatisticsForm(EM_UI_MainForm mainForm) + { + mainForm.Cursor = Cursors.WaitCursor; + _mainForm = mainForm; + _countryConfigFacade = CountryAdministrator.GetCountryConfigFacade(mainForm.GetCountryShortName()); + InitializeComponent(); + + //Before loading the tables, we need to obtain the information to populate them + ExternalStatistic externalStatistics = ExternalStatisticUtil.LoadExternatStatisticsComponentsAndValues(mainForm.GetCountryShortName()); + Dictionary storedExternalStatisticsAggregates = externalStatistics.Aggregate; + years = externalStatistics.Years; + + //dgvExStatAggAmountsData.CellLeave += new DataGridViewCellEventHandler(dgvExStatAmountsData_CellLeave); + + + //Now we display it in the table Amounts + dgvDataSetExStatAggAmounts.Tables.Add(dgvDataTableExStatAggAmounts); + dgvExStatAggAmountsData.DataSource = dgvDataSetExStatAggAmounts; + dgvExStatAggAmountsData.DataMember = "dgvDataTableExStatAggAmounts"; + dgvExStatAggAmountsData.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit); + + //And also in the table Beneficiaries/Taxpayers + dgvDataSetExStatAggBenTax.Tables.Add(dgvDataTableExStatAggBenTax); + dgvExStatAggBenTaxData.DataSource = dgvDataSetExStatAggBenTax; + dgvExStatAggBenTaxData.DataMember = "dgvDataTableExStatAggBenTax"; + dgvExStatAggBenTaxData.AllowUserToAddRows = false; + dgvExStatAggBenTaxData.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit); + + //And also in the table Levels + dgvDataSetExStatAggLevel.Tables.Add(dgvDataTableExStatAggLevel); + dgvExStatAggLevelData.DataSource = dgvDataSetExStatAggLevel; + dgvExStatAggLevelData.DataMember = "dgvDataTableExStatAggLevel"; + dgvExStatAggLevelData.AllowUserToAddRows = false; + dgvExStatAggLevelData.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit); + + //Distributional inequality + dgvDataSetExStatDistIneq.Tables.Add(dgvDataTableExStatDistIneq); + dgvExStatDistIneqData.DataSource = dgvDataSetExStatDistIneq; + dgvExStatDistIneqData.DataMember = "dgvDataTableExStatDistIneq"; + dgvExStatDistIneqData.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit); + + //Distributional poverty + dgvDataSetExStatDistPov.Tables.Add(dgvDataTableExStatDistPov); + dgvExStatDistPovData.DataSource = dgvDataSetExStatDistPov; + dgvExStatDistPovData.DataMember = "dgvDataTableExStatDistPov"; + dgvExStatDistPovData.CellEndEdit += new DataGridViewCellEventHandler(dgv_CellEndEdit); + + PopulateTablesWithExternalStatistics(externalStatistics, years); + + // make sure that you all data is loaded before running this! + CustomizeCells(dgvExStatAggAmountsData); + CustomizeCells(dgvExStatAggBenTaxData); + CustomizeCells(dgvExStatAggLevelData); + CustomizeCells(dgvExStatDistIneqData); + CustomizeCells(dgvExStatDistPovData); + + mainForm.Cursor = Cursors.Default; + } + + // This function must be run only when the data has already been loaded! + private void CustomizeCells(DataGridView dgv) + { + // fill row headers with numbers + dgv.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders; + dgv.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(dgv_RowPostPaint); + // handle the copy/paste/undo/redo/delete shortcuts + dgv.KeyDown += new System.Windows.Forms.KeyEventHandler(dgv_KeyDown); + // Draw the readonly cells grey and lock them + dgv.CellBeginEdit += new DataGridViewCellCancelEventHandler(dgv_CellTryEnter); + dgv.CellPainting += new DataGridViewCellPaintingEventHandler(dgv_CellPainting); + // hide the id column + dgv.Columns[0].Visible = false; + // block sorting + foreach (DataGridViewColumn column in dgv.Columns) column.SortMode = DataGridViewColumnSortMode.NotSortable; + // add right-click functionalities - ONLY for Levels at the moment + if (dgv == dgvExStatAggLevelData) dgv.MouseClick += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseClick); + } + + private void dgv_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + DataGridView dgv = sender as DataGridView; + var rowIdx = (e.RowIndex + 1).ToString(); + + var centerFormat = new StringFormat() + { + // right alignment might actually make more sense for numbers + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center + }; + + var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, dgv.RowHeadersWidth, e.RowBounds.Height); + e.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat); + } + + // Decides if a cell is readonly or not. + private bool IsCellReadOnly(DataGridView dgv, int rowIndex, int colIndex, bool checkNameDesc = true) + { + if (rowIndex < 0 || rowIndex >= dgv.RowCount - (dgv.AllowUserToAddRows ? 1 : 0) || colIndex < 0) return false; // not a row or new row + if (dgv.Rows[rowIndex].Cells[colIndex].ReadOnly) return true; // a readonly cell by definition (e.g. + if (colIndex == colIdIndex) return true; // ID column is always readonly + if (dgv == dgvExStatAggAmountsData && (colIndex == colNameIndex || colIndex == colDescriptionIndex)) // for the aggregates table only, Name & Description columns might be readonly, but might not + { + if (dgv.Rows[rowIndex].Cells[colIncomeListIndex] == null || dgv.Rows[rowIndex].Cells[colIncomeListIndex].Value == null) return false; // this is a new row + if (string.IsNullOrEmpty(dgv.Rows[rowIndex].Cells[colIncomeListIndex].Value.ToString()) || dgv.Rows[rowIndex].Cells[colIncomeListIndex].Value.ToString().Equals(_other)) return false; // this is a new row or "Other" incomelist + return true; // this is a standard incomelist, so readonly + } + return false; // this is not a readonly column + } + + private void dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) + { + DataGridView dgv = sender as DataGridView; + if (dgv == null) return; + e.CellStyle.BackColor = IsCellReadOnly(dgv, e.RowIndex, e.ColumnIndex) ? Color.LightGray : Color.White; + } + + //The name, income list and description cannot be edited + private void dgv_CellTryEnter(object sender, DataGridViewCellCancelEventArgs e) + { + if ((sender as DataGridView) == null) return; + if (IsCellReadOnly(sender as DataGridView, e.RowIndex, e.ColumnIndex)) e.Cancel = true; + } + + // every time you edit something on the Aggregates table you need to check if the beneficiaries and Level tables need updating + private void copyFixedColumns(int rowIndex, int colIndex, bool acceptChanges = true) + { + if (rowIndex < 0 || colIdIndex < 0) return; + string value = dgvExStatAggAmountsData.Rows[rowIndex].Cells[colIndex].Value.ToString(); + DataRow rowBen = (rowIndex < dgvDataTableExStatAggBenTax.Rows.Count) ? dgvDataTableExStatAggBenTax.Rows[rowIndex] : null; + // if a new row was added, add it to this table too + if (rowBen == null) + { + rowBen = dgvDataTableExStatAggBenTax.Rows.Add(); + dgvExStatAggBenTaxData.Rows[rowIndex].Cells[colBenIncomeList.Name].Value = _other; + } + // if a fixed cell was changed, change it in this table too + if (colIndex == colNameIndex || colIndex == colDescriptionIndex || colIndex == colCommentsIndex || colIndex == colSourceIndex || colIndex == colDestinationIndex) + rowBen.SetField(colIndex, value); + if (acceptChanges && dgvDataSetExStatAggBenTax.HasChanges()) dgvDataSetExStatAggBenTax.AcceptChanges(); + + DataRow rowLevel = (rowIndex < dgvDataTableExStatAggLevel.Rows.Count) ? dgvDataTableExStatAggLevel.Rows[rowIndex] : null; + // if a new row was added, add it to this table too + if (rowLevel == null) + { + rowLevel = dgvDataTableExStatAggLevel.Rows.Add(); + dgvExStatAggLevelData.Rows[rowIndex].Cells[colLevelIncomeList.Name].Value = _other; + } + // if a fixed cell was changed, change it in this table too + if (colIndex == colNameIndex || colIndex == colDescriptionIndex || colIndex == colCommentsIndex || colIndex == colSourceIndex || colIndex == colDestinationIndex) + rowLevel.SetField(colIndex, value); + if (acceptChanges && dgvDataSetExStatAggLevel.HasChanges()) dgvDataSetExStatAggLevel.AcceptChanges(); + } + + void ClearCells(DataGridView dgv) + { + if (dgv.GetCellCount(DataGridViewElementStates.Selected) > 0) + { + foreach (DataGridViewCell cell in dgv.SelectedCells) + { + if (cell.OwningRow.DataBoundItem != null) + { + if (!IsCellReadOnly(dgv, cell.RowIndex, cell.ColumnIndex)) + { + cell.Value = ""; + (cell.OwningRow.DataBoundItem as DataRowView).Row.EndEdit(); + } + } + } + } + } + + void CopyToClipboard(DataGridView dgv) + { + if (dgv.GetCellCount(DataGridViewElementStates.Selected) > 0) + { + try + { + Clipboard.SetDataObject(dgv.GetClipboardContent()); + } + catch (Exception exception) + { + UserInfoHandler.ShowException(exception); + } + } + } + + List GetYearColumnsAsDisplayed(DataGridView dgv) + { + SortedList sortedColumns = new SortedList(); + foreach (DataGridViewColumn yearColumn in dgv.Columns) + if (yearColumn.Name.StartsWith(_colYear)) + sortedColumns.Add(yearColumn.DisplayIndex, yearColumn); + List yearColumnsAsDisplayed = new List(); + foreach (DataGridViewColumn yearColumn in sortedColumns.Values) + yearColumnsAsDisplayed.Add(yearColumn); + return yearColumnsAsDisplayed; + } + + int GetYearColumnIndexByDisplayIndex(DataGridView dgv, int displayIndex) + { + foreach (DataGridViewColumn column in dgv.Columns) + if (column.DisplayIndex == displayIndex) + return column.Index; + return -1; + } + + private void storeUndoAction(DataGridView dgv) + { + if (keepUndoData) + { + if ((dgv.DataSource as DataSet) == null) return; + keepUndoData = false; + if ((dgv.DataSource as DataSet).HasChanges()) + { + Point cell = dgv.CurrentCellAddress; + if (cell.X == -1) cell = new Point(dgv.SelectedCells[0].ColumnIndex, dgv.SelectedCells[0].RowIndex); + undoManager.Commit(); + dgv.CurrentCell = dgv[Math.Min(cell.X, dgv.ColumnCount - 1), Math.Min(cell.Y, dgv.RowCount - 1)]; + } + keepUndoData = true; + } + } + + private void applyUndo(DataGridView dgv) + { + if (keepUndoData) + { + keepUndoData = false; + Point cell = dgv.CurrentCellAddress; + if (cell.X == -1) cell = new Point(dgv.SelectedCells[0].ColumnIndex, dgv.SelectedCells[0].RowIndex); + undoManager.Undo(); + dgv.CurrentCell = dgv[Math.Min(cell.X, dgv.ColumnCount - 1), Math.Min(cell.Y, dgv.RowCount - 1)]; + keepUndoData = true; + } + } + + private void applyRedo(DataGridView dgv) + { + if (keepUndoData) + { + keepUndoData = false; + Point cell = GetCurrentCell(dgv); + undoManager.Redo(); + SetCurrentCell(dgv, cell); + keepUndoData = true; + } + } + + Point GetCurrentCell(DataGridView dgv) + { + Point cell = dgv.CurrentCellAddress; + if (cell.X == -1) cell = new Point(dgv.SelectedCells[0].ColumnIndex, dgv.SelectedCells[0].RowIndex); + return cell; + } + + void SetCurrentCell(DataGridView dgv, Point cell) + { + dgv.CurrentCell = dgv[Math.Min(cell.X, dgv.ColumnCount - 1), Math.Min(cell.Y, dgv.RowCount - 1)]; + } + + void GetFromClipboard(DataGridView dgv) + { + try + { + if ((dgv.DataSource as DataSet) == null || (dgv.DataSource as DataSet).Tables.Count == 0) return; + DataTable dt = (dgv.DataSource as DataSet).Tables[0]; + string clipboardText = Clipboard.GetText(); + string[] clipboardLines = clipboardText.Split('\n'); + int indexRow = dgv.CurrentCell.RowIndex; + bool addedExtraLine = (indexRow == dt.Rows.Count); + int currentCellColumnIndex = dgv.Columns[dgv.CurrentCell.ColumnIndex].DisplayIndex; + foreach (string line in clipboardLines) + { + if (line.Length > 0) + { + DataRow row; + if (indexRow == dt.Rows.Count) + { + if (!dgv.AllowUserToAddRows) break; + row = dt.NewRow(); + dt.Rows.Add(row); + } + else + row = dt.Rows[indexRow]; + List cols = GetYearColumnsAsDisplayed(dgv); + string[] clipboardCells = line.Split('\t').Select(p => p.Trim()).ToArray(); // trim cells to avoid unwanted new lines and spaces at the end + for (int indexColumn = 0; indexColumn < clipboardCells.GetLength(0); ++indexColumn) + { + if (currentCellColumnIndex + indexColumn < dgv.ColumnCount) + { + // if not a readonly cell + if (!IsCellReadOnly(dgv, indexRow, currentCellColumnIndex + indexColumn)) + { + // copy the value + int colIndex = GetYearColumnIndexByDisplayIndex(dgv, currentCellColumnIndex + indexColumn); + + // if this is a Year column, that is not in the Level table, replace comma with dot (fix decimal separator issue) + if (dgv != dgvExStatAggLevelData && dgv.Columns[colIndex].Name.StartsWith(_colYear)) + row[colIndex] = EM_Helpers.SetCleanInvariantNumberFormat(clipboardCells[indexColumn]); + else // else copy value as is + row[colIndex] = clipboardCells[indexColumn]; + + // if this is the aggregate table, check if we need to copy to other tables + if (dgv == dgvExStatAggAmountsData) copyFixedColumns(indexRow, currentCellColumnIndex + indexColumn, false); + } + } + else + break; + } + indexRow++; + } + else + break; + } + if (addedExtraLine) dgv.Rows.RemoveAt(dgv.Rows.Count - 2); // get rid of the extra line added by the grid + if (dgv == dgvExStatAggAmountsData) // if this is the aggregate table, check if we need to accept changes in the other tables + { + if (dgvDataSetExStatAggBenTax.HasChanges()) dgvDataSetExStatAggBenTax.AcceptChanges(); + if (dgvDataSetExStatAggLevel.HasChanges()) dgvDataSetExStatAggLevel.AcceptChanges(); + } + } + catch (Exception exception) + { + UserInfoHandler.ShowException(exception); + } + + } + + private void dgv_KeyDown(object sender, KeyEventArgs keyEventArgs) + { + DataGridView dgv = sender as DataGridView; + if (dgv == null) return; + if (keyEventArgs.Control && (keyEventArgs.KeyCode == Keys.C || keyEventArgs.KeyCode == Keys.Insert)) + { + CopyToClipboard(dgv); + } + else if ((keyEventArgs.Control && keyEventArgs.KeyCode == Keys.V) || (keyEventArgs.Shift && keyEventArgs.KeyCode == Keys.Insert)) + { + keepUndoData = false; + GetFromClipboard(dgv); + keepUndoData = true; + storeUndoAction(dgv); + } + else if ((keyEventArgs.Control && keyEventArgs.KeyCode == Keys.X) || (keyEventArgs.Shift && keyEventArgs.KeyCode == Keys.Delete)) + { + keepUndoData = false; + CopyToClipboard(dgv); + ClearCells(dgv); + keepUndoData = true; + storeUndoAction(dgv); + } + else if (keyEventArgs.KeyCode == Keys.Delete) + { + keepUndoData = false; + ClearCells(dgv); + keepUndoData = true; + storeUndoAction(dgv); + } + else if (keyEventArgs.Control && keyEventArgs.KeyCode == Keys.Z) + { + applyUndo(dgv); + } + else if (keyEventArgs.Control && keyEventArgs.KeyCode == Keys.Y) + { + applyRedo(dgv); + } + } + + private void deleteSelectedRows(DataGridView dgv) + { + string note = (dgv == dgvExStatAggAmountsData || dgv == dgvExStatAggBenTaxData || dgv == dgvExStatAggLevelData) ? "Note: These rows will be removed from all three tables: Amounts, Beneficiaries & Level\n\n" : ""; + if (dgv.SelectedRows.Count < 1 || MessageBox.Show("Are you sure you want to remove the selected row(s)?\n\n" + note + "Note: you will not be able to undo this action or any action before this.", "Remove Rows", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) return; + if ((dgv.DataSource as DataSet) == null || (dgv.DataSource as DataSet).Tables.Count == 0) return; + DataTable dt = (dgv.DataSource as DataSet).Tables[0]; + + keepUndoData = false; + foreach (DataGridViewRow vrow in dgv.SelectedRows) + { + if (vrow.IsNewRow) continue; // ignore delete for the empty new row + + if (!string.IsNullOrEmpty(note)) // if it is one of the first three tables, delete in all three, based on id + { + string id = vrow.Cells[0].Value.ToString(); + dgvExStatAggAmountsData.Rows.Remove(dgvExStatAggAmountsData.Rows.Cast().Where(r => r.Cells[0].Value.ToString().Equals(id)).First()); + dgvExStatAggBenTaxData.Rows.Remove(dgvExStatAggBenTaxData.Rows.Cast().Where(r => r.Cells[0].Value.ToString().Equals(id)).First()); + dgvExStatAggLevelData.Rows.Remove(dgvExStatAggLevelData.Rows.Cast().Where(r => r.Cells[0].Value.ToString().Equals(id)).First()); + } + else // else delete this row + { + dt.Rows.Remove((vrow.DataBoundItem as DataRowView).Row); + } + } + keepUndoData = true; + if (!string.IsNullOrEmpty(note)) // if it is one of the first three tables, save all three + { + dgvDataSetExStatAggAmounts.AcceptChanges(); + dgvDataSetExStatAggBenTax.AcceptChanges(); + dgvDataSetExStatAggLevel.AcceptChanges(); + } + else + { + (dgv.DataSource as DataSet).AcceptChanges(); // else save just this + } + + undoManager.Reset(); + columnsChanged = true; + } + + private void toolStripMenuItemDelete_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsm = sender as ToolStripMenuItem; + if (tsm == null) return; + ContextMenuStrip cms = tsm.GetCurrentParent() as ContextMenuStrip; + if (cms == null) return; + DataGridView dgv = cms.SourceControl as DataGridView; + if (dgv == null) return; + deleteSelectedRows(dgv); + } + + private void dgv_MouseClick(object sender, MouseEventArgs e) + { + DataGridView dgv = sender as DataGridView; + if (dgv == null) return; + if (e.Button == MouseButtons.Right) + { + int currentMouseOverRow = dgv.HitTest(e.X, e.Y).RowIndex; + int currentMouseOverColumn = dgv.HitTest(e.X, e.Y).ColumnIndex; + if (currentMouseOverRow >= 0) + { + bool keepSelection = false; + foreach (DataGridViewRow vrow in dgv.SelectedRows) + { + if (vrow.Index == currentMouseOverRow) keepSelection = true; + } + if (!keepSelection) + { + dgv.ClearSelection(); + dgv.Rows[currentMouseOverRow].Selected = true; + } + contextMenuStripRows.Show(dgv, e.X, e.Y); + } + } + + } + + + void PopulateTablesWithExternalStatistics(ExternalStatistic externalStatistics, List years) + { + keepUndoData = false; + + Dictionary storedExternalStatisticsAggregates = externalStatistics.Aggregate; + //Aggregates - Amount table + dgvDataTableExStatAggAmounts.PrimaryKey = new DataColumn[] { dgvDataTableExStatAggAmounts.Columns.Add("ID", typeof(Int16)) }; + dgvDataTableExStatAggAmounts.PrimaryKey[0].AutoIncrement = true; + DataColumn colIncomeList = new DataColumn(colAmIncomeList.Name) { DefaultValue = _other }; + dgvDataTableExStatAggAmounts.Columns.Add(colIncomeList); + DataColumn colAm = dgvDataTableExStatAggAmounts.Columns.Add(colAmName.Name); + DataColumn colDescription = dgvDataTableExStatAggAmounts.Columns.Add(colAmDescription.Name); + + // Aggregates - Number of beneficiaries/taxpayers + dgvDataTableExStatAggBenTax.PrimaryKey = new DataColumn[] { dgvDataTableExStatAggBenTax.Columns.Add(colBenID.Name, typeof(Int16)) }; + dgvDataTableExStatAggBenTax.PrimaryKey[0].AutoIncrement = true; + dgvDataTableExStatAggBenTax.Columns.Add(colBenIncomeList.Name); + dgvDataTableExStatAggBenTax.Columns.Add(colBenName.Name); + dgvDataTableExStatAggBenTax.Columns.Add(colBenDescription.Name); + + // Aggregates - Level + dgvDataTableExStatAggLevel.PrimaryKey = new DataColumn[] { dgvDataTableExStatAggLevel.Columns.Add(colLevelID.Name, typeof(Int16)) }; + dgvDataTableExStatAggLevel.PrimaryKey[0].AutoIncrement = true; + dgvDataTableExStatAggLevel.Columns.Add(colLevelIncomeList.Name); + dgvDataTableExStatAggLevel.Columns.Add(colLevelName.Name); + dgvDataTableExStatAggLevel.Columns.Add(colLevelDescription.Name); + + // Distributional - Inequality + dgvDataTableExStatDistIneq.PrimaryKey = new DataColumn[] { dgvDataTableExStatDistIneq.Columns.Add(colIneqID.Name, typeof(Int16)) }; + dgvDataTableExStatDistIneq.PrimaryKey[0].AutoIncrement = true; + dgvDataTableExStatDistIneq.Columns.Add(colIneqName.Name); + dgvDataTableExStatDistIneq.Columns.Add(colIneqDesc.Name); + + // Distributional - Poverty + dgvDataTableExStatDistPov.PrimaryKey = new DataColumn[] { dgvDataTableExStatDistPov.Columns.Add(colPovID.Name, typeof(Int16)) }; + dgvDataTableExStatDistPov.PrimaryKey[0].AutoIncrement = true; + dgvDataTableExStatDistPov.Columns.Add(colPovName.Name); + dgvDataTableExStatDistPov.Columns.Add(colPovDesc.Name); + + //First, we add the columns for the years + foreach (string year in years.OrderBy(x => x)) + { + AddYearColumn(year); + } + + DataColumn colComments = dgvDataTableExStatAggAmounts.Columns.Add(colAmComments.Name); + dgvDataTableExStatAggBenTax.Columns.Add(colBenComments.Name); + dgvDataTableExStatAggLevel.Columns.Add(colLevelComments.Name); + dgvDataTableExStatDistPov.Columns.Add(colPovComments.Name); + dgvDataTableExStatDistIneq.Columns.Add(colIneqComments.Name); + + DataColumn colSource = dgvDataTableExStatAggAmounts.Columns.Add(colAmSource.Name); + dgvDataTableExStatAggBenTax.Columns.Add(colBenSource.Name); + dgvDataTableExStatAggLevel.Columns.Add(colLevelSource.Name); + dgvDataTableExStatDistPov.Columns.Add(colPovSource.Name); + dgvDataTableExStatDistIneq.Columns.Add(colIneqSource.Name); + + DataColumn colDestination = dgvDataTableExStatAggAmounts.Columns.Add(colAmDestination.Name); + colDestination.SetOrdinal(colAmDestination.DisplayIndex); + int di = colAmDestination.DisplayIndex; + //dgvDataTableExStatAggAmounts.Columns.Remove(colAmDestination.Name); + dgvExStatAggAmountsData.Columns.Remove(colAmDestination.Name); + DataGridViewComboBoxColumn cmbColDestination = new DataGridViewComboBoxColumn(); + cmbColDestination.DataPropertyName = colAmDestination.Name; + cmbColDestination.HeaderText = "Destination"; + cmbColDestination.Name = colDestination.ColumnName; + cmbColDestination.Width = 125; + cmbColDestination.FlatStyle = FlatStyle.Flat; + cmbColDestination.Items.AddRange(InDepthDefinitions.DestinationTables.ToArray()); + + cmbColDestination.DisplayIndex = di; + dgvExStatAggAmountsData.Columns.Add(cmbColDestination); + + dgvDataTableExStatAggBenTax.Columns.Add(colBenDestination.Name); + dgvDataTableExStatAggLevel.Columns.Add(colLevelDestination.Name); + + dgvExStatAggAmountsData.EditingControlShowing += DgvExStatAggAmountsData_EditingControlShowing; + + //AGGREGATES + //We sort the dictionarty by incomelist and variable name + Dictionary sortedStoredExternalStatisticsAggregates = new Dictionary(storedExternalStatisticsAggregates); + + foreach (KeyValuePair var in sortedStoredExternalStatisticsAggregates) // add one row for each index + { + string dest = string.IsNullOrEmpty(var.Value.Destination) ? + (InDepthDefinitions.IncomelistDefaultDestination.ContainsKey(var.Value.IncomeList) ? InDepthDefinitions.IncomelistDefaultDestination[var.Value.IncomeList] : InDepthDefinitions.DESTINATION_NONE) : + var.Value.Destination; + + //Aggregates - Amounts + DataRow rowAm = dgvDataTableExStatAggAmounts.Rows.Add(); + rowAm.SetField(colAmIncomeList.Name, var.Value.IncomeList); + rowAm.SetField(colAmName.Name, var.Value.Name); + rowAm.SetField(colAmDescription.Name, var.Value.Description); + rowAm.SetField(colAmComments.Name, var.Value.Comment); + rowAm.SetField(colAmSource.Name, var.Value.Source); + rowAm.SetField(colAmDestination.Name, dest); + + //Aggregates - Beneficiaries / Taxpayers + DataRow rowBen = dgvDataTableExStatAggBenTax.Rows.Add(); + rowBen.SetField(colBenIncomeList.Name, var.Value.IncomeList); + rowBen.SetField(colBenName.Name, var.Value.Name); + rowBen.SetField(colBenDescription.Name, var.Value.Description); + rowBen.SetField(colBenComments.Name, var.Value.Comment); + rowBen.SetField(colBenSource.Name, var.Value.Source); + rowBen.SetField(colBenDestination.Name, dest); + + //Aggregates - Level + DataRow rowLevel = dgvDataTableExStatAggLevel.Rows.Add(); + rowLevel.SetField(colLevelIncomeList.Name, var.Value.IncomeList); + rowLevel.SetField(colLevelName.Name, var.Value.Name); + rowLevel.SetField(colLevelDescription.Name, var.Value.Description); + rowLevel.SetField(colLevelComments.Name, var.Value.Comment); + rowLevel.SetField(colLevelSource.Name, var.Value.Source); + rowLevel.SetField(colLevelDestination.Name, dest); + + + //Tables are populated with the values + Dictionary yearValues = var.Value.YearValues; + if (yearValues != null) + { + foreach (KeyValuePair yearValue in yearValues) + { + string year = yearValue.Key; + string amount = yearValue.Value.Amount; + rowAm.SetField(_colYear + year, amount); + + string ben = yearValue.Value.Beneficiares; + rowBen.SetField(_colYear + year, ben); + + string level = yearValue.Value.Level; + rowLevel.SetField(_colYear + year, string.IsNullOrEmpty(level) ? "Individual" : level); + } + } + } + + //DISTRIBUTIONAL + Dictionary externalStatDistr = externalStatistics.Distributional; + foreach (ExternalStatisticDistributional var in externalStatDistr.Values) // add one row for each index + { + DataRow row = null; + if (var.TableName.Equals(DISTRIBUTIONAL_INEQUALITY)) + { + row = dgvDataTableExStatDistIneq.Rows.Add(); + row.SetField(colIneqName.Name, var.Name); + row.SetField(colIneqDesc.Name, var.Description); + row.SetField(colIneqComments.Name, var.Comment); + row.SetField(colIneqSource.Name, var.Source); + } + else if (var.TableName.Equals(DISTRIBUTIONAL_POVERTY)) + { + row = dgvDataTableExStatDistPov.Rows.Add(); + row.SetField(colPovName.Name, var.Name); + row.SetField(colPovDesc.Name, var.Description); + row.SetField(colPovComments.Name, var.Comment); + row.SetField(colPovSource.Name, var.Source); + } + else continue; + + //Tables are populated with the values + Dictionary yearValues = var.YearValues; + foreach (KeyValuePair yearValue in yearValues) + { + string year = yearValue.Key; + string amount = yearValue.Value; + row.SetField(_colYear + year, amount); + } + } + /**/ + + dgvDataSetExStatAggAmounts.AcceptChanges(); + dgvDataSetExStatAggBenTax.AcceptChanges(); + dgvDataSetExStatAggLevel.AcceptChanges(); + dgvDataSetExStatDistIneq.AcceptChanges(); + dgvDataSetExStatDistPov.AcceptChanges(); + undoManager.AddDataSet(dgvDataSetExStatAggAmounts); + undoManager.AddDataSet(dgvDataSetExStatAggBenTax); + undoManager.AddDataSet(dgvDataSetExStatAggLevel); + undoManager.AddDataSet(dgvDataSetExStatDistIneq); + undoManager.AddDataSet(dgvDataSetExStatDistPov); + + colNameIndex = colAm.Ordinal; + colDescriptionIndex = colDescription.Ordinal; + colCommentsIndex = colComments.Ordinal; + colSourceIndex = colSource.Ordinal; + colIncomeListIndex = colIncomeList.Ordinal; + colDestinationIndex = di; + + keepUndoData = true; + } + + + /** + * This function controls which options are displayed in the Destination combobox for each ils/var + */ + private void DgvExStatAggAmountsData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) + { + if (e.Control is DataGridViewComboBoxEditingControl) + { + DataGridView dgv = sender as DataGridView; + string il = dgv.Rows[dgv.CurrentCell.RowIndex].Cells[colAmIncomeList.Name].Value.ToString(); + // variables and ils NOT in ils_extstat_other, should have the default destination or "none" + if (!il.Equals(InDepthDefinitions.ILS_EXTSTAT_OTHER)) + { + DataGridViewComboBoxEditingControl cmb = e.Control as DataGridViewComboBoxEditingControl; + cmb.Items.Clear(); + cmb.Items.Add(InDepthDefinitions.IncomelistDefaultDestination[il]); + cmb.Items.Add(InDepthDefinitions.DESTINATION_NONE); + } + // the ils_extstat_other itself, should only have "none" + else if (string.IsNullOrEmpty(dgv.Rows[dgv.CurrentCell.RowIndex].Cells[colAmName.Name].Value.ToString())) + { + DataGridViewComboBoxEditingControl cmb = e.Control as DataGridViewComboBoxEditingControl; + cmb.Items.Clear(); + cmb.Items.Add(InDepthDefinitions.DESTINATION_NONE); + } + } + } + + void AddYearColumn(string caption, bool manual = false) + { + // Starting position for years is hard-coded for each table, so we have them all here for transparency + const int StartPosAggBenLev = 4; + const int StartPosIneq = 3; + const int StartPosPov = 3; + + //Aggregates - Amounts + DataColumn colAm = dgvDataTableExStatAggAmounts.Columns.Add(_colYear + caption); + //add before the comments-column + + List allyears = GetExistingYears(); + allyears.Add(caption); + int yearIndex = allyears.OrderBy(x => x).ToList().IndexOf(caption); + + colAm.SetOrdinal(StartPosAggBenLev + yearIndex); + DataGridViewColumn headerColumn = dgvExStatAggAmountsData.Columns[_colYear + caption]; + headerColumn.FillWeight = 80F; + headerColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + headerColumn.HeaderText = caption; + headerColumn.Name = _colYear + caption; + headerColumn.DataPropertyName = headerColumn.Name; + headerColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumn.DisplayIndex = colAm.Ordinal; + + //Aggregates - Tax Beneficiaries - Taxpayers + DataColumn colBen = dgvDataTableExStatAggBenTax.Columns.Add(_colYear + caption); + //add before the comments-column + colBen.SetOrdinal(StartPosAggBenLev + yearIndex); + DataGridViewColumn headerColumnBen = dgvExStatAggBenTaxData.Columns[_colYear + caption]; + headerColumnBen.FillWeight = 80F; + headerColumnBen.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + headerColumnBen.HeaderText = caption; + headerColumnBen.Name = _colYear + caption; + headerColumnBen.DataPropertyName = headerColumn.Name; + headerColumnBen.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumnBen.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumnBen.DisplayIndex = colBen.Ordinal; + + //Aggregates - Level + DataColumn colLevel = dgvDataTableExStatAggLevel.Columns.Add(_colYear + caption); + colLevel.SetOrdinal(StartPosAggBenLev + yearIndex); + dgvExStatAggLevelData.Columns.Remove(_colYear + caption); + DataGridViewComboBoxColumn headerColumnLevel = new DataGridViewComboBoxColumn(); + headerColumnLevel.DataPropertyName = _colYear + caption; + headerColumnLevel.HeaderText = caption; + headerColumnLevel.Name = _colYear + caption; + headerColumnLevel.Width = 125; + headerColumnLevel.FlatStyle = FlatStyle.Flat; + List colLevelOptions = new List { "Individual", "Household" }; + headerColumnLevel.DataSource = colLevelOptions; + headerColumnLevel.DisplayIndex = colLevel.Ordinal; + dgvExStatAggLevelData.Columns.Add(headerColumnLevel); + dgvExStatAggLevelData.DataError += new DataGridViewDataErrorEventHandler(DgvExStatAggLevelData_DataError); + + + //Distributional - Inequality + DataColumn colIneq = dgvDataTableExStatDistIneq.Columns.Add(_colYear + caption); + //add before the comments-column + colIneq.SetOrdinal(StartPosIneq + yearIndex); + DataGridViewColumn headerColumnIneq = dgvExStatDistIneqData.Columns[_colYear + caption]; + headerColumnIneq.FillWeight = 80F; + headerColumnIneq.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + headerColumnIneq.HeaderText = caption; + headerColumnIneq.Name = _colYear + caption; + headerColumnIneq.DataPropertyName = headerColumn.Name; + headerColumnIneq.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumnIneq.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumnIneq.DisplayIndex = colIneq.Ordinal; + + + //Distributional - Poverty + DataColumn colPov = dgvDataTableExStatDistPov.Columns.Add(_colYear + caption); + //add before the comments-column + colPov.SetOrdinal(StartPosPov + yearIndex); + DataGridViewColumn headerColumnPov = dgvExStatDistPovData.Columns[_colYear + caption]; + headerColumnPov.FillWeight = 80F; + headerColumnPov.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + headerColumnPov.HeaderText = caption; + headerColumnPov.Name = _colYear + caption; + headerColumnPov.DataPropertyName = headerColumn.Name; + headerColumnPov.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumnPov.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; + headerColumnPov.DisplayIndex = colPov.Ordinal; + + foreach (DataRow row in dgvDataTableExStatAggAmounts.Rows) row[headerColumn.Name] = ""; // this is to make sure the added column counts as a DataSet change... + foreach (DataRow row in dgvDataTableExStatAggBenTax.Rows) row[headerColumnBen.Name] = ""; + foreach (DataRow row in dgvDataTableExStatDistIneq.Rows) row[headerColumnIneq.Name] = ""; + foreach (DataRow row in dgvDataTableExStatDistPov.Rows) row[headerColumnPov.Name] = ""; + + //also add year to the combo-box that allows for selecting a year to delete + cmbYearToDelete.Items.Insert(yearIndex, caption); + + int nextYear = EM_Helpers.SaveConvertToInt(caption) + 1; + if (updwnYearToAdd.Value < nextYear) + updwnYearToAdd.Value = nextYear; + dgvExStatAggAmountsData.Refresh(); + dgvExStatAggBenTaxData.Refresh(); + dgvExStatAggLevelData.Refresh(); + dgvExStatDistIneqData.Refresh(); + dgvExStatDistPovData.Refresh(); + + //The index of the column for comments may have changed, it needs to be updated + colCommentsIndex = dgvDataTableExStatAggAmounts.Columns.IndexOf(colAmComments.Name); + colSourceIndex = dgvDataTableExStatAggAmounts.Columns.IndexOf(colAmSource.Name); + colDestinationIndex = dgvDataTableExStatAggAmounts.Columns.IndexOf(colAmDestination.Name); + //updateColumnsColor(true, previousColCommentsIndex); + } + + // cancels out errors for invalid values that would otherwise crash the Level table when pasting wrong values + private void DgvExStatAggLevelData_DataError(object sender, DataGridViewDataErrorEventArgs e) + { + e.Cancel = true; + } + + private void btnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + + private void btnOK_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + _mainForm.PerformAction(new ExternalStatisticsAction(this), false); + Close(); + } + + private void btnAddYear_Click(object sender, EventArgs e) + { + string year = updwnYearToAdd.Value.ToString(); + if (GetExistingYears().Contains(year)) + { + UserInfoHandler.ShowError(year + " already exits."); + return; + } + if (MessageBox.Show("Are you sure you want to add a new column?\n\nNote: you will not be able to undo this action or any action before this.", "Add Year Column", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) return; + AddYearColumn(year); + dgvDataSetExStatAggAmounts.AcceptChanges(); + undoManager.Reset(); + columnsChanged = true; + MessageBox.Show("Please save & close, and reopen the dialogue to see the updated incomelists."); + } + + internal List GetExistingYears() + { + List existingYears = new List(); + foreach (string year in cmbYearToDelete.Items) + existingYears.Add(year); + return existingYears; + } + + private void btnDeleteYear_Click(object sender, EventArgs e) + { + if (cmbYearToDelete.Text == string.Empty) + { + UserInfoHandler.ShowError("Please select a year."); + return; + } + + if (MessageBox.Show("Are you sure you want to delete this column?\n\nNote: you will not be able to undo this action or any action before this.", "Delete Year Column", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) return; + + dgvDataTableExStatAggAmounts.Columns.Remove(_colYear + cmbYearToDelete.Text); + dgvDataTableExStatAggBenTax.Columns.Remove(_colYear + cmbYearToDelete.Text); + dgvDataTableExStatAggLevel.Columns.Remove(_colYear + cmbYearToDelete.Text); + dgvDataTableExStatDistIneq.Columns.Remove(_colYear + cmbYearToDelete.Text); + dgvDataTableExStatDistPov.Columns.Remove(_colYear + cmbYearToDelete.Text); + + cmbYearToDelete.Items.RemoveAt(cmbYearToDelete.SelectedIndex); + + dgvDataSetExStatAggAmounts.AcceptChanges(); + dgvDataSetExStatAggBenTax.AcceptChanges(); + dgvDataTableExStatAggLevel.AcceptChanges(); + dgvDataTableExStatDistIneq.AcceptChanges(); + dgvDataTableExStatDistPov.AcceptChanges(); + dgvExStatAggAmountsData.Refresh(); + dgvExStatAggBenTaxData.Refresh(); + dgvExStatAggLevelData.Refresh(); + dgvExStatDistIneqData.Refresh(); + dgvExStatDistPovData.Refresh(); + undoManager.Reset(); + + //The index of the column for comments may have changed, it needs to be updated + colCommentsIndex = dgvDataTableExStatAggAmounts.Columns.IndexOf(colAmComments.Name); + colSourceIndex = dgvDataTableExStatAggAmounts.Columns.IndexOf(colAmSource.Name); + colDestinationIndex = dgvDataTableExStatAggAmounts.Columns.IndexOf(colAmDestination.Name); + + columnsChanged = true; + MessageBox.Show("Please save & close, and reopen the dialogue to see the updated incomelists."); + } + + + public List GetExternalStatisticsInfo() { + + //IncomeList (Category), Referece (name), Comment, Source, YearValues, TableName + List externalStatisticsTupleList = new List(); + + List existingYears = GetExistingYears(); + + //Aggregates + foreach (DataGridViewRow extStatisticRow in dgvExStatAggAmountsData.Rows) + { + if ((extStatisticRow.Cells[colAmName.Name].Value == null || extStatisticRow.Cells[colAmName.Name].Value.ToString() == string.Empty) + && (extStatisticRow.Cells[colAmIncomeList.Name].Value == null || extStatisticRow.Cells[colAmIncomeList.Name].Value.ToString() == string.Empty)) + continue; //probably an empty row + + string incomeList = extStatisticRow.Cells[colAmIncomeList.Name].Value == null ? string.Empty : extStatisticRow.Cells[colAmIncomeList.Name].Value.ToString(); + string name = extStatisticRow.Cells[colAmName.Name].Value == null ? string.Empty : extStatisticRow.Cells[colAmName.Name].Value.ToString(); + string description = extStatisticRow.Cells[colAmDescription.Name].Value == null ? string.Empty : extStatisticRow.Cells[colAmDescription.Name].Value.ToString(); + string comment = extStatisticRow.Cells[colAmComments.Name].Value == null ? string.Empty : extStatisticRow.Cells[colAmComments.Name].Value.ToString(); + string source = extStatisticRow.Cells[colAmSource.Name].Value == null ? string.Empty : extStatisticRow.Cells[colAmSource.Name].Value.ToString(); + string destination = extStatisticRow.Cells[colAmDestination.Name].Value == null ? string.Empty : extStatisticRow.Cells[colAmDestination.Name].Value.ToString(); + string yearValues = string.Empty; + + DataRow rowBen = dgvDataTableExStatAggBenTax.Rows.Find(extStatisticRow.Index); + DataRow rowLevel = dgvDataTableExStatAggLevel.Rows.Find(extStatisticRow.Index); + + foreach (string year in existingYears) + { + string amounts = extStatisticRow.Cells[_colYear + year].Value == null ? string.Empty : extStatisticRow.Cells[_colYear + year].Value.ToString(); + string beneficiaries = rowBen.Field(_colYear + year) == null ? string.Empty : rowBen.Field(_colYear + year); + string level = rowLevel.Field(_colYear + year) == null ? string.Empty : rowLevel.Field(_colYear + year); + + if (!String.IsNullOrEmpty(yearValues)) yearValues += InDepthDefinitions.SEPARATOR; + + yearValues += year + InDepthDefinitions.SEPARATOR_INNER + amounts + InDepthDefinitions.SEPARATOR_INNER + beneficiaries + InDepthDefinitions.SEPARATOR_INNER + level; + } + + ExternalStatsTuple singleElement = new ExternalStatsTuple(incomeList, name, description, yearValues, comment, source, AGGREGATES, destination); + externalStatisticsTupleList.Add(singleElement); + } + + //Distributional - Inequality + foreach (DataGridViewRow extStatisticRow in dgvExStatDistIneqData.Rows) + { + if (extStatisticRow.Cells[colIneqName.Name].Value == null || extStatisticRow.Cells[colIneqName.Name].Value.ToString() == string.Empty) + continue; //probably an empty row + + + string category = String.Empty; + string name = extStatisticRow.Cells[colIneqName.Name].Value == null ? string.Empty : extStatisticRow.Cells[colIneqName.Name].Value.ToString(); + string description = extStatisticRow.Cells[colIneqDesc.Name].Value == null ? string.Empty : extStatisticRow.Cells[colIneqDesc.Name].Value.ToString(); + string comment = extStatisticRow.Cells[colIneqComments.Name].Value == null ? string.Empty : extStatisticRow.Cells[colIneqComments.Name].Value.ToString(); + string source = extStatisticRow.Cells[colIneqSource.Name].Value == null ? string.Empty : extStatisticRow.Cells[colIneqSource.Name].Value.ToString(); + string yearValues = string.Empty; + + foreach (string year in existingYears) + { + string value = extStatisticRow.Cells[_colYear + year].Value == null ? string.Empty : extStatisticRow.Cells[_colYear + year].Value.ToString(); + + if (!String.IsNullOrEmpty(yearValues)) yearValues += InDepthDefinitions.SEPARATOR; + + yearValues += year + InDepthDefinitions.SEPARATOR_INNER + value; + } + + ExternalStatsTuple singleElement = new ExternalStatsTuple(category, name, description, yearValues, comment, source, DISTRIBUTIONAL_INEQUALITY, InDepthDefinitions.DESTINATION_INEQUALITY); + externalStatisticsTupleList.Add(singleElement); + + } + + //Distributional - Poverty + foreach (DataGridViewRow extStatisticRow in dgvExStatDistPovData.Rows) + { + if (extStatisticRow.Cells[colPovName.Name].Value == null || extStatisticRow.Cells[colPovName.Name].Value.ToString() == string.Empty) + continue; //probably an empty row + + + string category = string.Empty; + string name = extStatisticRow.Cells[colPovName.Name].Value == null ? string.Empty : extStatisticRow.Cells[colPovName.Name].Value.ToString(); + string description = extStatisticRow.Cells[colPovDesc.Name].Value == null ? string.Empty : extStatisticRow.Cells[colPovDesc.Name].Value.ToString(); + string comment = extStatisticRow.Cells[colPovComments.Name].Value == null ? string.Empty : extStatisticRow.Cells[colPovComments.Name].Value.ToString(); + string source = extStatisticRow.Cells[colPovSource.Name].Value == null ? string.Empty : extStatisticRow.Cells[colPovSource.Name].Value.ToString(); + string yearValues = string.Empty; + + foreach (string year in existingYears) + { + string value = extStatisticRow.Cells[_colYear + year].Value == null ? string.Empty : extStatisticRow.Cells[_colYear + year].Value.ToString(); + + if (!String.IsNullOrEmpty(yearValues)) yearValues += InDepthDefinitions.SEPARATOR; + + yearValues += year + InDepthDefinitions.SEPARATOR_INNER + value; + } + + ExternalStatsTuple singleElement = new ExternalStatsTuple(category, name, description, yearValues, comment, source, DISTRIBUTIONAL_INEQUALITY, InDepthDefinitions.DESTINATION_POVERTY); + externalStatisticsTupleList.Add(singleElement); + } + + return externalStatisticsTupleList; + } + + // This function synchronises the vertical scroll position in the three first tables, by aligning the first visible row) + private void dgv_Scroll(object sender, ScrollEventArgs e) + { + DataGridView dgv = sender as DataGridView; + if (scrolling || dgv == null) return; + scrolling = true; + dgvExStatAggAmountsData.FirstDisplayedScrollingRowIndex = dgv.FirstDisplayedScrollingRowIndex; + dgvExStatAggBenTaxData.FirstDisplayedScrollingRowIndex = dgv.FirstDisplayedScrollingRowIndex; + dgvExStatAggLevelData.FirstDisplayedScrollingRowIndex = dgv.FirstDisplayedScrollingRowIndex; + scrolling = false; + } + + private void tabExternalStatistics_Selected(object sender, TabControlEventArgs e) + { + // microsoft bug: if the DataGridView was not yet rendered and you changed the dataset (because you changed the Aggregate table), you need to hide the ID column again... + dgvExStatAggAmountsData.Columns[0].Visible = false; + dgvExStatAggBenTaxData.Columns[0].Visible = false; + dgvExStatAggLevelData.Columns[0].Visible = false; + } + + private void toolStripMenuItemSetAllToIndividual_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsm = sender as ToolStripMenuItem; + if (tsm == null) return; + ContextMenuStrip cms = tsm.GetCurrentParent() as ContextMenuStrip; + if (cms == null) return; + DataGridView dgv = cms.SourceControl as DataGridView; + if (dgv == null) return; + if (dgv == dgvExStatAggLevelData) + setLevelRows(dgv, true); + } + + private void toolStripMenuItemSetAllToHousehold_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsm = sender as ToolStripMenuItem; + if (tsm == null) return; + ContextMenuStrip cms = tsm.GetCurrentParent() as ContextMenuStrip; + if (cms == null) return; + DataGridView dgv = cms.SourceControl as DataGridView; + if (dgv == null) return; + if (dgv == dgvExStatAggLevelData) + setLevelRows(dgv, false); + } + + private void setLevelRows(DataGridView dgv, bool ind) + { + if ((dgv.DataSource as DataSet) == null || (dgv.DataSource as DataSet).Tables.Count == 0) return; + DataTable dt = (dgv.DataSource as DataSet).Tables[0]; + + keepUndoData = false; + foreach (DataGridViewRow vrow in dgv.SelectedRows) + { + if (vrow.IsNewRow) continue; // ignore delete for the empty new row + + for (int i = 4; i < vrow.Cells.Count - 2; i++) + vrow.Cells[i].Value = ind ? "Individual" : "Household"; + } + keepUndoData = true; + storeUndoAction(dgv); + } + + private void contextMenuStripRows_Opening(object sender, CancelEventArgs e) + { + ContextMenuStrip cms = sender as ContextMenuStrip; + if (cms == null) { e.Cancel = true; return; } + DataGridView dgv = cms.SourceControl as DataGridView; + if (dgv == null) { e.Cancel = true; return; } + if (dgv != dgvExStatAggAmountsData && dgv != dgvExStatAggLevelData) { e.Cancel = true; return; } + toolStripMenuItemDelete.Visible = false; // dgv == dgvExStatAggAmountsData; Do not show at all the Delete Row context menu for now, as it seems to be buggy... + toolStripMenuItemSetAllToHousehold.Visible = dgv == dgvExStatAggLevelData; + toolStripMenuItemSetAllToIndividual.Visible = dgv == dgvExStatAggLevelData; + } + + private void DgvExStatAggAmountsData_CellValueChanged(object sender, DataGridViewCellEventArgs e) + { + DataGridView dgv = sender as DataGridView; + if (dgv == null) return; + if (dgv == dgvExStatAggAmountsData) copyFixedColumns(e.RowIndex, e.ColumnIndex); + storeUndoAction(dgv); + } + + private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e) + { + DataGridView dgv = sender as DataGridView; + if (dgv == null) return; + if (dgv == dgvExStatAggAmountsData) copyFixedColumns(e.RowIndex, e.ColumnIndex); + (dgv.CurrentCell.OwningRow.DataBoundItem as DataRowView).Row.EndEdit(); // make sure the edit is committed to the DataSet + storeUndoAction(dgv); + } + + private void ExternalStatisticsForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (DialogResult == System.Windows.Forms.DialogResult.Cancel) + if (dgvDataSetExStatAggAmounts.HasChanges() || dgvDataSetExStatAggBenTax.HasChanges() || dgvDataSetExStatAggLevel.HasChanges() || dgvDataSetExStatDistIneq.HasChanges() || dgvDataSetExStatDistPov.HasChanges() || undoManager.HasChanges() || columnsChanged) + if (UserInfoHandler.GetInfo("Are you sure you want to close without saving?", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No) + e.Cancel = true; + } + } + + +} diff --git a/EM_Plugins/InDepthAnalysis/Properties/Resources.resx b/EM_UI/ExternalStatistics/ExternalStatisticsForm.resx similarity index 58% rename from EM_Plugins/InDepthAnalysis/Properties/Resources.resx rename to EM_UI/ExternalStatistics/ExternalStatisticsForm.resx index 58ff715..15a68b3 100644 --- a/EM_Plugins/InDepthAnalysis/Properties/Resources.resx +++ b/EM_UI/ExternalStatistics/ExternalStatisticsForm.resx @@ -117,14 +117,68 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\existing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + - Deciles 1/10: share of equivalised disposable income of each decile group +- Median: median equivalised disposable income +- Mean: mean equivalised disposable income +- Gini: Gini coefficient of equivalised disposable income +- S80/S20: quintile share ratio of equivalised disposable income - - ..\Resources\InDepthAnalysis.xml;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + True + + + True + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAANCAYAAACgu+4kAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAn + XwAAJ18BHYa6agAAAAd0SU1FB+QFFAskKnCcex0AAADaSURBVDhPlZG9DcIwEIUfokGIhoYFqOjoES2b + sAD04BMIBmAGGAAYgBVoKUOPRAkSP2f7khx2JJInfXZ07z1HcVBZhCEMHsxUJhVE6HPxk0EYi1NChO5P + 2fMEL14GTXmKtUBHlTRzHzBYugFh5AdKK7RUQbPxAcIkMAbeYBnUGXth2rfsJMGy3xEGCD3x7pFnsHde + Jvs74tCLSYKZ5SSdQIbfGYdDzi5LblVay24vpbj4Zi4uE5VT5b9yKyVdvjL2Mv8oP+TApOUb02BKKj/k + yCSYoc17TaYFAr4upIn9NhADDQAAAABJRU5ErkJggg== + - - ..\Resources\missing.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAADk + JAAA5CQB3rRKWgAAAAd0SU1FB+QFFAsUE/DfxeYAAADzSURBVDhPjZJtDsFAEIZX3Q2XINwGaUIQP0j8 + cAYk7kbqedudWrvbxiRPOp3v3R1XuUb4jmADQ29KBF8Ba8X6/0ZQpvCCCp4whFakg5JvoJg3zMypzpZs + XKGoAxDpcPY+Q0VGci4DY4hNouS7t8WU8WgxJ9hHNuMBzZQoA1BwLjDHBdojqoAV6ZokpO4MqXjHDnKJ + 4gjfzrHICQcfnEPHTPcEoyX/c4RkTyw5fuc+tCfNJCh9nXXmrjupJ1EB7XYuwG67r8FWBSagtQwdP++M + ntsT5YwtYOENciTvLB3CPVHsvHX6ryYpofOd5YMV1J0r59wHS9VcAZovRwsAAAAASUVORK5CYII= + + + 17, 17 + \ No newline at end of file diff --git a/EM_UI/Icons/FunctionInconsistent.png b/EM_UI/Icons/FunctionInconsistent.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d504e315eb747d99be2dd99b00093bc56a3b80 GIT binary patch literal 909 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 literal 0 HcmV?d00001 diff --git a/EM_UI/Icons/intelli-image-3.png b/EM_UI/Icons/intelli-image-3.png new file mode 100644 index 0000000000000000000000000000000000000000..28a95c0a3cb70f1d90613cc63b7c75e228cf057a GIT binary patch literal 507 zcmV00009a7bBm000xO z000xO0b}Nl!vFvP8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10f|Pk`^hx-n+& zNOS6d$zhA+*t+fxs zFno4oPSf-YP=mLV6wb=^Q!Jz&;sHrw59_tUcRk9dQ@;Fzl31yI#s6#(FP xo_8BK4ZIG5;MFPsz!8xXz=yId@B9w{@EdU^hcv&~QGoye002ovPDHLkV1gsq;*J0S literal 0 HcmV?d00001 diff --git a/EM_UI/Icons/intelli-image-4.png b/EM_UI/Icons/intelli-image-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e36c7f359ddc41e80365c2fe411c04594516f235 GIT binary patch literal 590 zcmV-U0w)Tep!*xkYOQtF+J_Sz z^e2l(rnEH++WXs;-FpZ4#GOD_=y>HChO`pU;I}#erU?kl9yH#Xw7m|eF^CyhmF{-*^0G*g@R+QtK)QCuZ z`jm6GFUNQW&IHQi*=U46TDp%Gir{%fHy3c_3r`pO<=2_7z6jtc%E#?GN6B8gzgJ*k`Wce?&fx4C0jkyN znyTIb5~n?4*U9Y1u7gV-)et-+Feu`QpUf2Jv-(VN9#8xccx>SPb#~*>11L_FkA)|m c|NYK?0B7y}r|1!pX8-^I07*qoM6N<$f?0SJ!vFvP literal 0 HcmV?d00001 diff --git a/EM_UI/IndirectTaxes/IndirectTaxesAction.cs b/EM_UI/IndirectTaxes/IndirectTaxesAction.cs index 1050612..226b159 100644 --- a/EM_UI/IndirectTaxes/IndirectTaxesAction.cs +++ b/EM_UI/IndirectTaxes/IndirectTaxesAction.cs @@ -1,19 +1,22 @@ using EM_UI.Actions; +using EM_UI.DataSets; namespace EM_UI.IndirectTaxes { internal class IndirectTaxesAction : BaseAction { - IndirectTaxesForm upratingIndicesForm = null; + IndirectTaxesForm _indirectTaxesForm = null; + CountryConfigFacade _countryConfigFacade = null; - internal IndirectTaxesAction(IndirectTaxesForm _upratingIndicesForm) + internal IndirectTaxesAction(IndirectTaxesForm indirectTaxesForm) { - upratingIndicesForm = _upratingIndicesForm; + _indirectTaxesForm = indirectTaxesForm; + _countryConfigFacade = _indirectTaxesForm._countryConfigFacade; } internal override void PerformAction() { - upratingIndicesForm.SaveTable(); + _indirectTaxesForm.SaveTable(); } } } diff --git a/EM_UI/IndirectTaxes/IndirectTaxesForm.cs b/EM_UI/IndirectTaxes/IndirectTaxesForm.cs index a9e4e62..1f8572e 100644 --- a/EM_UI/IndirectTaxes/IndirectTaxesForm.cs +++ b/EM_UI/IndirectTaxes/IndirectTaxesForm.cs @@ -16,9 +16,10 @@ namespace EM_UI.IndirectTaxes internal partial class IndirectTaxesForm : Form { private EM_UI_MainForm mainForm = null; + internal CountryConfigFacade _countryConfigFacade = null; private const string colYear = "colYear"; internal const char separator = '°'; - internal const char separatorYear = '|'; + internal const char separatorInner = '|'; private DataSet dataSet = new DataSet(); private DataTable dataTable = new DataTable("IttDataTable"); private ADOUndoManager undoManager = new ADOUndoManager(); @@ -32,6 +33,7 @@ internal IndirectTaxesForm(EM_UI_MainForm _mainForm) try { mainForm = _mainForm; + _countryConfigFacade = EM_UI.CountryAdministration.CountryAdministrator.GetCountryConfigFacade(mainForm.GetCountryShortName()); dataSet.Tables.Add(dataTable); table.DataSource = dataSet; @@ -53,7 +55,7 @@ internal IndirectTaxesForm(EM_UI_MainForm _mainForm) void LoadTableContent() { - CountryConfig countryConfig = CountryAdministrator.GetCountryConfigFacade(mainForm.GetCountryShortName()).GetCountryConfig(); + CountryConfig countryConfig = _countryConfigFacade.GetCountryConfig(); keepUndoData = false; dataTable.PrimaryKey = new DataColumn[] { dataTable.Columns.Add("ID", typeof(Int16)) }; @@ -69,7 +71,7 @@ void LoadTableContent() foreach (CountryConfig.IndirectTaxRow itr in countryConfig.IndirectTax) { DataRow row = dataTable.Rows.Add(); - row.SetField(colName.Name, itr.Name); + row.SetField(colName.Name, itr.Reference); row.SetField(colComment.Name, itr.Comment); foreach (var yv in DecomposeYearValues(itr.YearValues)) row.SetField(colYear + yv.Key.ToString(), yv.Value); } @@ -84,8 +86,8 @@ private Dictionary DecomposeYearValues(string yearValuesString) Dictionary yearValues = new Dictionary(); foreach (string yv in yearValuesString.Split(separator)) { - if (string.IsNullOrEmpty(yv) || yv.Split(separatorYear).Count() != 2) continue; - yearValues.Add(yv.Split(separatorYear)[0], yv.Split(separatorYear)[1]. + if (string.IsNullOrEmpty(yv) || yv.Split(separatorInner).Count() != 2) continue; + yearValues.Add(yv.Split(separatorInner)[0], yv.Split(separatorInner)[1]. Replace(NumberFormatInfo.CurrentInfo.NumberDecimalSeparator, EM_Helpers.uiDecimalSeparator)); // make sure you always show "." as decimal separator } return yearValues; @@ -267,7 +269,7 @@ void GetFromClipboard() currentCellColumnIndex + indexColumn == table.Columns[colComment.Name].DisplayIndex) row[GetYearColumnIndexByDisplayIndex(currentCellColumnIndex + indexColumn)] = clipboardCells[indexColumn]; else // if one of the system columns - row[GetYearColumnIndexByDisplayIndex(currentCellColumnIndex + indexColumn)] = clipboardCells[indexColumn].Replace(',', '.'); // fix decimal separator + row[GetYearColumnIndexByDisplayIndex(currentCellColumnIndex + indexColumn)] = EM_Helpers.SetCleanInvariantNumberFormat(clipboardCells[indexColumn]); // fix decimal separator } else break; @@ -493,7 +495,7 @@ internal void SaveTable() foreach (DataGridViewColumn yearColumn in GetYearColumnsAsDisplayed()) { if (row.Cells[yearColumn.Index].Value != null) - yearValues += yearColumn.HeaderText + separatorYear + row.Cells[yearColumn.Index].Value.ToString(); + yearValues += yearColumn.HeaderText + separatorInner + row.Cells[yearColumn.Index].Value.ToString(); yearValues += separator; } indTaxes.Add(new Tuple(name, comment, yearValues.TrimEnd(new char[] { separator }))); @@ -502,13 +504,13 @@ internal void SaveTable() CountryConfig countryConfig = CountryAdministrator.GetCountryConfigFacade(mainForm.GetCountryShortName()).GetCountryConfig(); foreach (var indTax in indTaxes) { - List its = (from it in countryConfig.IndirectTax where it.Name.ToLower() == indTax.Item1.ToLower() select it).ToList(); + List its = (from it in countryConfig.IndirectTax where it.Reference.ToLower() == indTax.Item1.ToLower() select it).ToList(); if (its.Count == 0) countryConfig.IndirectTax.AddIndirectTaxRow(Guid.NewGuid().ToString(), indTax.Item1, indTax.Item2, indTax.Item3); - else { its[0].Name = indTax.Item1; its[0].Comment = indTax.Item2; its[0].YearValues = indTax.Item3; } + else { its[0].Reference = indTax.Item1; its[0].Comment = indTax.Item2; its[0].YearValues = indTax.Item3; } } List itNames = (from i in indTaxes select i.Item1.ToLower()).ToList(); for (int i = countryConfig.IndirectTax.Count - 1; i >= 0; --i) - if (!itNames.Contains(countryConfig.IndirectTax[i].Name.ToLower())) countryConfig.IndirectTax.ElementAt(i).Delete(); + if (!itNames.Contains(countryConfig.IndirectTax[i].Reference.ToLower())) countryConfig.IndirectTax.ElementAt(i).Delete(); } } } diff --git a/EM_UI/PlugInService/SessionInfo.cs b/EM_UI/PlugInService/SessionInfo.cs index e7830cf..2c48c3a 100644 --- a/EM_UI/PlugInService/SessionInfo.cs +++ b/EM_UI/PlugInService/SessionInfo.cs @@ -9,7 +9,7 @@ namespace EM_UI.PlugInService { // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // DO NOT DELETE THESE FUNCTIONS, THOUGH THEY SEEM TO BE NOT USED - // SEE EM_Common.UISessionInfo FOR UNDERSTANDING THEIR APPLICATION + // SEE EM_Common_Win.UISessionInfo FOR UNDERSTANDING THEIR APPLICATION // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! public class SessionInfo diff --git a/EM_UI/Properties/Resources.Designer.cs b/EM_UI/Properties/Resources.Designer.cs index 09b1703..57d1f2a 100644 --- a/EM_UI/Properties/Resources.Designer.cs +++ b/EM_UI/Properties/Resources.Designer.cs @@ -200,6 +200,16 @@ internal static System.Drawing.Bitmap delete32 { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap EUROMODStatistics { + get { + object obj = ResourceManager.GetObject("EUROMODStatistics", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -310,6 +320,16 @@ internal static System.Drawing.Bitmap import { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap InDepthAnalysis { + get { + object obj = ResourceManager.GetObject("InDepthAnalysis", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -630,6 +650,16 @@ internal static System.Drawing.Bitmap SelectNoCountry { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatisticsPresenter { + get { + object obj = ResourceManager.GetObject("StatisticsPresenter", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/EM_UI/Properties/Resources.resx b/EM_UI/Properties/Resources.resx index df5c82c..3135ef9 100644 --- a/EM_UI/Properties/Resources.resx +++ b/EM_UI/Properties/Resources.resx @@ -118,20 +118,14 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Icons\checkbox-checked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icons\redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\Merge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\vc-unlink.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\filter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icons\apply16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\delete32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -145,23 +139,23 @@ ..\Icons\green_right_arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\green_right_arrow_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\merge_reject.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Icons\licence.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\RVallgood.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\merge_reject.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\redo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\vc-connect.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\delete32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icons\open-project-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\brand_background_EUROMOD.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\brand_icon_EUROMOD.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -169,15 +163,24 @@ ..\Icons\Switch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\EUROMODStatistics.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\SelectNoCountry.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\InDepthAnalysis.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\RVundef.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\globe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\find.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\redball.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -193,12 +196,12 @@ ..\Icons\run.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\save-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\merge_accept.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ReleaseInfo.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - ..\Icons\NoFilter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -208,21 +211,18 @@ ..\Icons\ChangeTypeRemoved.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\open-project-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\merge_accept_order.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\Folder.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Icons\Help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\SelectAllSystems.PNG;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\add-20.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Icons\ReleaseInfo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -232,15 +232,9 @@ ..\Icons\Turn_off.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\Folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Icons\undo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\filter-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Icons\log-out-vc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -250,44 +244,56 @@ ..\Icons\TipNotAllCountriesVisible.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\Folder.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\ChangeTypeChanged.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\NoFlag.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\filter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\merge_reject_order.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\add-20.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\AllFilters.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\Save16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\checkbox-checked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\warning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\delete16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icons\remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ReleaseInfo.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Icons\Merge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\NoFlag.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\log-in-vc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Icons\filter-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\remove-bundle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\import.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\find.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\Folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Icons\delete16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\SelectAllCountries.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -298,22 +304,25 @@ ..\Icons\Compare.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\apply16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\merge_mixed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Icons\save-32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\Save16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Icons\checkbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Icons\green_right_arrow_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Icons\log-in-vc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\brand_background_EUROMOD.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Icons\licence.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\StatisticsPresenter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/EM_UI/Properties/licenses.licx b/EM_UI/Properties/licenses.licx index e69de29..8b13789 100644 --- a/EM_UI/Properties/licenses.licx +++ b/EM_UI/Properties/licenses.licx @@ -0,0 +1 @@ + diff --git a/EM_UI/Resources/EUROMODStatistics.ico b/EM_UI/Resources/EUROMODStatistics.ico new file mode 100644 index 0000000000000000000000000000000000000000..8ffdabe2c16e594fa6473e9c14b13531d2e4b47a GIT binary patch literal 24038 zcmeHPYiJx*6uvQ)RT1N}K2W1S#Oe>QRO@h9SbtQA!v|8 z$h6* z;d>|RH(9?`)Ed6{sCXyq5Lt&bvkuw6i#Ef|-2y%M*22nD~FxCP@@HA{%PylYO&smlh!QU1`MqOSp9nvUOo&hUAsq|x8fw7YTWFcc8O(ZciEgeh&T}_xi|b`1&pAuh3?AUxNFVwBW_IIAcr5`A zk>U;U`iE`a+RklG!~L6&*kuPsST0Jld$LP_nTR-wg5S@Uo?V;<%;MUB`e5^^inR(o zs7)+0yDF~T&E|tIKUMfsBd0fD+_a;s4>ucwIQoG_-MXs*cvZ}4$IxD)wJDDMejbuj z&OJ||CV0g%)yGgHT<0H`^ck2;3c%%%tt%fw&gW>ca;0OaePgS&Gm`k@^mJYi{kwzx zQMOYZl|;Um7d6^@!FmGrOQkvdAI9%R+hFV2UcW80Ryv0AK!30D491K^ls&pl*Ut6Y z7nVkzz6rXfYU(r9!#lcHTpU(rt#Jdroi{+&bWMHboQM7Trl|Ek;_z|ECaf#wX0>P3 zDHBwG*Rt9FZWqQwUbsAMsyqGsai1Mid9s=xydODYc+Z-}r^nGjaS1tpb6NH8+HaV* zFW9E`AnjN3d3Kst??89w_`IY}EMhM+35?!Gdmrul02@QaGUvk@ew5}xQlB{9bbf~1bT`f|UWe>A=`3w$ zmvS|KpY)ELcMWX+j@zGt`y|%eN1T-_Gf91GG(Y7>#P6pmz|0$?N9a7GFSqQ>M*E*c zKFtr{Msx*fu zKRYPTh{Pa?EXU}4Ii=VI#s8FJW^YO2uP9!c1A=gyL2ZJyRtr2s6r_W&{KZ<;ah@pu zlgPoI<#0^D4xvVQm(HO3yR-|*hSIvDJ^`8AFt^5v=RLZ%4)V94#o7b$k1ivtw$Xp;o$Ys7JXXs{Vc>dn2&yt0p@_|GucY8!?{NfB5rdUAuMl3lX&{ zuwM#Y{dM(KU+@2F1P*azmVfj4q=qjai>?Q(9<>wtMr-H{S{tbEXdE9K#Y6j0?3M4N z+yvVWQbQbWrTiu8d@jiLL7Y27SCrgW@qa4>$(%2JYBmavh&kqb6RXE)_RB56 zC;CCR@-c9sg=lvg6fQ5l&ePxSPN{rMn_Flr(Q6@eJX54IfY8ksX;_nIOYsPquyVX8 z7j$8rTOe8m4bf9Xx0UGQM6-@!KYDPTUB;H^1s)oYWLBP)ex@nXEhV`{I^z~)5k21K a&Ja7%g?5f1J>gxs-%l6Hx~P8&HvA9m{fqqo literal 0 HcmV?d00001 diff --git a/EM_UI/Resources/InDepthAnalysis.ico b/EM_UI/Resources/InDepthAnalysis.ico new file mode 100644 index 0000000000000000000000000000000000000000..17fc1d72445e52590bef4d289aff315453a84a25 GIT binary patch literal 67646 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 K+T?LkAO8bv9soiB literal 0 HcmV?d00001 diff --git a/EM_UI/Resources/InDepthAnalysis.png b/EM_UI/Resources/InDepthAnalysis.png new file mode 100644 index 0000000000000000000000000000000000000000..bd173f1df77f8cead4fb162856939ca14d9864ae GIT binary patch literal 3762 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 d%6&Pqi|4FF-kudRx>T2dmYN>CAmR|1+jH5l z=dR%{|FsWPg&xiQ?0@8GJIG2f@GDt*zw!I;<>#)?yD;zGxd%~99109f91RRi3JnY# z6TEr*BmR^qT8m9{E`oN+L0#_JA{W+&dI@C3TT;u8L=d#Wz Gp$P!lw@keN literal 0 HcmV?d00001 diff --git a/EM_UI/Run/RunManager.cs b/EM_UI/Run/RunManager.cs index 06a3916..294ce15 100644 --- a/EM_UI/Run/RunManager.cs +++ b/EM_UI/Run/RunManager.cs @@ -679,8 +679,8 @@ bool GenerateEMConfigs(string outputPath, string emVersion, Dictionary allNodes = _mainForm.treeList.GetNodeList(); + List inconsistencies = new List(); + inconsistencies = new List(); + foreach (TreeListNode node in allNodes) + { + PolicyTreeListTag polTag = node.Tag as PolicyTreeListTag; + FunctionTreeListTag funTag = node.Tag as FunctionTreeListTag; + ParameterTreeListTag parTag = node.Tag as ParameterTreeListTag; + + string firstIsPrivate = String.Empty; + + if (polTag != null) + { + foreach (CountryConfig.PolicyRow policyRow in polTag.GetPolicyRows()) + { + string currentIsPrivate = policyRow.Private; + + if (String.IsNullOrEmpty(currentIsPrivate)) currentIsPrivate = DefPar.Value.NO; + if (String.IsNullOrEmpty(firstIsPrivate)) firstIsPrivate = currentIsPrivate; + else + { + if (firstIsPrivate != currentIsPrivate && !inconsistencies.Contains(node)) inconsistencies.Add(node); + } + } + } + + else if (funTag != null) + { + foreach (CountryConfig.FunctionRow funRow in funTag.GetFunctionRows()) + { + string currentIsPrivate = funRow.Private; + + if (String.IsNullOrEmpty(currentIsPrivate)) currentIsPrivate = DefPar.Value.NO; + if (String.IsNullOrEmpty(firstIsPrivate)) firstIsPrivate = currentIsPrivate; + else + { + if (firstIsPrivate != currentIsPrivate && !inconsistencies.Contains(node)) inconsistencies.Add(node); + } + } + + } + else if (parTag != null) + { + foreach (CountryConfig.ParameterRow parRow in parTag.GetParameterRows()) + { + string currentIsPrivate = parRow.Private; + + if (String.IsNullOrEmpty(currentIsPrivate)) currentIsPrivate = DefPar.Value.NO; + if (String.IsNullOrEmpty(firstIsPrivate)) firstIsPrivate = currentIsPrivate; + else + { + if (firstIsPrivate != currentIsPrivate) + { + if (!inconsistencies.Contains(node) && !inconsistencies.Contains(node)) inconsistencies.Add(node); + } + } + } + } + } + + if(inconsistencies != null && inconsistencies.Any()) + { + foreach (TreeListNode node in inconsistencies) + { + PolicyTreeListTag polTag = node.Tag as PolicyTreeListTag; + FunctionTreeListTag funTag = node.Tag as FunctionTreeListTag; + ParameterTreeListTag parTag = node.Tag as ParameterTreeListTag; + + + if (parTag != null) + { + node.StateImageIndex = DefGeneral.IMAGE_IND_INCONS; + + //Function and Policy also needs to be signaled as inconsistent + if (node.ParentNode != null) node.ParentNode.StateImageIndex = node.ParentNode.StateImageIndex == DefGeneral.IMAGE_IND_FUN ? DefGeneral.IMAGE_IND_FUN_INCONS : DefGeneral.IMAGE_IND_PRIV_FUN_INCONS; + if (node.ParentNode.ParentNode != null) node.ParentNode.ParentNode.StateImageIndex = node.ParentNode.ParentNode.StateImageIndex == DefGeneral.IMAGE_IND_POL ? DefGeneral.IMAGE_IND_POL_INCONS : DefGeneral.IMAGE_IND_PRIV_POL_INCONS; + + } + else if (funTag != null) + { + node.StateImageIndex = DefGeneral.IMAGE_IND_INCONS; + + //Policy also needs to be signaled as inconsistent + if (node.ParentNode != null) node.ParentNode.StateImageIndex = node.ParentNode.StateImageIndex == DefGeneral.IMAGE_IND_POL ? DefGeneral.IMAGE_IND_POL_INCONS : DefGeneral.IMAGE_IND_PRIV_POL_INCONS; + } + else if (polTag != null) + { + node.StateImageIndex = DefGeneral.IMAGE_IND_INCONS; + + } + + } + } + + } } + } diff --git a/EM_UI/TreeListTags/ParameterTreeListTag.cs b/EM_UI/TreeListTags/ParameterTreeListTag.cs index 1d2a571..f41f441 100644 --- a/EM_UI/TreeListTags/ParameterTreeListTag.cs +++ b/EM_UI/TreeListTags/ParameterTreeListTag.cs @@ -213,6 +213,8 @@ internal override List GetTypeSpecificIntelliItems(SystemTreeListTag system specficIntelliItems.Add(FormulaEditorManager._intelliContainsDefConst); specficIntelliItems.Add(FormulaEditorManager._intelliContainsDefIL); specficIntelliItems.Add(FormulaEditorManager._intelliContainsUpRateFactor); + specficIntelliItems.Add(FormulaEditorManager._intelliContainsIndTaxFactor); + specficIntelliItems.Add(FormulaEditorManager._intelliContainsExternalStatistic); } if (valType == DefinitionAdmin.ParTypeToString(DefPar.PAR_TYPE.VAR).ToLower()) { diff --git a/EM_UI/UpratingIndices/UpratingIndicesForm.Designer.cs b/EM_UI/UpratingIndices/UpratingIndicesForm.Designer.cs index 56e8312..41c1b99 100644 --- a/EM_UI/UpratingIndices/UpratingIndicesForm.Designer.cs +++ b/EM_UI/UpratingIndices/UpratingIndicesForm.Designer.cs @@ -29,7 +29,7 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); this.helpProvider = new System.Windows.Forms.HelpProvider(); this.btnCancel = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button(); @@ -55,6 +55,7 @@ private void InitializeComponent() this.contextMenuStripRows = new System.Windows.Forms.ContextMenuStrip(this.components); this.deleteRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.btnCheckUsage = new System.Windows.Forms.Button(); + this.addRowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tabIndices.SuspendLayout(); this.tabPageIndices.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.updwnYearToAdd)).BeginInit(); @@ -105,7 +106,7 @@ private void InitializeComponent() this.tabIndices.Controls.Add(this.tabPageIndices); this.tabIndices.Controls.Add(this.tabPageFactors); this.tabIndices.Location = new System.Drawing.Point(9, 10); - this.tabIndices.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabIndices.Margin = new System.Windows.Forms.Padding(2); this.tabIndices.Name = "tabIndices"; this.tabIndices.SelectedIndex = 0; this.tabIndices.Size = new System.Drawing.Size(550, 366); @@ -120,9 +121,9 @@ private void InitializeComponent() this.tabPageIndices.Controls.Add(this.btnAddYear); this.tabPageIndices.Controls.Add(this.dgvIndices); this.tabPageIndices.Location = new System.Drawing.Point(4, 22); - this.tabPageIndices.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageIndices.Margin = new System.Windows.Forms.Padding(2); this.tabPageIndices.Name = "tabPageIndices"; - this.tabPageIndices.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageIndices.Padding = new System.Windows.Forms.Padding(2); this.tabPageIndices.Size = new System.Drawing.Size(542, 340); this.tabPageIndices.TabIndex = 0; this.tabPageIndices.Text = "Raw Indices"; @@ -132,7 +133,7 @@ private void InitializeComponent() // this.updwnYearToAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.updwnYearToAdd.Location = new System.Drawing.Point(373, 297); - this.updwnYearToAdd.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.updwnYearToAdd.Margin = new System.Windows.Forms.Padding(2); this.updwnYearToAdd.Maximum = new decimal(new int[] { 2500, 0, @@ -159,7 +160,7 @@ private void InitializeComponent() this.cmbYearToDelete.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbYearToDelete.FormattingEnabled = true; this.cmbYearToDelete.Location = new System.Drawing.Point(458, 297); - this.cmbYearToDelete.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.cmbYearToDelete.Margin = new System.Windows.Forms.Padding(2); this.cmbYearToDelete.Name = "cmbYearToDelete"; this.cmbYearToDelete.Size = new System.Drawing.Size(82, 21); this.cmbYearToDelete.TabIndex = 9; @@ -168,7 +169,7 @@ private void InitializeComponent() // this.btnDeleteYear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnDeleteYear.Location = new System.Drawing.Point(458, 318); - this.btnDeleteYear.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.btnDeleteYear.Margin = new System.Windows.Forms.Padding(2); this.btnDeleteYear.Name = "btnDeleteYear"; this.btnDeleteYear.Size = new System.Drawing.Size(81, 20); this.btnDeleteYear.TabIndex = 8; @@ -180,7 +181,7 @@ private void InitializeComponent() // this.btnAddYear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnAddYear.Location = new System.Drawing.Point(372, 318); - this.btnAddYear.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.btnAddYear.Margin = new System.Windows.Forms.Padding(2); this.btnAddYear.Name = "btnAddYear"; this.btnAddYear.Size = new System.Drawing.Size(81, 20); this.btnAddYear.TabIndex = 5; @@ -204,17 +205,18 @@ private void InitializeComponent() this.colIndexDescription, this.colReference, this.colComment}); - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dgvIndices.DefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvIndices.DefaultCellStyle = dataGridViewCellStyle2; this.dgvIndices.Location = new System.Drawing.Point(7, 0); - this.dgvIndices.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.dgvIndices.Margin = new System.Windows.Forms.Padding(2); this.dgvIndices.Name = "dgvIndices"; + this.dgvIndices.RowHeadersWidth = 62; this.dgvIndices.RowTemplate.Height = 24; this.dgvIndices.ShowCellErrors = false; this.dgvIndices.ShowEditingIcon = false; @@ -229,28 +231,33 @@ private void InitializeComponent() // colID // this.colID.DataPropertyName = "ID"; + this.colID.Frozen = true; + this.colID.MinimumWidth = 8; this.colID.Name = "colID"; this.colID.Visible = false; - this.colID.Frozen = true; + this.colID.Width = 150; // // colIndexDescription // this.colIndexDescription.DataPropertyName = "colIndexDescription"; this.colIndexDescription.FillWeight = 300F; + this.colIndexDescription.Frozen = true; this.colIndexDescription.HeaderText = "Index"; + this.colIndexDescription.MinimumWidth = 8; this.colIndexDescription.Name = "colIndexDescription"; this.colIndexDescription.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; this.colIndexDescription.Width = 250; - this.colIndexDescription.Frozen = true; // // colReference // this.colReference.DataPropertyName = "colReference"; this.colReference.FillWeight = 80F; + this.colReference.Frozen = true; this.colReference.HeaderText = "Reference"; + this.colReference.MinimumWidth = 8; this.colReference.Name = "colReference"; this.colReference.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.colReference.Frozen = true; + this.colReference.Width = 150; // // colComment // @@ -270,9 +277,9 @@ private void InitializeComponent() this.tabPageFactors.Controls.Add(this.cmbDatasets); this.tabPageFactors.Controls.Add(this.dgvFactors); this.tabPageFactors.Location = new System.Drawing.Point(4, 22); - this.tabPageFactors.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageFactors.Margin = new System.Windows.Forms.Padding(2); this.tabPageFactors.Name = "tabPageFactors"; - this.tabPageFactors.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageFactors.Padding = new System.Windows.Forms.Padding(2); this.tabPageFactors.Size = new System.Drawing.Size(542, 340); this.tabPageFactors.TabIndex = 1; this.tabPageFactors.Text = "Factors per Data and System"; @@ -281,7 +288,7 @@ private void InitializeComponent() // btnUpdate // this.btnUpdate.Location = new System.Drawing.Point(343, 4); - this.btnUpdate.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.btnUpdate.Margin = new System.Windows.Forms.Padding(2); this.btnUpdate.Name = "btnUpdate"; this.btnUpdate.Size = new System.Drawing.Size(56, 20); this.btnUpdate.TabIndex = 5; @@ -293,7 +300,7 @@ private void InitializeComponent() // this.txtIncomeYear.Enabled = false; this.txtIncomeYear.Location = new System.Drawing.Point(273, 6); - this.txtIncomeYear.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.txtIncomeYear.Margin = new System.Windows.Forms.Padding(2); this.txtIncomeYear.Name = "txtIncomeYear"; this.txtIncomeYear.Size = new System.Drawing.Size(50, 20); this.txtIncomeYear.TabIndex = 4; @@ -323,7 +330,7 @@ private void InitializeComponent() this.cmbDatasets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbDatasets.FormattingEnabled = true; this.cmbDatasets.Location = new System.Drawing.Point(52, 5); - this.cmbDatasets.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.cmbDatasets.Margin = new System.Windows.Forms.Padding(2); this.cmbDatasets.Name = "cmbDatasets"; this.cmbDatasets.Size = new System.Drawing.Size(138, 21); this.cmbDatasets.TabIndex = 1; @@ -343,9 +350,10 @@ private void InitializeComponent() this.dgvFactors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colIndexName}); this.dgvFactors.Location = new System.Drawing.Point(4, 33); - this.dgvFactors.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.dgvFactors.Margin = new System.Windows.Forms.Padding(2); this.dgvFactors.Name = "dgvFactors"; this.dgvFactors.RowHeadersVisible = false; + this.dgvFactors.RowHeadersWidth = 62; this.dgvFactors.ShowCellErrors = false; this.dgvFactors.ShowCellToolTips = false; this.dgvFactors.ShowEditingIcon = false; @@ -356,22 +364,25 @@ private void InitializeComponent() // colIndexName // this.colIndexName.HeaderText = "Index"; + this.colIndexName.MinimumWidth = 8; this.colIndexName.Name = "colIndexName"; this.colIndexName.ReadOnly = true; this.colIndexName.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colIndexName.Width = 150; // // contextMenuStripRows // this.contextMenuStripRows.ImageScalingSize = new System.Drawing.Size(20, 20); this.contextMenuStripRows.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.deleteRowToolStripMenuItem}); + this.deleteRowToolStripMenuItem, + this.addRowToolStripMenuItem}); this.contextMenuStripRows.Name = "contextMenuStripRows"; - this.contextMenuStripRows.Size = new System.Drawing.Size(143, 26); + this.contextMenuStripRows.Size = new System.Drawing.Size(241, 101); // // deleteRowToolStripMenuItem // this.deleteRowToolStripMenuItem.Name = "deleteRowToolStripMenuItem"; - this.deleteRowToolStripMenuItem.Size = new System.Drawing.Size(142, 22); + this.deleteRowToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.deleteRowToolStripMenuItem.Text = "Delete Row(s)"; this.deleteRowToolStripMenuItem.Click += new System.EventHandler(this.deleteRowToolStripMenuItem_Click); // @@ -387,6 +398,13 @@ private void InitializeComponent() this.btnCheckUsage.UseVisualStyleBackColor = true; this.btnCheckUsage.Click += new System.EventHandler(this.btnCheckUsage_Click); // + // addRowToolStripMenuItem + // + this.addRowToolStripMenuItem.Name = "addRowToolStripMenuItem"; + this.addRowToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.addRowToolStripMenuItem.Text = "Add Row(s)"; + this.addRowToolStripMenuItem.Click += new System.EventHandler(this.addRowToolStripMenuItem_Click); + // // UpratingIndicesForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -398,7 +416,7 @@ private void InitializeComponent() this.Controls.Add(this.btnOK); this.helpProvider.SetHelpKeyword(this, "EM_WW_DefiningUpratingFactors.htm"); this.helpProvider.SetHelpNavigator(this, System.Windows.Forms.HelpNavigator.Topic); - this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Margin = new System.Windows.Forms.Padding(2); this.MinimizeBox = false; this.Name = "UpratingIndicesForm"; this.helpProvider.SetShowHelp(this, true); @@ -448,5 +466,6 @@ private void InitializeComponent() private System.Windows.Forms.ContextMenuStrip contextMenuStripRows; private System.Windows.Forms.ToolStripMenuItem deleteRowToolStripMenuItem; private System.Windows.Forms.Button btnCheckUsage; + private System.Windows.Forms.ToolStripMenuItem addRowToolStripMenuItem; } } \ No newline at end of file diff --git a/EM_UI/UpratingIndices/UpratingIndicesForm.cs b/EM_UI/UpratingIndices/UpratingIndicesForm.cs index 0da5d7b..daae5d2 100644 --- a/EM_UI/UpratingIndices/UpratingIndicesForm.cs +++ b/EM_UI/UpratingIndices/UpratingIndicesForm.cs @@ -17,7 +17,7 @@ internal partial class UpratingIndicesForm : Form internal CountryConfigFacade _countryConfigFacade = null; internal DataConfigFacade _dataConfigFacade = null; internal const char _separator = '°'; - internal const char _separatorYear = '|'; + internal const char _separatorInner = '|'; const string _colYear = "colYear"; internal const string _policyUprateFactors_Name = "DefUpratingFactors"; internal const string _factorValueInvalid = "-99999999999"; // the value if a factor is missing or na @@ -88,7 +88,7 @@ void LoadIndices() dgvDataTable.PrimaryKey[0].AutoIncrement = true; dgvDataTable.Columns.Add(colIndexDescription.Name); dgvDataTable.Columns.Add(colReference.Name); - foreach (string year in _countryConfigFacade.GetAllUpratingIndexYears()) AddYearColumn(year); + foreach (string year in _countryConfigFacade.GetAllUpratingIndexYears(true)) AddYearColumn(year); dgvDataTable.Columns.Add(colComment.Name); GetHICPFromGlobalTable(); @@ -428,7 +428,7 @@ internal List> GetRawIndicesInfo() foreach (DataGridViewColumn yearColumn in GetYearColumnsAsDisplayed()) { if (indexRow.Cells[yearColumn.Index].Value != null) - yearValues += yearColumn.HeaderText + _separatorYear + indexRow.Cells[yearColumn.Index].Value.ToString(); + yearValues += yearColumn.HeaderText + _separatorInner + indexRow.Cells[yearColumn.Index].Value.ToString(); yearValues += _separator; } rawIndicesInfo.Add(new Tuple(description, reference, comment, @@ -503,7 +503,7 @@ void GetFromClipboard() currentCellColumnIndex + indexColumn == dgvIndices.Columns[colComment.Name].DisplayIndex) row[GetYearColumnIndexByDisplayIndex(currentCellColumnIndex + indexColumn)] = clipboardCells[indexColumn]; else // if one of the system columns - row[GetYearColumnIndexByDisplayIndex(currentCellColumnIndex + indexColumn)] = clipboardCells[indexColumn].Replace(',', '.'); // fix decimal separator + row[GetYearColumnIndexByDisplayIndex(currentCellColumnIndex + indexColumn)] = EM_Helpers.SetCleanInvariantNumberFormat(clipboardCells[indexColumn]); // fix decimal separator } else break; @@ -774,5 +774,25 @@ private void tabIndices_SelectedIndexChanged(object sender, EventArgs e) { cmbDatasets_SelectedIndexChanged(null, null); } + + private void addRowToolStripMenuItem_Click(object sender, EventArgs e) + { + foreach (DataGridViewRow row in dgvIndices.Rows) + { + // if you reached the new line, you are good! + if (row.IsNewRow) + { + DataGridViewCell cell = row.Cells[1]; + // if the reference is null or empty, focus and exit with false + if (cell.Value == null || cell.Value.ToString() == "") + { + dgvIndices.ClearSelection(); + cell.Selected = true; + dgvIndices.CurrentCell = cell; + dgvIndices.BeginEdit(true); + } + } + } + } } } diff --git a/EM_UI/VariablesAdministration/VariablesForm.Designer.cs b/EM_UI/VariablesAdministration/VariablesForm.Designer.cs index 94b75a5..38dca57 100644 --- a/EM_UI/VariablesAdministration/VariablesForm.Designer.cs +++ b/EM_UI/VariablesAdministration/VariablesForm.Designer.cs @@ -856,7 +856,7 @@ internal void InitializeComponent() this.treeAcronyms.CellValueChanged += new DevExpress.XtraTreeList.CellValueChangedEventHandler(this.treeAcronyms_CellValueChanged); this.treeAcronyms.ShowingEditor += new System.ComponentModel.CancelEventHandler(this.treeAcronyms_ShowingEditor); this.treeAcronyms.Enter += new System.EventHandler(this.Control_Enter); - this.treeAcronyms.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyUp); + this.treeAcronyms.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyDown); this.treeAcronyms.Leave += new System.EventHandler(this.Control_Leave); // // colAcronym @@ -910,7 +910,7 @@ internal void InitializeComponent() this.dgvDescriptions.SelectionChanged += new System.EventHandler(this.dgvDescriptions_SelectionChanged); this.dgvDescriptions.SortCompare += new System.Windows.Forms.DataGridViewSortCompareEventHandler(this.dgvDescriptions_SortCompare); this.dgvDescriptions.Enter += new System.EventHandler(this.Control_Enter); - this.dgvDescriptions.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyUp); + this.dgvDescriptions.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyDown); this.dgvDescriptions.Leave += new System.EventHandler(this.Control_Leave); // // colCountry @@ -949,7 +949,7 @@ internal void InitializeComponent() this.dgvCategories.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvCategories_CellEndEdit); this.dgvCategories.SelectionChanged += new System.EventHandler(this.dgvCategories_SelectionChanged); this.dgvCategories.Enter += new System.EventHandler(this.Control_Enter); - this.dgvCategories.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyUp); + this.dgvCategories.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyDown); this.dgvCategories.Leave += new System.EventHandler(this.Control_Leave); // // colCategoryValue @@ -1037,7 +1037,7 @@ internal void InitializeComponent() this.dgvVariables.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dgvVariables_RowPostPaint); this.dgvVariables.SelectionChanged += new System.EventHandler(this.dgvVariables_SelectionChanged); this.dgvVariables.Enter += new System.EventHandler(this.Control_Enter); - this.dgvVariables.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyUp); + this.dgvVariables.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyDown); this.dgvVariables.Leave += new System.EventHandler(this.Control_Leave); // // colVariableName @@ -1135,7 +1135,7 @@ internal void InitializeComponent() this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.VariablesForm_FormClosing); this.Load += new System.EventHandler(this.VariablesForm_Load); - this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyUp); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.VariablesForm_KeyDown); ((System.ComponentModel.ISupportInitialize)(this.ribbon)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.applicationMenu)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.barAndDockingController)).EndInit(); diff --git a/EM_UI/VariablesAdministration/VariablesForm.cs b/EM_UI/VariablesAdministration/VariablesForm.cs index ee3952e..e9ad8f7 100644 --- a/EM_UI/VariablesAdministration/VariablesForm.cs +++ b/EM_UI/VariablesAdministration/VariablesForm.cs @@ -139,23 +139,30 @@ void SetButtonGreyState() void btnSearchAcronym_ItemClick(object sender, ItemClickEventArgs e) { _acronymManager.SearchAcronymsByNameOrDescription(true); } void btnSearchAcronymDescription_ItemClick(object sender, ItemClickEventArgs e) { _acronymManager.SearchAcronymsByNameOrDescription(false); } - void VariablesForm_KeyUp(object sender, KeyEventArgs keyEventArgs) + private void VariablesForm_KeyDown(object sender, KeyEventArgs e) { - if (keyEventArgs.Control && keyEventArgs.KeyCode == Keys.S) + if (e.Control && e.KeyCode == Keys.S) { if (_isReadOnly) UserInfoHandler.ShowInfo("File is in read-only mode."); else SaveChanges(); } - if (keyEventArgs.Control && keyEventArgs.KeyCode == Keys.Z) + if (e.Control && e.KeyCode == Keys.Z) PerformAction(new VariablesUndoAction(_undoManager)); - if (keyEventArgs.Control && keyEventArgs.KeyCode == Keys.Y) + if (e.Control && e.KeyCode == Keys.Y) PerformAction(new VariablesRedoAction(_undoManager)); if (treeAcronyms.Focused == true) - _acronymManager.HandleEnterKey(keyEventArgs); + _acronymManager.HandleEnterKey(e); + if (e.Control && e.KeyCode == Keys.V && dgvVariables.Focused == true) + CopyVariablesFromClipboard(); } - + + void CopyVariablesFromClipboard() + { + // TODO + } + void VariablesForm_FormClosing(object sender, FormClosingEventArgs e) { if (_hasChangedSinceLastSave && !_isReadOnly) diff --git a/EM_UI/VersionControl/Dialogs/VCChangePassword.Designer.cs b/EM_UI/VersionControl/Dialogs/VCChangePassword.Designer.cs deleted file mode 100644 index e0b6a59..0000000 --- a/EM_UI/VersionControl/Dialogs/VCChangePassword.Designer.cs +++ /dev/null @@ -1,207 +0,0 @@ -namespace EM_UI.VersionControl.Dialogs -{ - partial class VCChangePassword - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.helpProvider = new System.Windows.Forms.HelpProvider(); - this.btnCancel = new System.Windows.Forms.Button(); - this.btnOK = new System.Windows.Forms.Button(); - this.txtForgotPasswordQuestion = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtPassword = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.txtRetypePassword = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this.txtForgotPasswordAnswer = new System.Windows.Forms.TextBox(); - this.SuspendLayout(); - // - // helpProvider - // - this.helpProvider.HelpNamespace = "C:\\Euromod\\Bauer42\\EM_UI\\EuromodFiles\\Help\\EUROMODHelp.chm"; - // - // btnCancel - // - this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Image = global::EM_UI.Properties.Resources.delete16; - this.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.btnCancel.Location = new System.Drawing.Point(292, 40); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(70, 23); - this.btnCancel.TabIndex = 5; - this.btnCancel.Text = "Cancel"; - this.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; - this.btnCancel.UseVisualStyleBackColor = true; - // - // btnOK - // - this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnOK.Image = global::EM_UI.Properties.Resources.apply16; - this.btnOK.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.btnOK.Location = new System.Drawing.Point(292, 15); - this.btnOK.Name = "btnOK"; - this.btnOK.Size = new System.Drawing.Size(70, 23); - this.btnOK.TabIndex = 4; - this.btnOK.Text = "OK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // txtForgotPasswordQuestion - // - this.txtForgotPasswordQuestion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtForgotPasswordQuestion.Location = new System.Drawing.Point(16, 88); - this.txtForgotPasswordQuestion.Margin = new System.Windows.Forms.Padding(2); - this.txtForgotPasswordQuestion.Name = "txtForgotPasswordQuestion"; - this.txtForgotPasswordQuestion.Size = new System.Drawing.Size(348, 20); - this.txtForgotPasswordQuestion.TabIndex = 2; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(14, 72); - this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(251, 13); - this.label3.TabIndex = 4; - this.label3.Text = "Forgot Password Question (e.g. name of my pet-cat)"; - // - // txtPassword - // - this.txtPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtPassword.Location = new System.Drawing.Point(105, 15); - this.txtPassword.Margin = new System.Windows.Forms.Padding(2); - this.txtPassword.Name = "txtPassword"; - this.txtPassword.PasswordChar = '*'; - this.txtPassword.Size = new System.Drawing.Size(137, 20); - this.txtPassword.TabIndex = 0; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(14, 15); - this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(78, 13); - this.label2.TabIndex = 2; - this.label2.Text = "New Password"; - // - // txtRetypePassword - // - this.txtRetypePassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtRetypePassword.Location = new System.Drawing.Point(105, 40); - this.txtRetypePassword.Margin = new System.Windows.Forms.Padding(2); - this.txtRetypePassword.Name = "txtRetypePassword"; - this.txtRetypePassword.PasswordChar = '*'; - this.txtRetypePassword.Size = new System.Drawing.Size(137, 20); - this.txtRetypePassword.TabIndex = 1; - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(14, 41); - this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(90, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Retype Password"; - // - // label4 - // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(14, 108); - this.label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(174, 13); - this.label4.TabIndex = 14; - this.label4.Text = "Forgot Password Answer (e.g. Kitty)"; - // - // txtForgotPasswordAnswer - // - this.txtForgotPasswordAnswer.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.txtForgotPasswordAnswer.Location = new System.Drawing.Point(16, 124); - this.txtForgotPasswordAnswer.Margin = new System.Windows.Forms.Padding(2); - this.txtForgotPasswordAnswer.Name = "txtForgotPasswordAnswer"; - this.txtForgotPasswordAnswer.Size = new System.Drawing.Size(348, 20); - this.txtForgotPasswordAnswer.TabIndex = 3; - // - // VCChangePassword - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnCancel; - this.ClientSize = new System.Drawing.Size(374, 162); - this.ControlBox = false; - this.Controls.Add(this.label4); - this.Controls.Add(this.txtForgotPasswordAnswer); - this.Controls.Add(this.txtForgotPasswordQuestion); - this.Controls.Add(this.label3); - this.Controls.Add(this.btnCancel); - this.Controls.Add(this.txtPassword); - this.Controls.Add(this.btnOK); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.txtRetypePassword); - this.helpProvider.SetHelpKeyword(this, "EM_VC_IdentificationSettings.htm"); - this.helpProvider.SetHelpNavigator(this, System.Windows.Forms.HelpNavigator.Topic); - this.helpProvider.SetHelpString(this, ""); - this.Margin = new System.Windows.Forms.Padding(2); - this.MaximizeBox = false; - this.MaximumSize = new System.Drawing.Size(390, 200); - this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(390, 200); - this.Name = "VCChangePassword"; - this.helpProvider.SetShowHelp(this, true); - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.Text = "Version Control - Change Password"; - this.Load += new System.EventHandler(this.VCChangePassword_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.HelpProvider helpProvider; - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox txtPassword; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox txtRetypePassword; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtForgotPasswordQuestion; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox txtForgotPasswordAnswer; - } -} \ No newline at end of file diff --git a/EM_UI/VersionControl/Dialogs/VCChangePassword.cs b/EM_UI/VersionControl/Dialogs/VCChangePassword.cs deleted file mode 100644 index 1632597..0000000 --- a/EM_UI/VersionControl/Dialogs/VCChangePassword.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using EM_UI.Tools; -using EM_UI.Validate; -using VCUIAPI; - -namespace EM_UI.VersionControl.Dialogs -{ - internal partial class VCChangePassword : Form - { - - internal VCChangePassword(string oldPassword, string forgotPasswordQuestion, string forgotPasswordAnswer) - { - InitializeComponent(); - - txtPassword.Text = txtRetypePassword.Text = oldPassword; - txtForgotPasswordQuestion.Text = forgotPasswordQuestion; - txtForgotPasswordAnswer.Text = forgotPasswordAnswer; - } - - void VCChangePassword_Load(object sender, EventArgs e) - { - string helpPath; EM_AppContext.Instance.GetHelpPath(out helpPath); helpProvider.HelpNamespace = helpPath; - } - - void btnOK_Click(object sender, EventArgs e) - { - if (txtPassword.Text == txtRetypePassword.Text) { DialogResult = DialogResult.OK; Close(); return; } - UserInfoHandler.ShowError("Password does not correspond with retyped password. Please correct."); - } - - internal void GetNewSettings(out string password, out string forgotPasswordQuestion, out string forgotPasswordAnswer) - { - password = txtPassword.Text; - forgotPasswordQuestion = txtForgotPasswordQuestion.Text; - forgotPasswordAnswer = txtForgotPasswordAnswer.Text; - } - } -} diff --git a/EM_UI/VersionControl/Merging/ApplyAdministrator.cs b/EM_UI/VersionControl/Merging/ApplyAdministrator.cs index cea870e..9649786 100644 --- a/EM_UI/VersionControl/Merging/ApplyAdministrator.cs +++ b/EM_UI/VersionControl/Merging/ApplyAdministrator.cs @@ -110,6 +110,8 @@ void SequenceComponent(string parentID, SortedList infoOriginalOrde MergeControl _mcData = null; MergeControl _mcCondFormat = null; MergeControl _mcUpratingFactors = null; + MergeControl _mcIndirectTaxes = null; + MergeControl _mcExternalStatistics = null; MergeControl _mcExtensions = null; MergeControl _mcExtSwitches = null; MergeControl _mcLookGroups = null; @@ -155,6 +157,8 @@ internal ApplyAdministrator(MergeAdministrator mergeAdministrator, MergeForm mer _mcData = _mergeForm.GetMergeControlByName(MergeForm.DATASETS); _mcCondFormat = _mergeForm.GetMergeControlByName(MergeForm.CONDITIONAL_FORMATTING); _mcUpratingFactors = _mergeForm.GetMergeControlByName(MergeForm.UPRATING_INDICES); + _mcIndirectTaxes = _mergeForm.GetMergeControlByName(MergeForm.INDIRECT_TAXES); + _mcExternalStatistics = _mergeForm.GetMergeControlByName(MergeForm.EXTERNAL_STATISTICS); _mcExtensions = _mergeForm.GetMergeControlByName(MergeForm.EXTENSIONS); _mcExtSwitches = _mergeForm.GetMergeControlByName(MergeForm.EXT_SWITCHES); _mcLookGroups = _mergeForm.GetMergeControlByName(MergeForm.LOOK_GROUPS); @@ -245,6 +249,26 @@ internal void Apply() //ChangeUpratingIndices(true); ChangeUpratingIndices(false); ChangeUpratingIndices(); + //remove locally added and rejected or remotely removed and accepted indirect taxes + RemoveIndirectTaxes(); + + //add locally removed and rejected or remotely added and accepted indirect taxes + AddIndirectTaxes(); + + //apply locally rejected or remotely accepted changes concerning indirect taxes + //ChangeIndirectTaxes(true); ChangeIndirectTaxes(false); + ChangeIndirectTaxes(); + + //remove locally added and rejected or remotely removed and accepted external statistics + RemoveExternalStatistics(); + + //add locally removed and rejected or remotely added and accepted external statistics + AddExternalStatistics(); + + //apply locally rejected or remotely accepted changes concerning external statistics + //ChangeExternalStatistics(true); ChangeExternalStatistics(false); + ChangeExternalStatistics(); + //apply locally rejected or remotely accepted changes in country-long-name and private-setting ChangeCountrySettings(); } @@ -900,6 +924,9 @@ void ChangeCondFormat(bool local) } } + /** + * UPRATING INDICES + */ void RemoveUpratingIndices() { List remUI = new List(); @@ -942,6 +969,94 @@ void ChangeUpratingIndices() } } + /** + * INDIRECT TAXES + */ + void RemoveIndirectTaxes() + { + List remUI = new List(); + foreach (MergeControl.NodeInfo nodeInfo in _mcIndirectTaxes.GetNodeInfoLocal(MergeForm.INDIRECT_TAXES)) + { + if (nodeInfo.changeType == MergeControl.ChangeType.removed && nodeInfo.changeHandling == MergeControl.ChangeHandling.accept) + remUI.Add((from ui in _ccFacLocal.GetIndirectTaxes() where ui.ID == nodeInfo.ID select ui).First()); + } + foreach (CountryConfig.IndirectTaxRow ittIndex in remUI) + ittIndex.Delete(); + _ccFacLocal.GetCountryConfig().AcceptChanges(); + } + + void AddIndirectTaxes() + { + foreach (MergeControl.NodeInfo nodeInfo in _mcIndirectTaxes.GetNodeInfoLocal(MergeForm.INDIRECT_TAXES)) + { + if (nodeInfo.changeType == MergeControl.ChangeType.added && nodeInfo.changeHandling== MergeControl.ChangeHandling.accept) + { + CountryConfig.IndirectTaxRow addUI = (from ui in _ccFacRemote.GetIndirectTaxes() where ui.ID == nodeInfo.ID select ui).FirstOrDefault(); + if (addUI != null) + _ccFacLocal.GetCountryConfig().IndirectTax.AddIndirectTaxRow(addUI.ID, addUI.Reference, addUI.Comment, addUI.YearValues); + } + } + } + + void ChangeIndirectTaxes() + { + foreach (MergeControl.NodeInfo nodeInfo in _mcIndirectTaxes.GetNodeInfoLocal(MergeForm.INDIRECT_TAXES)) + { + if (nodeInfo.changeType != MergeControl.ChangeType.changed) { continue; } + CountryConfig.IndirectTaxRow indirectTax = (from ui in _ccFacLocal.GetIndirectTaxes() where ui.ID == nodeInfo.ID select ui).First(); + foreach (MergeControl.CellInfo cellInfo in nodeInfo.cellInfo) + { + if (!cellInfo.isChanged) { continue; } + indirectTax[cellInfo.columnID] = cellInfo.text; + } + } + } + + /** + * EXTERNAL STATISTICS + */ + void RemoveExternalStatistics() + { + List remUI = new List(); + foreach (MergeControl.NodeInfo nodeInfo in _mcExternalStatistics.GetNodeInfoLocal(MergeForm.EXTERNAL_STATISTICS)) + { + if (nodeInfo.changeType == MergeControl.ChangeType.removed && nodeInfo.changeHandling == MergeControl.ChangeHandling.accept) + remUI.Add((from ui in _ccFacLocal.GetExternalStatistics() where ui.ID == nodeInfo.ID select ui).First()); + } + foreach (CountryConfig.ExternalStatisticRow ittIndex in remUI) + ittIndex.Delete(); + _ccFacLocal.GetCountryConfig().AcceptChanges(); + } + + void AddExternalStatistics() + { + foreach (MergeControl.NodeInfo nodeInfo in _mcExternalStatistics.GetNodeInfoLocal(MergeForm.EXTERNAL_STATISTICS)) + { + if (nodeInfo.changeType == MergeControl.ChangeType.added && nodeInfo.changeHandling == MergeControl.ChangeHandling.accept) + { + CountryConfig.ExternalStatisticRow addES = (from es in _ccFacRemote.GetExternalStatistics() where es.ID == nodeInfo.ID select es).FirstOrDefault(); + if (addES != null) + _ccFacLocal.GetCountryConfig().ExternalStatistic.AddExternalStatisticRow(addES.ID, addES.Category, addES.Reference, addES.Description, addES.YearValues, addES.Comment, addES.Source, addES.TableName, addES.Destination); + } + } + } + + void ChangeExternalStatistics() + { + foreach (MergeControl.NodeInfo nodeInfo in _mcExternalStatistics.GetNodeInfoLocal(MergeForm.EXTERNAL_STATISTICS)) + { + if (nodeInfo.changeType != MergeControl.ChangeType.changed) { continue; } + CountryConfig.ExternalStatisticRow exStat = (from ui in _ccFacLocal.GetExternalStatistics() where ui.ID == nodeInfo.ID select ui).FirstOrDefault(); + if (exStat == null) continue; + foreach (MergeControl.CellInfo cellInfo in nodeInfo.cellInfo) + { + if (!cellInfo.isChanged) { continue; } + exStat[cellInfo.columnID] = cellInfo.text; + } + } + } + + void ChangeCountrySettings() { string nameLocal, nameRemote; diff --git a/EM_UI/VersionControl/Merging/ChangeLogAdministrator.cs b/EM_UI/VersionControl/Merging/ChangeLogAdministrator.cs index 8ae0012..d2fc396 100644 --- a/EM_UI/VersionControl/Merging/ChangeLogAdministrator.cs +++ b/EM_UI/VersionControl/Merging/ChangeLogAdministrator.cs @@ -65,7 +65,8 @@ internal static List GetChanges(string releaseVersion) private static string GetCellValue(Worksheet w, int r, int c, bool toLower = true) { if (w[r, c].Value == null) return string.Empty; - string cellVal = w[r, c].Value.TextValue; if (cellVal == null) return string.Empty; + string cellVal = string.IsNullOrEmpty(w[r, c].Value.TextValue)?w[r, c].Value.NumericValue.ToString() : w[r, c].Value.TextValue; + if (cellVal == null) return string.Empty; return toLower ? cellVal = cellVal.Trim().ToLower() : cellVal = cellVal.Trim(); } } diff --git a/EM_UI/VersionControl/Merging/MergeAdministrator.cs b/EM_UI/VersionControl/Merging/MergeAdministrator.cs index bb7498b..27608b7 100644 --- a/EM_UI/VersionControl/Merging/MergeAdministrator.cs +++ b/EM_UI/VersionControl/Merging/MergeAdministrator.cs @@ -207,6 +207,8 @@ internal void WriteInfoToInfoFiles() WriteInfoToInfoFile(MergeForm.SPINE, _mergeForm.StoreMergeControl(MergeForm.SPINE)); WriteInfoToInfoFile(MergeForm.CONDITIONAL_FORMATTING, _mergeForm.StoreMergeControl(MergeForm.CONDITIONAL_FORMATTING)); WriteInfoToInfoFile(MergeForm.UPRATING_INDICES, _mergeForm.StoreMergeControl(MergeForm.UPRATING_INDICES)); + WriteInfoToInfoFile(MergeForm.INDIRECT_TAXES, _mergeForm.StoreMergeControl(MergeForm.INDIRECT_TAXES)); + WriteInfoToInfoFile(MergeForm.EXTERNAL_STATISTICS, _mergeForm.StoreMergeControl(MergeForm.EXTERNAL_STATISTICS)); if (!_isAddOn) { WriteInfoToInfoFile(MergeForm.EXTENSIONS, _mergeForm.StoreMergeControl(MergeForm.EXTENSIONS)); @@ -256,6 +258,8 @@ void GetInfoFromXml(string mergeControlName, out List c case MergeForm.SPINE: GetInfoSpineFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; case MergeForm.CONDITIONAL_FORMATTING: GetInfoCondFormatFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; case MergeForm.UPRATING_INDICES: GetInfoUpratingIndicesFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; + case MergeForm.INDIRECT_TAXES: GetInfoIndirectTaxesFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; + case MergeForm.EXTERNAL_STATISTICS: GetInfoExternalStatisticsFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; case MergeForm.EXTENSIONS: GetInfoExtensionsFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; case MergeForm.EXT_SWITCHES: GetInfoExtSwitchesFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; case MergeForm.LOOK_GROUPS: GetInfoGroupsFromXml(out columInfo, out nodeInfoLocal, out nodeInfoRemote); break; @@ -944,6 +948,10 @@ internal void ShowMergeDialog() FillMergeControl(!mergeInfoAvailabe, MergeForm.UPRATING_INDICES); + FillMergeControl(!mergeInfoAvailabe, MergeForm.INDIRECT_TAXES); + + FillMergeControl(!mergeInfoAvailabe, MergeForm.EXTERNAL_STATISTICS); + if (!_isAddOn) { FillMergeControl(!mergeInfoAvailabe, MergeForm.EXTENSIONS); @@ -2173,11 +2181,74 @@ void GetInfoUpratingIndicesFromXml(out List columInfo, nodeInfoLocal, nodeInfoRemote, settingColumns); //To display uprating indices nodes properly - UpdateNodesUpratingIndices(nodeInfoLocal, nodeInfoRemote, columInfo, _ccParent.UpratingIndex); + UpdateNodes(nodeInfoLocal, nodeInfoRemote, columInfo, _ccParent.UpratingIndex, UpratingIndices.UpratingIndicesForm._separator); } + void GetInfoIndirectTaxesFromXml(out List columInfo, + out List nodeInfoLocal, out List nodeInfoRemote) + { + columInfo = new List(); + nodeInfoLocal = new List(); + nodeInfoRemote = new List(); + + // BUILD TREE-COLUMNS + // define the settings which are to be compared + List settingColumns = new List(); + settingColumns.Add(_ccLocal.IndirectTax.ReferenceColumn); + settingColumns.Add(_ccLocal.IndirectTax.YearValuesColumn); + settingColumns.Add(_ccLocal.IndirectTax.CommentColumn); + + // add setting-columns to tree + foreach (DataColumn settingColumn in settingColumns) + columInfo.Add(new MergeControl.ColumnInfo(settingColumn.ColumnName)); + + + // BUILD TREE-NODES + // add a node for each indirect tax (with simingly large part to ignore) + List localAndRemoteIDs = BuildNodeInfo_List(_ccLocal.IndirectTax, _ccRemote.IndirectTax, _ccParent.IndirectTax, + _ccLocal.IndirectTax.IDColumn.ColumnName, _ccLocal.IndirectTax.ReferenceColumn.Caption, string.Empty, + nodeInfoLocal, nodeInfoRemote, settingColumns); + + //To display indirect taxes nodes properly + UpdateNodes(nodeInfoLocal, nodeInfoRemote, columInfo, _ccParent.IndirectTax, IndirectTaxes.IndirectTaxesForm.separator); + } + + void GetInfoExternalStatisticsFromXml(out List columInfo, + out List nodeInfoLocal, out List nodeInfoRemote) + { + columInfo = new List(); + nodeInfoLocal = new List(); + nodeInfoRemote = new List(); + + // BUILD TREE-COLUMNS + // define the settings which are to be compared + List settingColumns = new List(); + settingColumns.Add(_ccLocal.ExternalStatistic.CategoryColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.ReferenceColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.DescriptionColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.YearValuesColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.CommentColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.SourceColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.TableNameColumn); + settingColumns.Add(_ccLocal.ExternalStatistic.DestinationColumn); + + // add setting-columns to tree + foreach (DataColumn settingColumn in settingColumns) + columInfo.Add(new MergeControl.ColumnInfo(settingColumn.ColumnName)); + + + // BUILD TREE-NODES + // add a node for each uprating index (with simingly large part to ignore + List localAndRemoteIDs = BuildNodeInfo_List(_ccLocal.ExternalStatistic, _ccRemote.ExternalStatistic, _ccParent.ExternalStatistic, + _ccLocal.ExternalStatistic.IDColumn.ColumnName, _ccLocal.ExternalStatistic.ReferenceColumn.Caption, string.Empty, + nodeInfoLocal, nodeInfoRemote, settingColumns); + + //To display external statistics nodes properly + UpdateNodes(nodeInfoLocal, nodeInfoRemote, columInfo, _ccParent.ExternalStatistic, InDepthDefinitions.SEPARATOR); + } + DataTable GetSubTable(DataTable table, string whereClause = "", Dictionary columnAliases = null, string orderClause = "") { DataTable subTable = null; @@ -2656,31 +2727,28 @@ internal void DeleteMergeFolder(bool deleteOpenConflictInfo, bool deleteAnyConfl /// /// /// - void UpdateNodesUpratingIndices(List nodeInfoLocal, List nodeInfoRemote, List columInfo, DataTable parentTable) + void UpdateNodes(List nodeInfoLocal, List nodeInfoRemote, List columInfo, DataTable parentTable, char separator) { //First we need to get all the years List years = new List(); - years = getUpratingIndicesYears(years, nodeInfoLocal); - years = getUpratingIndicesYears(years, nodeInfoRemote); + years = getYears(years, nodeInfoLocal); + years = getYears(years, nodeInfoRemote); years.Sort(); //Then, we get a dictionary with nodes, years and values for local and remote //We will also get a list of all nodes List nodes = new List(); - Dictionary> yearValuesDictLocal = GetAllUpratingIndexNodeYearsValuesDictionary(nodeInfoLocal, nodes); - Dictionary> yearValuesDictRemote = GetAllUpratingIndexNodeYearsValuesDictionary(nodeInfoRemote, nodes); + Dictionary> yearValuesDictLocal = GetAllNodeYearsValuesDictionary(nodeInfoLocal, nodes, separator); + Dictionary> yearValuesDictRemote = GetAllNodeYearsValuesDictionary(nodeInfoRemote, nodes, separator); //Then, we also get a dictionary for the parent - Dictionary> yearValuesDictParent = GetAllUpratingIndexNodeYearsValuesDictionaryForParent(nodes, parentTable); + Dictionary> yearValuesDictParent = GetAllNodeYearsValuesDictionaryForParent(nodes, parentTable, separator); //We iterate through the local and remote and create the new nodes (one per year) UpdateNodesInfo(nodeInfoLocal, nodeInfoRemote, yearValuesDictLocal, yearValuesDictRemote, yearValuesDictParent, years); - //Finally, we update columnInfo UpdateColumnInfo(columInfo, years); - - } /// @@ -2718,7 +2786,7 @@ void UpdateColumnInfo(List columInfo, List year /// /// /// - void UpdateNodesInfo(List nodeInfoLocal, List nodeInfoRemote, Dictionary> yearValuesDictLocal, Dictionary> yearValuesDictRemote, Dictionary> yearValuesDictParent, List ids) + void UpdateNodesInfo(List nodeInfoLocal, List nodeInfoRemote, Dictionary> yearValuesDictLocal, Dictionary> yearValuesDictRemote, Dictionary> yearValuesDictParent, List ids) { //We need to get the HICP node in order to remove it @@ -2840,16 +2908,16 @@ void UpdateNodesInfo(List nodeInfoLocal, List yearValuesDictLocalNode = yearValuesDictLocal[node.ID]; + Dictionary yearValuesDictLocalNode = yearValuesDictLocal[node.ID]; //Now we check if the component didn't exist before bool existRemote = true; bool existParent = true; bool existLocal = true; - try { if (!(yearValuesDictRemote[node.ID].Values.LongCount() > 0)) existRemote = false; } catch (Exception e) { existRemote = false; string msg = e.Message; } - try { if (!(yearValuesDictParent[node.ID].Values.LongCount() > 0)) existParent = false; } catch (Exception e) { existParent = false; string msg = e.Message; } - try { if (!(yearValuesDictLocal[node.ID].Values.LongCount() > 0)) existLocal = false; } catch (Exception e) { existLocal = false; string msg = e.Message; } + try { if (!(yearValuesDictRemote.ContainsKey(node.ID) && yearValuesDictRemote[node.ID].Values.LongCount() > 0)) existRemote = false; } catch (Exception e) { existRemote = false; string msg = e.Message; } + try { if (!(yearValuesDictParent.ContainsKey(node.ID) && yearValuesDictParent[node.ID].Values.LongCount() > 0)) existParent = false; } catch (Exception e) { existParent = false; string msg = e.Message; } + try { if (!(yearValuesDictLocal.ContainsKey(node.ID) && yearValuesDictLocal[node.ID].Values.LongCount() > 0)) existLocal = false; } catch (Exception e) { existLocal = false; string msg = e.Message; } if (!existLocal && existParent) //It does not exist in local { @@ -2867,19 +2935,19 @@ void UpdateNodesInfo(List nodeInfoLocal, List nodeInfoLocal, List nodeInfoLocal, List 0)) existRemote = false; } catch (Exception e) { existRemote = false; string msg = e.Message; } - try { if (!(yearValuesDictLocal[node.ID].Values.LongCount() > 0)) existLocal = false; } catch (Exception e) { existLocal = false; string msg = e.Message; } - try { if (!(yearValuesDictParent[node.ID].Values.LongCount() > 0)) existParent = false; } catch (Exception e) { existParent = false; string msg = e.Message; } - + try { if (!(yearValuesDictRemote.ContainsKey(node.ID) && yearValuesDictRemote[node.ID].Values.LongCount() > 0)) existRemote = false; } catch (Exception e) { existRemote = false; string msg = e.Message; } + try { if (!(yearValuesDictParent.ContainsKey(node.ID) && yearValuesDictParent[node.ID].Values.LongCount() > 0)) existParent = false; } catch (Exception e) { existParent = false; string msg = e.Message; } + try { if (!(yearValuesDictLocal.ContainsKey(node.ID) && yearValuesDictLocal[node.ID].Values.LongCount() > 0)) existLocal = false; } catch (Exception e) { existLocal = false; string msg = e.Message; } + if (!existLocal && !existParent) { node.changeType = MergeControl.ChangeType.added; node.changeHandling = MergeControl.ChangeHandling.accept; @@ -2943,26 +3008,24 @@ void UpdateNodesInfo(List nodeInfoLocal, List yearValuesDictRemoteNode = yearValuesDictRemote[node.ID]; + Dictionary yearValuesDictRemoteNode = yearValuesDictRemote[node.ID]; foreach (string entryYear in ids) - { + { MergeControl.CellInfo remoteCellInfo = new MergeControl.CellInfo(entryYear); string remoteValue = ""; - try { remoteValue = yearValuesDictRemoteNode[entryYear].ToString(); } catch (Exception e) { - string msg = e.Message; - } + if (yearValuesDictRemoteNode.ContainsKey(entryYear)) remoteValue = yearValuesDictRemoteNode[entryYear]; remoteCellInfo.SetText(remoteValue); //Local value string localValue = ""; - try { localValue = yearValuesDictLocal[node.ID][entryYear].ToString(); } catch (Exception e) { string msg = e.Message; } + if (yearValuesDictLocal[node.ID].ContainsKey(entryYear)) localValue = yearValuesDictLocal[node.ID][entryYear]; if(node.changeType != MergeControl.ChangeType.removed && node.changeType != MergeControl.ChangeType.added) { if (!localValue.Equals(remoteValue)) { string parentValue = ""; - try { parentValue = yearValuesDictParent[node.ID][entryYear].ToString(); } catch (Exception e) { string msg = e.Message; } + if (yearValuesDictParent[node.ID].ContainsKey(entryYear)) parentValue = yearValuesDictParent[node.ID][entryYear]; Boolean remoteChange = !remoteValue.Equals(parentValue); Boolean localChange = !localValue.Equals(parentValue); @@ -3004,20 +3067,19 @@ void UpdateNodesInfo(List nodeInfoLocal, List /// Populates a dictionary which key is the nodeId and which value is another dictionary that contains the years (key) and values for the nodesIfo /// /// List of nodes that exist in the local and remote /// List of NodeInfo /// Dictionary which key is the nodeId and which value is another dictionary that contains the years (key) and values for the nodesInfo - public static Dictionary> GetAllUpratingIndexNodeYearsValuesDictionary(List nodeInfo, List nodes) + public static Dictionary> GetAllNodeYearsValuesDictionary(List nodeInfo, List nodes, char separator) { - Dictionary> nodeDictionary = new Dictionary>(); + Dictionary> nodeDictionary = new Dictionary>(); foreach (MergeControl.NodeInfo node in nodeInfo) { - Dictionary yearValuesDict = new Dictionary(); + Dictionary yearValuesDict = new Dictionary(); string yearValuesString = ""; foreach (MergeControl.CellInfo cell in node.cellInfo) { @@ -3025,13 +3087,11 @@ public static Dictionary> GetAllUpratingIndex { yearValuesString = cell.text; } - } - yearValuesDict = GetDictionaryUpratingIndexYearsValues(yearValuesString); + yearValuesDict = GetDictionaryYearsValues(yearValuesString, separator); nodeDictionary.Add(node.ID, yearValuesDict); if (!nodes.Contains(node.ID)) { nodes.Add(node.ID); } - } return nodeDictionary; @@ -3043,9 +3103,9 @@ public static Dictionary> GetAllUpratingIndex /// List of nodes that exist in the local and remote /// Datatable of parent values /// Dictionary which key is the nodeId and which value is another dictionary that contains the years (key) and values for the parent table - public static Dictionary> GetAllUpratingIndexNodeYearsValuesDictionaryForParent(List nodes, DataTable parentTable) + public static Dictionary> GetAllNodeYearsValuesDictionaryForParent(List nodes, DataTable parentTable, char separator) { - Dictionary> parentDictionary = new Dictionary>(); + Dictionary> parentDictionary = new Dictionary>(); foreach (string node in nodes) { @@ -3054,7 +3114,7 @@ public static Dictionary> GetAllUpratingIndex string parentValue = parentRow != null ? parentRow.Field(MergeForm.YEAR_VALUES) : ""; if (!parentValue.Equals("")) { - Dictionary yearValuesDict = GetDictionaryUpratingIndexYearsValues(parentValue); + Dictionary yearValuesDict = GetDictionaryYearsValues(parentValue, separator); parentDictionary.Add(node, yearValuesDict); } } @@ -3067,7 +3127,7 @@ public static Dictionary> GetAllUpratingIndex /// /// /// List of the years that appear in the uprating indices YearValues string - List getUpratingIndicesYears(List ids, List nodeInfo) + List getYears(List ids, List nodeInfo) { foreach (MergeControl.NodeInfo node in nodeInfo) @@ -3078,9 +3138,9 @@ List getUpratingIndicesYears(List ids, List yearValuesDict = GetDictionaryUpratingIndexYearsValues(yearValuesString); + Dictionary yearValuesDict = GetDictionaryYearsValues(yearValuesString, InDepthDefinitions.SEPARATOR); - foreach (KeyValuePair entry in yearValuesDict) + foreach (KeyValuePair entry in yearValuesDict) { string year = entry.Key.ToString(); if (!ids.Contains(year)) @@ -3101,16 +3161,16 @@ List getUpratingIndicesYears(List ids, List /// YearValues string with the uprating indices values /// Dictionary with the year and the values for the uprating indices - internal static Dictionary GetDictionaryUpratingIndexYearsValues(string yearValuesString) + internal static Dictionary GetDictionaryYearsValues(string yearValuesString, char separator) { - Dictionary yearValues = new Dictionary(); - foreach (string yv in yearValuesString.Split(UpratingIndices.UpratingIndicesForm._separator)) + Dictionary yearValues = new Dictionary(); + foreach (string yv in yearValuesString.Split(separator)) { if (string.IsNullOrEmpty(yv)) continue; - int year; double value; - bool valEmpty = !EM_Helpers.TryConvertToDouble(yv.Substring(5), out value); - if (int.TryParse(yv.Substring(0, 4), out year) && (!valEmpty)) - yearValues.Add(year.ToString(), valEmpty ? -1 : value); + int year; + bool valEmpty = yv.Length<5; + if (int.TryParse(yv.Substring(0, 4), out year) && !valEmpty) + yearValues.Add(year.ToString(), yv.Substring(5)); } return yearValues; } diff --git a/EM_UI/VersionControl/Merging/MergeControl.cs b/EM_UI/VersionControl/Merging/MergeControl.cs index f448d6b..455f946 100644 --- a/EM_UI/VersionControl/Merging/MergeControl.cs +++ b/EM_UI/VersionControl/Merging/MergeControl.cs @@ -25,6 +25,32 @@ internal enum ChangeHandling { none = -1, accept = 0, reject = 1, mixed = 2 }; internal enum CellType { info = 1, value = 2, setting = 3 }; static internal CellType CellTypeFromString(string s) { switch (s) { case "info": return CellType.info; case "value": return CellType.value; default: return CellType.setting; } } + Color COLOUR_ACCEPT = Color.PaleGreen; + Color COLOUR_REJECT = Color.Pink; + Color COLOUR_CELLCHANGED = Color.Blue; + Color COLOUR_CONFLICTED = Color.DarkMagenta; + + List _columInfo = new List(); //columns are identically for both trees + List _nodeInfoLocal = null; //what the left tree needs to display: user interface's version + List _nodeInfoRemote = null; //what the right tree needs to display: version to be merged + List _levelInfo = null; //e.g. 'Policy', 'Function', 'Parameter' (also identically for both trees) + internal SubNodesSequenceInfo _sequenceInfo = null; //e.g. policy-order (only visualised in left tree) + internal bool _needUpdate = true; //_nodeInfoLoca, _nodeInfoRemote and _nodeInfo need to be modified to be back to the YearValues parameter (only once) + + short _isInUnboundLoad = 0; + + internal MergeControl() + { + InitializeComponent(); + + //provides that trees have the same width, irrelevant how large the control is drawn in the dialog + splitContainer.SplitterDistance = splitContainer.Width / 2; + + //for images which show whether a component was added/removed/changed and whether the user accepts/rejects the changes + BuildNodeImageLists(treeLocal); + BuildNodeImageLists(treeRemote); + } + internal class NodeInfo //information on a component (e.g. parameter) which is displayed as a node of the trees { internal NodeInfo(string ID, string parentID = "", List cellInfo = null, ChangeType changeType = ChangeType.none, ChangeHandling changeHandling = ChangeHandling.none) @@ -176,32 +202,6 @@ internal class UpratingYearsComparison } - Color COLOUR_ACCEPT = Color.PaleGreen; - Color COLOUR_REJECT = Color.Pink; - Color COLOUR_CELLCHANGED = Color.Blue; - Color COLOUR_CONFLICTED = Color.DarkMagenta; - - List _columInfo = new List(); //columns are identically for both trees - List _nodeInfoLocal = null; //what the left tree needs to display: user interface's version - List _nodeInfoRemote = null; //what the right tree needs to display: version to be merged - List _levelInfo = null; //e.g. 'Policy', 'Function', 'Parameter' (also identically for both trees) - internal SubNodesSequenceInfo _sequenceInfo = null; //e.g. policy-order (only visualised in left tree) - internal bool _needUpdate = true; //_nodeInfoLoca, _nodeInfoRemote and _nodeInfo need to be modified to be back to the YearValues parameter (only once) - - short _isInUnboundLoad = 0; - - internal MergeControl() - { - InitializeComponent(); - - //provides that trees have the same width, irrelevant how large the control is drawn in the dialog - splitContainer.SplitterDistance = splitContainer.Width / 2; - - //for images which show whether a component was added/removed/changed and whether the user accepts/rejects the changes - BuildNodeImageLists(treeLocal); - BuildNodeImageLists(treeRemote); - } - internal void SetInfo(List columnInfo, List nodeInfoLocal, List nodeInfoRemote, bool provideSequenceInfo) { _columInfo = columnInfo; @@ -886,23 +886,42 @@ internal void AcceptReject(bool accept, bool mustBeVisible, NodeInfo nodeInfo, C void AcceptRejectRange(bool accept, bool mustBeVisible, TreeList tree, TreeListNode topNode = null, string columnID = "") { - Cursor = Cursors.WaitCursor; - foreach (TreeListNode node in GetSubNodes(mustBeVisible, tree, topNode)) + List selectedNodes = new List() { topNode }; + // if you are right-clicking on a row, check if there are multiple selected rows. + if (topNode != null && tree.Selection != null) { - NodeInfo nodeInfo = GetNodeInfo(node); - if (nodeInfo == null || nodeInfo.changeType == ChangeType.none) - continue; - - if (nodeInfo.changeType == ChangeType.changed) + for (int i = 0; i < tree.Selection.Count; i++) { - foreach (CellInfo cellInfo in nodeInfo.cellInfo) - if (columnID == string.Empty || cellInfo.columnID == columnID) - AcceptReject(accept, mustBeVisible, nodeInfo, null, cellInfo); + // if the current node where you right-clicked is part of the selected nodes, apply to all selected nodes + if (tree.Selection[i] == topNode) + { + selectedNodes = new List(); + for (int j = 0; j < tree.Selection.Count; j++) + selectedNodes.Add(tree.Selection[j]); + break; + } } - else if (nodeInfo.changeType == ChangeType.added || nodeInfo.changeType == ChangeType.removed) + } + Cursor = Cursors.WaitCursor; + foreach (TreeListNode tNode in selectedNodes) + { + foreach (TreeListNode node in GetSubNodes(mustBeVisible, tree, tNode)) { - nodeInfo.changeHandling = accept ? ChangeHandling.accept : ChangeHandling.reject; - RefreshNode(nodeInfo.node); //for updating the accept-symbols and the colouring + NodeInfo nodeInfo = GetNodeInfo(node); + if (nodeInfo == null || nodeInfo.changeType == ChangeType.none) + continue; + + if (nodeInfo.changeType == ChangeType.changed) + { + foreach (CellInfo cellInfo in nodeInfo.cellInfo) + if (columnID == string.Empty || cellInfo.columnID == columnID) + AcceptReject(accept, mustBeVisible, nodeInfo, null, cellInfo); + } + else if (nodeInfo.changeType == ChangeType.added || nodeInfo.changeType == ChangeType.removed) + { + nodeInfo.changeHandling = accept ? ChangeHandling.accept : ChangeHandling.reject; + RefreshNode(nodeInfo.node); //for updating the accept-symbols and the colouring + } } } Cursor = Cursors.Default; @@ -1113,11 +1132,9 @@ internal void AcceptRejectOrder(bool accept, bool includeSubNodes, NodeInfo clic internal List GetNodeInfoLocal(string type = "none") { //_nodeInfoLocal needs to be updated to removed additional columns if uprating indices - if (type.Equals(MergeForm.UPRATING_INDICES)) - { + if (type.Equals(MergeForm.UPRATING_INDICES) || type.Equals(MergeForm.INDIRECT_TAXES) || type.Equals(MergeForm.EXTERNAL_STATISTICS)) getNodeInfoUprating(); - } return _nodeInfoLocal; } @@ -1126,12 +1143,9 @@ internal List GetNodeInfoLocal(string type = "none") { internal List GetNodeInfoRemote(string type = "none") { //_nodeInfoRemote needs to be updated to removed additional columns if uprating indices - if (type.Equals(MergeForm.UPRATING_INDICES)) - { + if (type.Equals(MergeForm.UPRATING_INDICES) || type.Equals(MergeForm.INDIRECT_TAXES) || type.Equals(MergeForm.EXTERNAL_STATISTICS)) getNodeInfoUprating(); - } - return _nodeInfoRemote; } @@ -1246,7 +1260,7 @@ internal Dictionary PopulateOtherFieldsDictiona { foreach (MergeControl.CellInfo cell in node.cellInfo) { - if (MergeForm.UPRATING_INDICES_COLUMNS.Contains(cell.columnID) && !cell.columnID.Equals(MergeForm.YEAR_VALUES)) + if (MergeForm.ALL_COLUMN_NAMES.Contains(cell.columnID) && !cell.columnID.Equals(MergeForm.YEAR_VALUES)) { string nodeColumnId = node.ID + "_" + cell.columnID; string nodeYearId = node.ID + "_" + cell.columnID; @@ -1265,9 +1279,9 @@ internal Dictionary PopulateOtherFieldsDictiona { foreach (MergeControl.CellInfo cell in node.cellInfo) { - if (MergeForm.UPRATING_INDICES_COLUMNS.Contains(cell.columnID) && !cell.columnID.Equals(MergeForm.YEAR_VALUES)) + string nodeYearId = node.ID + "_" + cell.columnID; + if (MergeForm.ALL_COLUMN_NAMES.Contains(cell.columnID) && !cell.columnID.Equals(MergeForm.YEAR_VALUES) && otherFieldsDict.ContainsKey(nodeYearId)) { - string nodeYearId = node.ID + "_" + cell.columnID; UpratingYearsComparison upratingYearsComparison = otherFieldsDict[nodeYearId]; upratingYearsComparison.valueRemote = cell.text; upratingYearsComparison.isChangedRemote = cell.isChanged; @@ -1381,7 +1395,7 @@ internal Dictionary PopulateUpratingYearsCompar { foreach (MergeControl.CellInfo cell in node.cellInfo) { - if (!MergeForm.UPRATING_INDICES_COLUMNS.Contains(cell.columnID)) + if (!MergeForm.ALL_COLUMN_NAMES.Contains(cell.columnID)) { string nodeYearId = node.ID + "_" + cell.columnID; UpratingYearsComparison upratingYearsComparison = new UpratingYearsComparison(); @@ -1404,7 +1418,7 @@ internal Dictionary PopulateUpratingYearsCompar { foreach (MergeControl.CellInfo cell in node.cellInfo) { - if (!MergeForm.UPRATING_INDICES_COLUMNS.Contains(cell.columnID)) + if (!MergeForm.ALL_COLUMN_NAMES.Contains(cell.columnID)) { string nodeYearId = node.ID + "_" + cell.columnID; UpratingYearsComparison upratingYearsComparison = dictUpratingYearsComparison[nodeYearId]; @@ -1623,7 +1637,7 @@ internal List changeColumnInfo(List _columInfo) foreach (ColumnInfo columnInfo in _columInfo) { string columnName = columnInfo.name; - if (MergeForm.UPRATING_INDICES_COLUMNS.Contains(columnName)) + if (MergeForm.ALL_COLUMN_NAMES.Contains(columnName)) { columnInfoNew.Add(columnInfo); } diff --git a/EM_UI/VersionControl/Merging/MergeForm.cs b/EM_UI/VersionControl/Merging/MergeForm.cs index b6afb48..20a836c 100644 --- a/EM_UI/VersionControl/Merging/MergeForm.cs +++ b/EM_UI/VersionControl/Merging/MergeForm.cs @@ -18,13 +18,15 @@ internal partial class MergeForm : MergeFormBase internal const string POLICY_SWITCHES = "POLICY SWITCHES"; internal const string CONDITIONAL_FORMATTING = "CONDITIONAL FORMATTING"; internal const string UPRATING_INDICES = "UPRATING_INDICES"; + internal const string INDIRECT_TAXES = "INDIRECT_TAXES"; + internal const string EXTERNAL_STATISTICS = "EXTERNAL_STATISTICS"; internal const string EXTENSIONS = "EXTENSIONS"; internal const string EXT_SWITCHES = "EXT_SWITCHES"; internal const string LOOK_GROUPS = "LOOK_GROUPS"; internal const string SEPARATOR = ""; internal const string YEAR_VALUES = "YearValues"; - public static List UPRATING_INDICES_COLUMNS = new List { "Description", "Reference", "YearValues", "Comment" }; + public static List ALL_COLUMN_NAMES = new List { "Description", "Reference", "YearValues", "Comment", "Category", "Source", "Destination", "TableName" }; const bool IMAGE_ACCEPT_LOADED = true; @@ -34,6 +36,8 @@ internal partial class MergeForm : MergeFormBase MergeControl _mcData = new MergeControl(); MergeControl _mcCondFormat = new MergeControl(); MergeControl _mcUpratingIndices = new MergeControl(); + MergeControl _mcIndirectTaxes = new MergeControl(); + MergeControl _mcExternalStatistics = new MergeControl(); MergeControl _mcExtensions = new MergeControl(); MergeControl _mcExtSwitches = new MergeControl(); MergeControl _mcLookGroups = new MergeControl(); @@ -51,6 +55,8 @@ internal MergeForm(MergeAdministrator mergeAdministrator) SetPositionMergeControl(_mcData, tabData); SetPositionMergeControl(_mcCondFormat, tabCondForm); SetPositionMergeControl(_mcUpratingIndices, tabUpratingIndices); + SetPositionMergeControl(_mcIndirectTaxes, tabIndirectTaxes); + SetPositionMergeControl(_mcExternalStatistics, tabExternalStatistics); SetPositionMergeControl(_mcExtensions, tabExtensions); SetPositionMergeControl(_mcExtSwitches, tabExtSwitches); SetPositionMergeControl(_mcLookGroups, tabLookGroups); @@ -60,7 +66,8 @@ internal MergeForm(MergeAdministrator mergeAdministrator) internal override bool HasDifferences() { return !_mcSystems.IsEmpty() || !_mcSpine.IsEmpty() || !_mcData.IsEmpty() || !_mcCondFormat.IsEmpty() || - !_mcUpratingIndices.IsEmpty() || !_mcExtensions.IsEmpty() || !_mcExtSwitches.IsEmpty() || !_mcLookGroups.IsEmpty() + !_mcUpratingIndices.IsEmpty() || !_mcIndirectTaxes.IsEmpty() || !_mcExternalStatistics.IsEmpty() || + !_mcExtensions.IsEmpty() || !_mcExtSwitches.IsEmpty() || !_mcLookGroups.IsEmpty() //|| picCountryNameChangedLocal.Visible || picCountryNameChangedRemote.Visible; //would prefer to use this over the conditions below, but obviously the dialog is not yet updated and visible is always false || txtNameLocal.Text != txtNameRemote.Text || chkCountryPrivateLocal.Checked != chkCountryPrivateRemote.Checked; } @@ -156,6 +163,8 @@ internal override MergeControl GetMergeControlByName(string mcName) case SPINE: return _mcSpine; case CONDITIONAL_FORMATTING: return _mcCondFormat; case UPRATING_INDICES: return _mcUpratingIndices; + case INDIRECT_TAXES: return _mcIndirectTaxes; + case EXTERNAL_STATISTICS: return _mcExternalStatistics; case EXTENSIONS: return _mcExtensions; case EXT_SWITCHES: return _mcExtSwitches; case LOOK_GROUPS: return _mcLookGroups; @@ -201,9 +210,11 @@ void MergeForm_Shown(object sender, System.EventArgs e) else if (!_mcData.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[2]; else if (!_mcCondFormat.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[3]; else if (!_mcUpratingIndices.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[4]; - else if (!_mcExtensions.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[5]; - else if (!_mcExtSwitches.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[6]; - else if (!_mcLookGroups.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[7]; + else if (!_mcIndirectTaxes.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[5]; + else if (!_mcExternalStatistics.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[6]; + else if (!_mcExtensions.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[7]; + else if (!_mcExtSwitches.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[8]; + else if (!_mcLookGroups.IsEmpty()) tabControl.SelectedTab = tabControl.TabPages[9]; else tabControl.SelectedTab = tabControl.TabPages[0]; } } diff --git a/EM_UI/VersionControl/Merging/MergeForm.designer.cs b/EM_UI/VersionControl/Merging/MergeForm.designer.cs index edc77f5..d27523e 100644 --- a/EM_UI/VersionControl/Merging/MergeForm.designer.cs +++ b/EM_UI/VersionControl/Merging/MergeForm.designer.cs @@ -55,6 +55,8 @@ private void InitializeComponent() this.tabData = new System.Windows.Forms.TabPage(); this.tabCondForm = new System.Windows.Forms.TabPage(); this.tabUpratingIndices = new System.Windows.Forms.TabPage(); + this.tabIndirectTaxes = new System.Windows.Forms.TabPage(); + this.tabExternalStatistics = new System.Windows.Forms.TabPage(); this.tabExtensions = new System.Windows.Forms.TabPage(); this.tabLookGroups = new System.Windows.Forms.TabPage(); this.tabExtSwitches = new System.Windows.Forms.TabPage(); @@ -304,6 +306,8 @@ private void InitializeComponent() this.tabControl.Controls.Add(this.tabData); this.tabControl.Controls.Add(this.tabCondForm); this.tabControl.Controls.Add(this.tabUpratingIndices); + this.tabControl.Controls.Add(this.tabIndirectTaxes); + this.tabControl.Controls.Add(this.tabExternalStatistics); this.tabControl.Controls.Add(this.tabExtensions); this.tabControl.Controls.Add(this.tabExtSwitches); this.tabControl.Controls.Add(this.tabLookGroups); @@ -363,6 +367,26 @@ private void InitializeComponent() this.tabUpratingIndices.Text = "Uprating Indices"; this.tabUpratingIndices.UseVisualStyleBackColor = true; // + // tabIndirectTaxes + // + this.tabIndirectTaxes.Location = new System.Drawing.Point(4, 25); + this.tabIndirectTaxes.Name = "tabIndirectTaxes"; + this.tabIndirectTaxes.Padding = new System.Windows.Forms.Padding(3); + this.tabIndirectTaxes.Size = new System.Drawing.Size(819, 421); + this.tabIndirectTaxes.TabIndex = 2; + this.tabIndirectTaxes.Text = "Indirect Taxes"; + this.tabIndirectTaxes.UseVisualStyleBackColor = true; + // + // tabExternalStatistics + // + this.tabExternalStatistics.Location = new System.Drawing.Point(4, 25); + this.tabExternalStatistics.Name = "tabExternalStatistics"; + this.tabExternalStatistics.Padding = new System.Windows.Forms.Padding(3); + this.tabExternalStatistics.Size = new System.Drawing.Size(819, 421); + this.tabExternalStatistics.TabIndex = 2; + this.tabExternalStatistics.Text = "External Statistics"; + this.tabExternalStatistics.UseVisualStyleBackColor = true; + // // tabExtensions // this.tabExtensions.Location = new System.Drawing.Point(4, 25); @@ -507,6 +531,8 @@ private void InitializeComponent() private System.Windows.Forms.TabPage tabSpine; private System.Windows.Forms.TabPage tabCondForm; private System.Windows.Forms.TabPage tabUpratingIndices; + private System.Windows.Forms.TabPage tabIndirectTaxes; + private System.Windows.Forms.TabPage tabExternalStatistics; private System.Windows.Forms.TabPage tabExtensions; private System.Windows.Forms.TabPage tabLookGroups; private System.Windows.Forms.TabPage tabExtSwitches; diff --git a/EM_UI/packages.config b/EM_UI/packages.config index 9625c50..2fa7850 100644 --- a/EM_UI/packages.config +++ b/EM_UI/packages.config @@ -2,21 +2,39 @@ + + + + + + + + + + + + + + + + + + @@ -26,11 +44,15 @@ + + + + \ No newline at end of file diff --git a/EM_executable/EM_Executable/ControlAndInfo/Control_Run.cs b/EM_executable/EM_Executable/ControlAndInfo/Control_Run.cs index 16620ed..fd71dc2 100644 --- a/EM_executable/EM_Executable/ControlAndInfo/Control_Run.cs +++ b/EM_executable/EM_Executable/ControlAndInfo/Control_Run.cs @@ -72,6 +72,20 @@ internal bool Run() // MAKE INDIRECT TAXES AVAILABLE AS GLOBAL VARIABLES, 1st step (same procedure as for uprating factors) foreach (var indTax in infoStore.country.indTaxes) infoStore.operandAdmin.RegisterVar(indTax.Key.ToLower(), "IndirectTaxTable", null, false, true, false, true); + // MAKE EXTERNAL MACRO AMOUNTS & NUMBERS AVAILABLE AS GLOBAL VARIABLES, 1st step (same procedure as for uprating factors) + foreach (var extStat in infoStore.country.extStats) + { + if (extStat.Value.IsAggregate()) + { + infoStore.operandAdmin.RegisterVar(DefVarName.EXSTAT_AMOUNT_CONSTANT_PREFIX + extStat.Key.ToLower(), "ExternalStatisticsTable", null, false, true, false, true); + infoStore.operandAdmin.RegisterVar(DefVarName.EXSTAT_NUMBER_CONSTANT_PREFIX + extStat.Key.ToLower(), "ExternalStatisticsTable", null, false, true, false, true); + } + else + { + infoStore.operandAdmin.RegisterVar(DefVarName.EXSTAT_INDICATOR_CONSTANT_PREFIX + extStat.Key.ToLower(), "ExternalStatisticsTable", null, false, true, false, true); + } + } + // IF APPROPRIATE, READ ADD-ONS // note: read here to have extension switches (AddOn_ExtensionSwitch) at disposal, as they overwrite any other switches // even those set via run-tool, justification: the add-on creator probably knows why she wants sth on or off @@ -174,6 +188,23 @@ internal bool Run() foreach (var indTax in infoStore.country.indTaxes) infoStore.hhAdmin.GlobalSetVar(infoStore.operandAdmin.GetIndexInPersonVarList(indTax.Key.ToLower()), indTax.Value); + // MAKE EXTERNAL MACRO AMOUNTS & NUMBERS AVAILABLE AS GLOBAL VARIABLES, 2nd step: fill with values + foreach (var extStat in infoStore.country.extStats) + { + if (extStat.Value.IsAggregate()) + { + if (extStat.Value.GetNumber(infoStore.country.sys.year, out double num)) + infoStore.hhAdmin.GlobalSetVar(infoStore.operandAdmin.GetIndexInPersonVarList(DefVarName.EXSTAT_NUMBER_CONSTANT_PREFIX + extStat.Key.ToLower()), num); + if (extStat.Value.GetAmount(infoStore.country.sys.year, out double am)) + infoStore.hhAdmin.GlobalSetVar(infoStore.operandAdmin.GetIndexInPersonVarList(DefVarName.EXSTAT_AMOUNT_CONSTANT_PREFIX + extStat.Key.ToLower()), am); + } + else + { + if (extStat.Value.GetAmount(infoStore.country.sys.year, out double am)) + infoStore.hhAdmin.GlobalSetVar(infoStore.operandAdmin.GetIndexInPersonVarList(DefVarName.EXSTAT_INDICATOR_CONSTANT_PREFIX + extStat.Key.ToLower()), am); + } + } + foreach (FunBase fun in infoStore.spine.Values) // before reading data the HH.personVarList does not exist and var-parameters fun.ReplaceVarNameByIndex(); // cannot know their index inthere, now the index is available and must be spread diff --git a/EM_executable/EM_Executable/EM_Executable.csproj b/EM_executable/EM_Executable/EM_Executable.csproj index e3d97da..5255068 100644 --- a/EM_executable/EM_Executable/EM_Executable.csproj +++ b/EM_executable/EM_Executable/EM_Executable.csproj @@ -25,7 +25,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/EM_executable/EM_Executable/Functions/FunDefIL.cs b/EM_executable/EM_Executable/Functions/FunDefIL.cs index 44f2e3e..ec90179 100644 --- a/EM_executable/EM_Executable/Functions/FunDefIL.cs +++ b/EM_executable/EM_Executable/Functions/FunDefIL.cs @@ -17,6 +17,12 @@ internal override void ProvideIndexInfo() foreach (var part in GetPlaceholderPar()) { string varILName = part.Key; + if (!CheckCyclical(varILName, parName.xmlValue)) + { + infoStore.communicator.ReportError(new Communicator.ErrorInfo() + { isWarning = false, message = $"{description.Get()}: Cyclical reference found: {varILName}!" }); + return; + } content.Add(varILName, GetAddMod(part.Value)); // note that vars/ILs are 'registered' (i.e.a.o. checked) in ParIL.CheckAndPrepare (i.e. on 1st use) } @@ -68,5 +74,18 @@ protected override void PreprocessParameters() // // this differnt behaviour can be justified, because this is a different parameter, I guess ... } + + bool CheckCyclical(string il, string parent) + { + if (il.ToLower().Equals(parent.ToLower())) return false; // found cyclical reference! + List matchingIls = infoStore.operandAdmin.GetMatchingIL(il); + if (matchingIls.Count == 0) return true; + foreach (string ilVar in infoStore.operandAdmin.GetILContent(matchingIls[0]).Keys) + { + if (!CheckCyclical(ilVar, parent)) return false; // check recursively + } + return true; + } + } } diff --git a/EM_executable/EM_Executable/Functions/FunDefOutput_Work.cs b/EM_executable/EM_Executable/Functions/FunDefOutput_Work.cs index cc899d3..406a502 100644 --- a/EM_executable/EM_Executable/Functions/FunDefOutput_Work.cs +++ b/EM_executable/EM_Executable/Functions/FunDefOutput_Work.cs @@ -30,42 +30,44 @@ protected override void DoFunWork() try { - if (infoStore.output == null) infoStore.output = new Dictionary(); - if (infoStore.output.ContainsKey(fileName)) infoStore.output[fileName] = new StringBuilder(); - else infoStore.output.Add(fileName, new StringBuilder()); - string headerLine = ProcessHeaders(); // keep this line: we will need to add it again if the output is encrypted - // write header row - if (!append) infoStore.output[fileName].AppendLine(headerLine); - - // if ForceSequentialRun or ForceSequentialOutput, write each household in order to save on memory usage - if (infoStore.runConfig.forceSequentialRun || infoStore.runConfig.forceSequentialOutput) + // if the output is going to be returned in memory, or needs to be encrypted, build it in memory first! + if (infoStore.runConfig.returnOutputInMemory || !string.IsNullOrEmpty(infoStore.runConfig.dataPassword)) { - foreach (HH hh in infoStore.hhAdmin.hhs) + if (infoStore.output == null) infoStore.output = new Dictionary(); + if (infoStore.output.ContainsKey(fileName)) infoStore.output[fileName] = new StringBuilder(); + else infoStore.output.Add(fileName, new StringBuilder()); + string headerLine = ProcessHeaders(); // keep this line: we will need to add it again if the output is encrypted + // write header row + if (!append) infoStore.output[fileName].AppendLine(headerLine); + + // if ForceSequentialRun or ForceSequentialOutput, write each household in order to save on memory usage + if (infoStore.runConfig.forceSequentialRun || infoStore.runConfig.forceSequentialOutput) { - StringBuilder hhOutput = ProcessHHoutput(hh, convFactor); - if (hhOutput.Length > 0) infoStore.output[fileName].Append(hhOutput); + foreach (HH hh in infoStore.hhAdmin.hhs) + { + StringBuilder hhOutput = ProcessHHoutput(hh, convFactor); + if (hhOutput.Length > 0) infoStore.output[fileName].Append(hhOutput); + } } - } - else - { - // else first prepare all HH in parallel - ConcurrentDictionary allOutput = new ConcurrentDictionary(); - Parallel.ForEach(infoStore.hhAdmin.hhs, hh => + else { - StringBuilder hhOutput = ProcessHHoutput(hh, convFactor); - if (hhOutput.Length == 0) return; - if (!allOutput.TryAdd(hh, hhOutput)) - throw new Exception($"Error preparing multi-threaded output!"); // this should never happen! (unless a HH is duplicate, which is impossible) - }); - // and then write them to file in sequence - foreach (HH hh in infoStore.hhAdmin.hhs) - if (allOutput.ContainsKey(hh)) infoStore.output[fileName].Append(allOutput[hh]); - } - + // else first prepare all HH in parallel + ConcurrentDictionary allOutput = new ConcurrentDictionary(); + Parallel.ForEach(infoStore.hhAdmin.hhs, hh => + { + StringBuilder hhOutput = ProcessHHoutput(hh, convFactor); + if (hhOutput.Length == 0) return; + if (!allOutput.TryAdd(hh, hhOutput)) + throw new Exception($"Error preparing multi-threaded output!"); // this should never happen! (unless a HH is duplicate, which is impossible) + }); + // and then write them to file in sequence + foreach (HH hh in infoStore.hhAdmin.hhs) + if (allOutput.ContainsKey(hh)) infoStore.output[fileName].Append(allOutput[hh]); + } - if (!infoStore.runConfig.returnOutputInMemory) // if not returning the output in memory, write it on disk - { - if (!string.IsNullOrEmpty(infoStore.runConfig.dataPassword)) // if required, encrypt before writting to disk + // if not returning the output in memory, write it on disk. + // * This should only happen if we need to encrypt the data. * + if (!infoStore.runConfig.returnOutputInMemory) { // if we need to append, then we need to read & decrypt the existing file first! string existingContent = string.Empty; @@ -89,12 +91,35 @@ protected override void DoFunWork() fileWriter.Write(content, 0, content.Length); } } - else + } + else // contains duplicate code, but it is the only way to make it really efficient by skipping the memory altogether and writting straight to the disk! + { + using (StreamWriter streamWriter = new StreamWriter(fileName, append, new UTF8Encoding(false))) { - // For not encrypted, simply write or append to the file - using (StreamWriter streamWriter = new StreamWriter(fileName, append, new UTF8Encoding(false))) + // If required, write the headers + if (!append) streamWriter.WriteLine(ProcessHeaders()); + // If sequential, calculate and write each household in turn + if (infoStore.runConfig.forceSequentialRun || infoStore.runConfig.forceSequentialOutput) { - streamWriter.Write(infoStore.output[fileName].ToString()); + foreach (HH hh in infoStore.hhAdmin.hhs) + { + StringBuilder hhOutput = ProcessHHoutput(hh, convFactor); + if (hhOutput.Length > 0) streamWriter.Write(hhOutput.ToString()); + } + } + else // else first prepare all HH in parallel + { + ConcurrentDictionary allOutput = new ConcurrentDictionary(); + Parallel.ForEach(infoStore.hhAdmin.hhs, hh => + { + StringBuilder hhOutput = ProcessHHoutput(hh, convFactor); + if (hhOutput.Length == 0) return; + if (!allOutput.TryAdd(hh, hhOutput)) + throw new Exception($"Error preparing multi-threaded output!"); // this should never happen! (unless a HH is duplicate, which is impossible) + }); + // and then write them to file in sequence + foreach (HH hh in infoStore.hhAdmin.hhs) + if (allOutput.ContainsKey(hh)) streamWriter.Write(allOutput[hh].ToString()); } } } diff --git a/EM_executable/EM_Executable/Functions/FunIlArithOp.cs b/EM_executable/EM_Executable/Functions/FunIlArithOp.cs index b0f2383..0c65cf0 100644 --- a/EM_executable/EM_Executable/Functions/FunIlArithOp.cs +++ b/EM_executable/EM_Executable/Functions/FunIlArithOp.cs @@ -99,7 +99,7 @@ private bool CloneILStructure(string ilName, string outIlName) description: description, isMonetary: forceMonetaryOutput || infoStore.operandAdmin.GetIsMonetary(varIL.varSpec.name), isGlobal: infoStore.operandAdmin.GetIsGlobal(varIL.varSpec.name), - isWriteable: false, // cannot be used as output variable + isWriteable: true, setInitialised: true, warnForDuplicates: warnIfDuplicateDefinition); if (!infoStore.operandAdmin.Exists(outVarName)) return false; // registration failed diff --git a/EM_executable/EM_Executable/Functions/FunStore.cs b/EM_executable/EM_Executable/Functions/FunStore.cs index 5b1cc54..d9ae195 100644 --- a/EM_executable/EM_Executable/Functions/FunStore.cs +++ b/EM_executable/EM_Executable/Functions/FunStore.cs @@ -26,6 +26,8 @@ internal enum STORETYPE { FIX, LOOP, UNITLOOP } internal STORETYPE storeType = S internal List vars = new List(); private int varIndexLoopCounter = NOTAP; private int varIndexCurElig = NOTAP; // only relevant for UnitLoop + List varGroup = new List(); + List ilGroup= new List(); private Dictionary ilLevels = new Dictionary(); private Dictionary varLevels = new Dictionary(); @@ -40,6 +42,7 @@ protected override void PrepareNonCommonPar() // level parameters are only relevant for UnitLoops (they are prepared here and "consumed" in RegisterUnitLoopOperands) PrepareLevelPar(out bool hasLevelPar); + PrepareVarILPar(); if (hasLevelPar && storeType != STORETYPE.UNITLOOP) infoStore.communicator.ReportError(new Communicator.ErrorInfo() { isWarning = true, message = $"{description.Get()}: Level parameters can only be used with UnitLoop (parameters are ignored)" }); @@ -72,6 +75,49 @@ protected override void PrepareNonCommonPar() // } } + private void PrepareVarILPar() + { + // for each variable or IL that matches the pattern (note: "for each" refers to what's currenlty in the operandAdmin's + // list of operands, which perfectly takes into account that DefOutput can run in spine, but usually comes last) + // create an "artifical" ParIL/ParVar-parameter, which needs to be administrated by the fun, + // e.g. take care for calling CheckAndPrepare, ReplaceVarNameByIndex, ... + foreach (ParBase pattern in GetNonUniquePar(DefPar.DefOutput.VarGroup)) + { + foreach (string outName in infoStore.operandAdmin.GetMatchingVar(pattern.xmlValue)) + AddToVarILGroup(outName, pattern.description); + + // check all variables in the input-data if they match the pattern, and if yes, look if there is an appropriate definition in the var-file + // we may want to add sth like: if (infoStore.runConfig.ReadInputVariablesOnlyUsedInOutputVargroup) + foreach (string potOutName in infoStore.allDataVariables) + { + if (infoStore.operandAdmin.indexVarConfig.ContainsKey(potOutName) && + EM_Helpers.DoesValueMatchPattern(pattern.xmlValue, potOutName)) + AddToVarILGroup(potOutName, pattern.description); + } + } + foreach (ParBase pattern in GetNonUniquePar(DefPar.DefOutput.ILGroup)) + foreach (string outName in infoStore.operandAdmin.GetMatchingIL(pattern.xmlValue)) + AddToVarILGroup(outName, pattern.description, true); + } + + private void AddToVarILGroup(string outName, Description description, bool isIL = false) + { + if (!isIL) + { + if (varGroup.Exists(x => x.xmlValue == outName)) return; + ParVar var = new ParVar(infoStore) { description = description, xmlValue = outName }; + var.CheckAndPrepare(this); + varGroup.Add(var); + } + else + { + if (ilGroup.Exists(x => x.xmlValue == outName)) return; + ParIL il = new ParIL(infoStore) { description = description, xmlValue = outName }; + il.CheckAndPrepare(this); + ilGroup.Add(il); + } + } + private bool GetFromTo(ParBase parFromTo, out List iterations) // not activated (see above) { iterations = new List(); string from = string.Empty, to = string.Empty; @@ -184,6 +230,10 @@ internal void RegisterOperands(int iteration = NOTAP) // note that the iteration RegisterVar(par.name, par.description, iteration); foreach (ParIL par in GetNonUniquePar(DefPar.Store.IL)) RegisterILAndContent(par, iteration); + foreach (ParVar par in varGroup) + RegisterVar(par.name, par.description, iteration); + foreach (ParIL par in ilGroup) + RegisterILAndContent(par, iteration); } // note that (different from RegisterOperands above) there is only the internal call (for the "running" variables) diff --git a/EM_executable/EM_Executable/Functions/FunUprate.cs b/EM_executable/EM_Executable/Functions/FunUprate.cs index c9f103b..e8552a9 100644 --- a/EM_executable/EM_Executable/Functions/FunUprate.cs +++ b/EM_executable/EM_Executable/Functions/FunUprate.cs @@ -11,6 +11,7 @@ internal FunUprate(InfoStore infoStore) : base(infoStore) { } private class UpVar { + internal Description description; internal const double ALLYEARS = double.MaxValue; internal VarSpec varSpec = null; internal ParCond parCondition = null; @@ -34,7 +35,7 @@ private class AggUpVar private List upVars = new List(); private List aggUpVars = new List(); - private Dictionary> upRegExp = new Dictionary>(); // key: pattern, value: factor(name) + private List upRegExp = new List(); // key: pattern, value: factor(name) private Dictionary defaultFactor = new Dictionary() { { UpVar.ALLYEARS, 1.0 } }; private bool warnIfNoFactor = true; private bool warnIfNonMonetary = true; @@ -94,16 +95,18 @@ protected override void PrepareNonCommonPar() { string upVarName = parMain.description.GetParName(); // get the name of the variable to uprate (e.g. yem) // check for double uprating, but take care of conditions, e.g. twice yem-uprating without condition -> warning, yem-uprating different for men and women -> ok - bool exists = ExistsUpVar(upVarName, out bool conditioned); - if (exists && (!conditioned || parCond == null)) infoStore.communicator.ReportError(new Communicator.ErrorInfo() - { isWarning = true, message = $"{parMain.description.Get()}: double uprating of variable {upVarName}" }); + string condition = parCond == null ? "" : parCond.xmlValue; + bool exists = ExistsUpVar(upVarName, condition, out string reason); + if (exists) infoStore.communicator.ReportError(new Communicator.ErrorInfo() + { isWarning = true, message = $"{parMain.description.Get()}: {reason}" }); Dictionary upFactors = GetFactors(internalFactorDefs, parMain); upVars.Add(new UpVar() { varSpec = new VarSpec() { name = upVarName }, factors = upFactors, - parCondition = parCond + parCondition = parCond, + description = parMain.description }); // the main purpose of this registration is to ensure the variable exists (an error is issued if not) @@ -131,7 +134,8 @@ where upVars.IndexOf(cuv) > upVars.IndexOf(condUpVar) && cuv.varSpec.name.ToLowe ParVar parName = GetUniqueGroupPar(DefPar.Uprate.AggVar_Name, group); if (parName == null) continue; // error is issued by general checking - if (ExistsUpVar(parName.name, out bool dummy)) infoStore.communicator.ReportError(new Communicator.ErrorInfo() + bool exists = ExistsUpVar(parName.name, "", out string _); + if (exists) infoStore.communicator.ReportError(new Communicator.ErrorInfo() { isWarning = true, message = $"{parName.description.Get()}: double uprating of variable {parName.name} (aggregate and normally)" }); ParNumber parTol = GetUniqueGroupPar(DefPar.Uprate.AggVar_Tolerance, group); @@ -148,10 +152,11 @@ where upVars.IndexOf(cuv) > upVars.IndexOf(condUpVar) && cuv.varSpec.name.ToLowe // (3) VARIABLES DEFINED BY REGULAR EXPRESSION (e.g. for updating expenditure variables) foreach (var group in GetParGroups(DefPar.Uprate.GROUP_REGEXP).Values) { + ParCond parCond = GetUniqueGroupPar(DefPar.Uprate.RegExp_Condition, group); ParBase parDef = GetUniqueGroupPar(DefPar.Uprate.RegExp_Def, group); ParBase parFactor = GetUniqueGroupPar(DefPar.Uprate.RegExp_Factor, group); if (parDef == null || parFactor == null) continue; - upRegExp.Add(parDef.xmlValue, GetFactors(internalFactorDefs, parFactor)); + upRegExp.Add(new UpVar() { varSpec = new VarSpec() { name = parDef.xmlValue }, factors = GetFactors(internalFactorDefs, parFactor), parCondition = parCond, description = parDef.description }); } // get default factor ... @@ -173,13 +178,22 @@ where upVars.IndexOf(cuv) > upVars.IndexOf(condUpVar) && cuv.varSpec.name.ToLowe internal override void ReplaceVarNameByIndex() { // add the variables defined by regular expression (e.g. expenditure variables) - foreach (var regExp in upRegExp) + foreach (UpVar regExp in upRegExp) { - foreach (string matchVar in infoStore.operandAdmin.GetMatchingVar(pattern: regExp.Key, regExpr: true)) + foreach (string matchVar in infoStore.operandAdmin.GetMatchingVar(pattern: regExp.varSpec.name, regExpr: true)) { - if (ExistsUpVar(matchVar, out bool dummy)) continue; // do not add if already otherwise uprated - if (!infoStore.operandAdmin.GetVarsToUprate().Contains(matchVar)) continue; // only uprate monetary variables - upVars.Add(new UpVar() { varSpec = new VarSpec() { name = matchVar }, factors = regExp.Value }); + // if it exists: as non-conditioned, or this RegExp is non-conditioned, or this specific condition already exists + string condition = regExp.parCondition == null ? "" : regExp.parCondition.xmlValue; + bool exists = ExistsUpVar(matchVar, condition, out string reason); + if (exists) + { + infoStore.communicator.ReportError(new Communicator.ErrorInfo() { + isWarning = true, + message = $"{regExp.description.Get()}:'{reason} This factor will be ignored.'" + }); + continue; // do not add if already otherwise uprated and this is not a conditioned uprate + } + upVars.Add(new UpVar() { varSpec = new VarSpec() { name = matchVar }, factors = regExp.factors, parCondition = regExp.parCondition }); } } @@ -211,7 +225,7 @@ internal override void ReplaceVarNameByIndex() string noFac = string.Empty; foreach (string v in infoStore.operandAdmin.GetVarsToUprate()) { - if (ExistsUpVar(v, out bool dummy)) continue; + if (ExistsUpVar(v, "", out string _)) continue; if ((from auv in aggUpVars where auv.varSpec.name.ToLower() == v.ToLower() select auv).Count() > 0) continue; upVars.Add(new UpVar() { varSpec = new VarSpec() { name = v }, factors = defaultFactor }); if (warnIfNoFactor) noFac += v + ", "; @@ -268,15 +282,45 @@ private void CheckForNonMon() }); } + List failed = new List(); + List dble = new List(); + List done = new List(); // uprating "normal" variables foreach (UpVar uv in upVars) { if (uv.parCondition == null || // either there is no condition or the condition is fulfilled uv.parCondition.GetPersonValue(hh, tu[0])) + { hh.SetPersonValue(hh.GetPersonValue(uv.varSpec.index, tu[0].indexInHH) * uv.GetFactor(isDBYearVarUsed ? hh.GetPersonValue(indDBYearVar, tu[0].indexInHH) : UpVar.ALLYEARS), uv.varSpec.index, tu[0].indexInHH); + if (!done.Contains(uv.varSpec.name)) done.Add(uv.varSpec.name); + else dble.Add(uv.varSpec.name); + if (failed.Contains(uv.varSpec.name)) failed.Remove(uv.varSpec.name); + } + else + { + if (!failed.Contains(uv.varSpec.name) && !done.Contains(uv.varSpec.name)) failed.Add(uv.varSpec.name); + } + } +/* if (failed.Count > 0) + { + infoStore.communicator.ReportError(new Communicator.ErrorInfo() + { + isWarning = true, + runTimeErrorId = description.funID, + message = $"{description.Get()}: idperson {infoStore.GetIDPerson(hh, tu[0].indexInHH)}: the following var(s) were not uprated because they didn't match any of the conditions: {string.Join(", ", failed)}" + }); + } + if (dble.Count > 0) + { + infoStore.communicator.ReportError(new Communicator.ErrorInfo() + { + isWarning = true, + runTimeErrorId = description.funID, + message = $"{description.Get()}: idperson {infoStore.GetIDPerson(hh, tu[0].indexInHH)}: the following var(s) were uprated more than once because they matched multiple conditions: {string.Join(", ", dble)}" + }); } - // 2nd step of uprating aggregates: build the factor of each aggregate variable as +*/ // 2nd step of uprating aggregates: build the factor of each aggregate variable as // factor_part1 * share_part1 + ... + factor_partN * share_partN = // = (part1_new / part1_old) * (part1_old / sum_parts_old) + ... + (partN_new / partN_old) * (partN_old / sum_parts_old) foreach (AggUpVar auv in aggUpVars) @@ -385,12 +429,34 @@ private Dictionary GetInternalFactorDefs() return facDefs; } - private bool ExistsUpVar(string varName, out bool conditioned) + private bool ExistsUpVar(string varName, string varCondition, out string description) { - conditioned = false; bool exists = false; + description = string.Empty; foreach (var uv in upVars) - if (uv.varSpec.name.ToLower() == varName.ToLower()) { exists = true; conditioned = uv.parCondition != null; } - return exists; + { + if (uv.varSpec.name.ToLower() == varName.ToLower()) + { + string condition = (uv.parCondition != null) ? uv.parCondition.xmlValue : ""; + string position = uv.description.pol.order + "." + uv.description.fun.order + "." + uv.description.par.order; + + if (string.IsNullOrEmpty(condition)) + { + description = $"Variable '{varName}' is already uprated in {position} without a condition."; + return true; + } + if (string.IsNullOrEmpty(varCondition)) + { + description = $"Variable '{varName}' is already uprated in {position} with conditions. You cannot uprate wihout a condition."; + return true; + } + if (condition == varCondition) + { + description = $"Variable '{varName}' is already uprated in {position} with the same condition."; + return true; + } + } + } + return false; } } } diff --git a/EM_executable/EM_Transformer/EM2/EM2Country_Def.cs b/EM_executable/EM_Transformer/EM2/EM2Country_Def.cs index 4a9aa88..b0fec35 100644 --- a/EM_executable/EM_Transformer/EM2/EM2Country_Def.cs +++ b/EM_executable/EM_Transformer/EM2/EM2Country_Def.cs @@ -43,6 +43,11 @@ public class Content public Dictionary indTax = new Dictionary(); public List> indTaxVal = new List>(); + // external statistics properties: similar structure as uprating indices, but with extra dict for numbers + public Dictionary exStat = new Dictionary(); + public List> exStatVal = new List>(); + public List> exStatNum = new List>(); + // look groups public Dictionary lookGroup = new Dictionary(); public List> lookGroupPol = new List>(); diff --git a/EM_executable/EM_Transformer/EM2/EM2Country_Read.cs b/EM_executable/EM_Transformer/EM2/EM2Country_Read.cs index f7760eb..ddddca1 100644 --- a/EM_executable/EM_Transformer/EM2/EM2Country_Read.cs +++ b/EM_executable/EM_Transformer/EM2/EM2Country_Read.cs @@ -204,6 +204,18 @@ public static Content Read(string fileName, out List errors) upiReader.Close(); content.upInd.Add(upi.id, upi); } + // *** READ EXTERNAL STATISTICS *** + else if (mainReader.Name == EM2TAGS.EXSTAT) + { + XmlReader xsiReader = mainReader.ReadSubtree(); xsiReader.ReadToDescendant(EM2TAGS.ID); + EM2Item xs = new EM2Item(); + do + { + if (xsiReader.NodeType == XmlNodeType.Element) ReadProperty(xsiReader, ref xs); + } while (xsiReader.Read()); + xsiReader.Close(); + content.exStat.Add(xs.id, xs); + } // *** READ LOOK GROUPS *** else if (mainReader.Name == EM2TAGS.LOOKGROUP) { @@ -350,7 +362,7 @@ void ReadProperty(XmlReader reader, ref EM2Item item) // helping function: see u { case EM2TAGS.ID: item.id = reader.ReadInnerXml(); break; case EM2TAGS.NAME: - case EM2TAGS.REFERENCE: // uprating-factor-name is for some reason called reference + case EM2TAGS.REFERENCE: // uprating-factor-name is for some reason called reference (same for external statistics) item.name = reader.ReadInnerXml(); break; default: item.properties.Add(reader.Name, reader.ReadInnerXml()); break; } diff --git a/EM_executable/EM_Transformer/EM2/EM2TAGS.cs b/EM_executable/EM_Transformer/EM2/EM2TAGS.cs index 66347ae..d6a6c79 100644 --- a/EM_executable/EM_Transformer/EM2/EM2TAGS.cs +++ b/EM_executable/EM_Transformer/EM2/EM2TAGS.cs @@ -24,6 +24,7 @@ public class EM2TAGS internal const string ORDER = "Order"; internal const string SWITCH = "Switch"; internal const string UPINDEX = "UpratingIndex"; + internal const string EXSTAT = "ExternalStatistic"; internal const string REFERENCE = "Reference"; internal const string COUNTRY_ID = "CountryID"; internal const string EXCHANGE_RATE_EURO = "ExchangeRateEuro"; diff --git a/EM_executable/EM_Transformer/EM23Adapt/EM23Adapt_YearValues.cs b/EM_executable/EM_Transformer/EM23Adapt/EM23Adapt_YearValues.cs index b2ae3b7..c65e697 100644 --- a/EM_executable/EM_Transformer/EM23Adapt/EM23Adapt_YearValues.cs +++ b/EM_executable/EM_Transformer/EM23Adapt/EM23Adapt_YearValues.cs @@ -4,7 +4,8 @@ namespace EM_Transformer { public partial class EM23Adapt { - // put year-values from string (2006|102.49°2007|104.93°2008|109.83°2009...) into own elements + // Put year-values from string (2006|102.49°2007|104.93°2008|109.83°2009...) into own elements + // Note: This function supports multiple tables: uprating factors, inderect taxes private void AdaptYearValues(EM2Item em2, List> em3, string ID) { foreach (var val in em2.properties) @@ -12,6 +13,7 @@ private void AdaptYearValues(EM2Item em2, List> em3, if (val.Key != EM2TAGS.YEAR_VALUES) continue; foreach (string yearValPair in val.Value.Split('°')) { + if (string.IsNullOrEmpty(yearValPair)) continue; string[] yearVal = yearValPair.Split('|'); em3.Add(new Dictionary() { @@ -23,5 +25,40 @@ private void AdaptYearValues(EM2Item em2, List> em3, } em2.properties.Remove(EM2TAGS.YEAR_VALUES); // after putting into own elements, remove the string } + + // Put year-values from string (2006|102.49°2007|104.93°2008|109.83°2009...) into own elements + // Note: This function supports external statistics + private void AdaptYearValuesExStat(EM2Item em2, List> em3) + { + foreach (var val in em2.properties) + { + if (val.Key != EM2TAGS.YEAR_VALUES) continue; + foreach (string yearValPair in val.Value.Split('°')) + { + string[] yearVal = yearValPair.Split('|'); + if (yearVal.Length>2) // if this is one of the ils, we need to add amounts, numbers and levels + { + em3.Add(new Dictionary() + { + { EM_XmlHandler.TAGS.EXSTAT_ID, em2.id }, + { EM_XmlHandler.TAGS.YEAR, yearVal[0] }, + { EM_XmlHandler.TAGS.VALUE, yearVal[1] }, + { EM_XmlHandler.TAGS.NUMBER, yearVal[2] }, + { EM_XmlHandler.TAGS.LEVEL, yearVal[3] } + }); + } + else // else if this is distributional just create the amounts entry + { + em3.Add(new Dictionary() + { + { EM_XmlHandler.TAGS.EXSTAT_ID, em2.id }, + { EM_XmlHandler.TAGS.YEAR, yearVal[0] }, + { EM_XmlHandler.TAGS.VALUE, yearVal[1] } + }); + } + } + } + em2.properties.Remove(EM2TAGS.YEAR_VALUES); // after putting into own elements, remove the string + } } } diff --git a/EM_executable/EM_Transformer/EM23Adapt/_EM23Adapt_Country.cs b/EM_executable/EM_Transformer/EM23Adapt/_EM23Adapt_Country.cs index 7b852ea..bbe0e60 100644 --- a/EM_executable/EM_Transformer/EM23Adapt/_EM23Adapt_Country.cs +++ b/EM_executable/EM_Transformer/EM23Adapt/_EM23Adapt_Country.cs @@ -92,6 +92,12 @@ internal void AdaptCountry(EM2Country.Content ctryContent, EM2Data.Content dataC AdaptYearValues(indTax.Value, ctryContent.indTaxVal, EM_XmlHandler.TAGS.INDTAX_ID); // put year-values in own elements (see above) } + // *** E X S T E R N A L S T A T I S T I C S *** + foreach (var exStat in ctryContent.exStat) + { + AdaptYearValuesExStat(exStat.Value, ctryContent.exStatVal); // put year-values in own elements (see comment in function) + } + if (dataContent == null) return; // BREAK HERE FOR ADD-ONS !!! the rest only concerns countries //--------------------------------------------------------------------------------------- diff --git a/EM_executable/EM_Transformer/EM3/EM3Country_Write.cs b/EM_executable/EM_Transformer/EM3/EM3Country_Write.cs index f3e21b9..8ec41fa 100644 --- a/EM_executable/EM_Transformer/EM3/EM3Country_Write.cs +++ b/EM_executable/EM_Transformer/EM3/EM3Country_Write.cs @@ -101,6 +101,21 @@ public static bool Write(EM2Country.Content ctryContent, EM2Data.Content dataCon } writer.WriteEndElement(); + // EXTERNAL STATISTICS - PROPERTIES (name, description, ...) + writer.WriteStartElement(TAGS.Enclosure(TAGS.EXSTAT)); + foreach (var exStat in ctryContent.exStat.Values) WriteItem(TAGS.EXSTAT, exStat); + writer.WriteEndElement(); + + // UPRATING INDICES - VALUES PER YEAR + writer.WriteStartElement(TAGS.Enclosure(TAGS.EXSTAT_YEAR)); + foreach (var ExStatVal in ctryContent.exStatVal) + { + writer.WriteStartElement(TAGS.EXSTAT_YEAR); + WriteProperties(ExStatVal, TAGS.EXSTAT_YEAR); + writer.WriteEndElement(); + } + writer.WriteEndElement(); + // DATASETS writer.WriteStartElement(TAGS.Enclosure(TAGS.DATA)); foreach (var data in dataContent.dataSets.Values) diff --git a/EM_executable/EM_Transformer/EM_Transformer.csproj b/EM_executable/EM_Transformer/EM_Transformer.csproj index cdafb7a..e2ad95f 100644 --- a/EM_executable/EM_Transformer/EM_Transformer.csproj +++ b/EM_executable/EM_Transformer/EM_Transformer.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -15,7 +15,7 @@ - + diff --git a/EUROMOD development.sln b/EUROMOD development.sln index 1ebd841..2c2413b 100644 --- a/EUROMOD development.sln +++ b/EUROMOD development.sln @@ -44,15 +44,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EM_BackEnd", "em_libraries\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web Statistics", "em_plugins\Web Statistics\Web Statistics.csproj", "{5EB80EB0-0510-4F8B-BBB7-BE20EAFA27A3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StatisticsPresenter", "em_plugins\StatisticsPresenter\StatisticsPresenter.csproj", "{AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hypothetical Household", "em_plugins\Hypothetical Household\Hypothetical Household.csproj", "{FDB719AC-21A1-4233-8670-FA628FE9469B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InDepthAnalysis", "EM_PLUGINS\InDepthAnalysis\InDepthAnalysis.csproj", "{5FC7B122-C93E-4613-9635-8D6714E9CAB1}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EM_Crypt", "EM_LIBRARIES\EM_Crypt\EM_Crypt.csproj", "{FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InDepthHelpMaker", "EM_PLUGINS\InDepthAnalysis\InDepthHelpMaker\InDepthHelpMaker.csproj", "{2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InDepthHelpMaker", "EuromodHelp\InDepthHelpMaker\InDepthHelpMaker.csproj", "{377D286F-F9A7-488C-AE1A-1615B8EC0079}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -722,49 +718,6 @@ Global {5EB80EB0-0510-4F8B-BBB7-BE20EAFA27A3}.SingleImage|Any CPU.Build.0 = Release|x64 {5EB80EB0-0510-4F8B-BBB7-BE20EAFA27A3}.SingleImage|x64.ActiveCfg = Release|x64 {5EB80EB0-0510-4F8B-BBB7-BE20EAFA27A3}.SingleImage|x86.ActiveCfg = Release|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.CD_ROM|Any CPU.Build.0 = Release|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.CD_ROM|x64.ActiveCfg = Release|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.CD_ROM|x64.Build.0 = Release|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.CD_ROM|x86.ActiveCfg = Release|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.CD_ROM|x86.Build.0 = Release|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Debug|Any CPU.ActiveCfg = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Debug|Any CPU.Build.0 = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Debug|x64.ActiveCfg = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Debug|x64.Build.0 = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Debug|x86.ActiveCfg = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Debug|x86.Build.0 = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-10|Any CPU.ActiveCfg = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-10|Any CPU.Build.0 = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-10|x64.ActiveCfg = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-10|x64.Build.0 = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-10|x86.ActiveCfg = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-10|x86.Build.0 = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-18|Any CPU.ActiveCfg = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-18|Any CPU.Build.0 = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-18|x64.ActiveCfg = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-18|x64.Build.0 = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-18|x86.ActiveCfg = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-18|x86.Build.0 = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-5|x64.ActiveCfg = Release|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-5|x86.ActiveCfg = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-9|Any CPU.ActiveCfg = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-9|Any CPU.Build.0 = Debug|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-9|x64.ActiveCfg = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-9|x64.Build.0 = Debug|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-9|x86.ActiveCfg = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.DVD-9|x86.Build.0 = Debug|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Release|Any CPU.ActiveCfg = Release|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Release|x64.ActiveCfg = Release|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Release|x64.Build.0 = Release|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Release|x86.ActiveCfg = Release|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.Release|x86.Build.0 = Release|x86 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.SingleImage|Any CPU.Build.0 = Release|Any CPU - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.SingleImage|x64.ActiveCfg = Release|x64 - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F}.SingleImage|x86.ActiveCfg = Release|x86 {FDB719AC-21A1-4233-8670-FA628FE9469B}.CD_ROM|Any CPU.ActiveCfg = Release|x64 {FDB719AC-21A1-4233-8670-FA628FE9469B}.CD_ROM|Any CPU.Build.0 = Release|x64 {FDB719AC-21A1-4233-8670-FA628FE9469B}.CD_ROM|x64.ActiveCfg = Release|x64 @@ -814,156 +767,6 @@ Global {FDB719AC-21A1-4233-8670-FA628FE9469B}.SingleImage|Any CPU.Build.0 = Release|x64 {FDB719AC-21A1-4233-8670-FA628FE9469B}.SingleImage|x64.ActiveCfg = Release|x64 {FDB719AC-21A1-4233-8670-FA628FE9469B}.SingleImage|x86.ActiveCfg = Release|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.CD_ROM|Any CPU.Build.0 = Release|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.CD_ROM|x64.ActiveCfg = Release|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.CD_ROM|x64.Build.0 = Release|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.CD_ROM|x86.ActiveCfg = Release|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.CD_ROM|x86.Build.0 = Release|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Custom|Any CPU.ActiveCfg = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Custom|Any CPU.Build.0 = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Custom|x64.ActiveCfg = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Custom|x64.Build.0 = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Custom|x86.ActiveCfg = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Custom|x86.Build.0 = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Debug|x64.ActiveCfg = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Debug|x64.Build.0 = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Debug|x86.ActiveCfg = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Debug|x86.Build.0 = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-10|Any CPU.ActiveCfg = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-10|Any CPU.Build.0 = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-10|x64.ActiveCfg = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-10|x64.Build.0 = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-10|x86.ActiveCfg = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-10|x86.Build.0 = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-18|Any CPU.ActiveCfg = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-18|Any CPU.Build.0 = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-18|x64.ActiveCfg = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-18|x64.Build.0 = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-18|x86.ActiveCfg = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-18|x86.Build.0 = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-5|x64.ActiveCfg = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-5|x86.ActiveCfg = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-5|x86.Build.0 = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-9|Any CPU.ActiveCfg = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-9|Any CPU.Build.0 = Debug|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-9|x64.ActiveCfg = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-9|x64.Build.0 = Debug|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-9|x86.ActiveCfg = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.DVD-9|x86.Build.0 = Debug|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Release|Any CPU.Build.0 = Release|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Release|x64.ActiveCfg = Release|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Release|x64.Build.0 = Release|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Release|x86.ActiveCfg = Release|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.Release|x86.Build.0 = Release|x86 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.SingleImage|Any CPU.Build.0 = Release|Any CPU - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.SingleImage|x64.ActiveCfg = Release|x64 - {5FC7B122-C93E-4613-9635-8D6714E9CAB1}.SingleImage|x86.ActiveCfg = Release|x86 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.CD_ROM|Any CPU.ActiveCfg = CD_ROM - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.CD_ROM|Any CPU.Build.0 = CD_ROM - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.CD_ROM|x64.ActiveCfg = CD_ROM - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.CD_ROM|x64.Build.0 = CD_ROM - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.CD_ROM|x86.ActiveCfg = CD_ROM - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.CD_ROM|x86.Build.0 = CD_ROM - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Custom|Any CPU.ActiveCfg = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Custom|Any CPU.Build.0 = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Custom|x64.ActiveCfg = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Custom|x64.Build.0 = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Custom|x86.ActiveCfg = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Custom|x86.Build.0 = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Debug|Any CPU.ActiveCfg = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Debug|Any CPU.Build.0 = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Debug|x64.ActiveCfg = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Debug|x86.ActiveCfg = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Debug|x86.Build.0 = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-10|Any CPU.ActiveCfg = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-10|Any CPU.Build.0 = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-10|x64.ActiveCfg = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-10|x64.Build.0 = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-10|x86.ActiveCfg = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-10|x86.Build.0 = DVD-10 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-18|Any CPU.ActiveCfg = DVD-18 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-18|Any CPU.Build.0 = DVD-18 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-18|x64.ActiveCfg = DVD-18 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-18|x64.Build.0 = DVD-18 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-18|x86.ActiveCfg = DVD-18 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-18|x86.Build.0 = DVD-18 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-5|Any CPU.ActiveCfg = DVD-5 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-5|Any CPU.Build.0 = DVD-5 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-5|x64.ActiveCfg = DVD-5 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-5|x64.Build.0 = DVD-5 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-5|x86.ActiveCfg = DVD-5 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-5|x86.Build.0 = DVD-5 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-9|Any CPU.ActiveCfg = DVD-9 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-9|Any CPU.Build.0 = DVD-9 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-9|x64.ActiveCfg = DVD-9 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-9|x64.Build.0 = DVD-9 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-9|x86.ActiveCfg = DVD-9 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.DVD-9|x86.Build.0 = DVD-9 - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Release|Any CPU.ActiveCfg = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Release|Any CPU.Build.0 = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Release|x64.ActiveCfg = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.Release|x86.ActiveCfg = Custom - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.SingleImage|Any CPU.ActiveCfg = SingleImage - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.SingleImage|Any CPU.Build.0 = SingleImage - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.SingleImage|x64.ActiveCfg = SingleImage - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.SingleImage|x64.Build.0 = SingleImage - {DFE4A3C6-F59E-417F-9380-FB6411523EE1}.SingleImage|x86.ActiveCfg = SingleImage - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.CD_ROM|Any CPU.ActiveCfg = CD_ROM - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.CD_ROM|Any CPU.Build.0 = CD_ROM - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.CD_ROM|x64.ActiveCfg = CD_ROM - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.CD_ROM|x64.Build.0 = CD_ROM - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.CD_ROM|x86.ActiveCfg = CD_ROM - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.CD_ROM|x86.Build.0 = CD_ROM - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Custom|Any CPU.ActiveCfg = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Custom|Any CPU.Build.0 = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Custom|x64.ActiveCfg = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Custom|x64.Build.0 = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Custom|x86.ActiveCfg = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Custom|x86.Build.0 = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Debug|Any CPU.ActiveCfg = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Debug|Any CPU.Build.0 = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Debug|x64.ActiveCfg = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Debug|x86.ActiveCfg = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Debug|x86.Build.0 = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-10|Any CPU.ActiveCfg = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-10|Any CPU.Build.0 = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-10|x64.ActiveCfg = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-10|x64.Build.0 = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-10|x86.ActiveCfg = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-10|x86.Build.0 = DVD-10 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-18|Any CPU.ActiveCfg = DVD-18 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-18|Any CPU.Build.0 = DVD-18 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-18|x64.ActiveCfg = DVD-18 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-18|x64.Build.0 = DVD-18 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-18|x86.ActiveCfg = DVD-18 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-18|x86.Build.0 = DVD-18 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-5|Any CPU.ActiveCfg = DVD-5 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-5|Any CPU.Build.0 = DVD-5 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-5|x64.ActiveCfg = DVD-5 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-5|x86.ActiveCfg = DVD-5 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-5|x86.Build.0 = DVD-5 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-9|Any CPU.ActiveCfg = DVD-9 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-9|Any CPU.Build.0 = DVD-9 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-9|x64.ActiveCfg = DVD-9 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-9|x64.Build.0 = DVD-9 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-9|x86.ActiveCfg = DVD-9 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.DVD-9|x86.Build.0 = DVD-9 - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Release|Any CPU.ActiveCfg = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Release|Any CPU.Build.0 = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Release|x64.ActiveCfg = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.Release|x86.ActiveCfg = Custom - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.SingleImage|Any CPU.ActiveCfg = SingleImage - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.SingleImage|Any CPU.Build.0 = SingleImage - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.SingleImage|x64.ActiveCfg = SingleImage - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.SingleImage|x86.ActiveCfg = SingleImage - {52A9A63D-29FE-47BD-A754-86F89D9EE462}.SingleImage|x86.Build.0 = SingleImage {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}.CD_ROM|Any CPU.ActiveCfg = Debug|x64 {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}.CD_ROM|Any CPU.Build.0 = Debug|x64 {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}.CD_ROM|x64.ActiveCfg = Debug|x64 @@ -1014,54 +817,60 @@ Global {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}.SingleImage|Any CPU.Build.0 = Debug|x64 {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}.SingleImage|x64.ActiveCfg = Debug|x64 {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39}.SingleImage|x86.ActiveCfg = Debug|x86 - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.CD_ROM|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.CD_ROM|x64.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.CD_ROM|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.CD_ROM|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Custom|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Custom|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Custom|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Custom|x64.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Custom|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Custom|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Debug|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Debug|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Debug|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-10|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-10|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-10|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-10|x64.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-10|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-10|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-18|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-18|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-18|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-18|x64.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-18|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-18|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-5|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-5|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-5|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-9|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-9|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-9|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-9|x64.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-9|x86.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.DVD-9|x86.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Release|Any CPU.Build.0 = Release|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Release|x64.ActiveCfg = Release|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.Release|x86.ActiveCfg = Release|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.SingleImage|Any CPU.Build.0 = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.SingleImage|x64.ActiveCfg = Debug|Any CPU - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24}.SingleImage|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.CD_ROM|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.CD_ROM|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.CD_ROM|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.CD_ROM|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.CD_ROM|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.CD_ROM|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Custom|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Custom|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Custom|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Custom|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Custom|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Custom|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Debug|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Debug|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Debug|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Debug|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Debug|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-10|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-10|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-10|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-10|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-10|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-10|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-18|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-18|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-18|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-18|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-18|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-18|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-5|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-5|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-5|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-5|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-5|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-9|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-9|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-9|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-9|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-9|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.DVD-9|x86.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Release|Any CPU.ActiveCfg = Release|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Release|Any CPU.Build.0 = Release|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Release|x64.ActiveCfg = Release|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Release|x64.Build.0 = Release|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Release|x86.ActiveCfg = Release|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.Release|x86.Build.0 = Release|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.SingleImage|Any CPU.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.SingleImage|Any CPU.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.SingleImage|x64.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.SingleImage|x64.Build.0 = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.SingleImage|x86.ActiveCfg = Debug|Any CPU + {377D286F-F9A7-488C-AE1A-1615B8EC0079}.SingleImage|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1078,11 +887,8 @@ Global {99F3F2D4-97EA-4C33-920E-4B1BF967B84C} = {0A92B10D-D8C0-4423-B815-5C1D56A4454E} {5EF7F33A-2161-4523-9F6A-61A5D7316177} = {0A92B10D-D8C0-4423-B815-5C1D56A4454E} {5EB80EB0-0510-4F8B-BBB7-BE20EAFA27A3} = {A6564291-44DE-436C-868E-C7B8B7FBB183} - {AD2118D1-21FA-4A08-BC61-FAAFFA92F40F} = {A6564291-44DE-436C-868E-C7B8B7FBB183} {FDB719AC-21A1-4233-8670-FA628FE9469B} = {A6564291-44DE-436C-868E-C7B8B7FBB183} - {5FC7B122-C93E-4613-9635-8D6714E9CAB1} = {A6564291-44DE-436C-868E-C7B8B7FBB183} {FB8001D0-25AE-4F0A-8B78-63BF01F7CA39} = {0A92B10D-D8C0-4423-B815-5C1D56A4454E} - {2B1B1AE1-8EB4-4F81-BF30-7389B8789A24} = {A6564291-44DE-436C-868E-C7B8B7FBB183} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CF4B7712-A6B2-409A-BED4-263A09D24080} diff --git a/EM_Help/EUROMOD_HelpOnHelp.docx b/EuromodHelp/EUROMOD_HelpOnHelp.docx similarity index 100% rename from EM_Help/EUROMOD_HelpOnHelp.docx rename to EuromodHelp/EUROMOD_HelpOnHelp.docx diff --git a/EM_Help/HelpFiles/EM_BC_InOut.htm b/EuromodHelp/HelpFiles/EM_BC_InOut.htm similarity index 100% rename from EM_Help/HelpFiles/EM_BC_InOut.htm rename to EuromodHelp/HelpFiles/EM_BC_InOut.htm diff --git a/EuromodHelp/HelpFiles/EM_BC_Introduction.htm b/EuromodHelp/HelpFiles/EM_BC_Introduction.htm new file mode 100644 index 0000000..8c5793a --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_BC_Introduction.htm @@ -0,0 +1,59 @@ + + + + + + +EUROMOD Basic Concepts + + + + +
    + +

    EUROMOD Basic Concepts

    + +

    What is EUROMOD?

    + +

    EUROMOD is a tax-benefit microsimulation model for the European Union that enables researchers and policy analysts to calculate, in a comparable manner, the effects of taxes and benefits on household incomes and work incentives for the population of each country and for the EU as a whole. Cross-country comparability is enabled by coding the policy systems of the EU Member States according to a common framework based on a standard set of modelling conventions. The EUROMOD platform is highly flexible but also organised, documented, validated and transparent. Underpinning the model is the purpose-built software comprising a user-friendly interface, supplemented by extended functionalities (plugins and add-ons) for special purpose analysis. The software is used in many country-specific models around the world.

    + +

    Originally maintained, developed and managed by the Institute for Social and Economic Research (ISER) of the University of Essex, since 2021 EUROMOD is maintained, developed and managed by the Joint Research Centre (JRC) of the European Commission, in collaboration with Eurostat and national teams from the EU countries. The model is open source since December 2020 (before December 2020 it was open access), with an increasing number of users across Europe and beyond. There are now several hundred active users from a range of institutional backgrounds, helping bridge the gap between academic research and policymaking.

    + +

    For an overview of EUROMOD and its main features and uses, you can watch a couple of videos (here and here) recorded by ISER in 2019, before the full transfer of the model to the JRC.

    + +

    What can EUROMOD do?

    + +

    EUROMOD can be used in many different ways in different contexts. Examples include:

    + +
    Standard
    + +
      +
    • Estimation of poverty, inequality and redistribution statistics under actual conditions, previous or future tax-benefit rules
    • + +
    • Budgetary effects
    • + +
    • Effects of simple tax-benefit policy reforms (or illustrative changes to household composition and original income)
    • + +
    • "Model family" calculations
    • + +
    • Indicators of work incentives
    • +
    +
    More advanced
    +
      +
    • Complex policy reforms (e.g. effects of revenue-neutral changes to tax rates and social insurance regulations)
    • + +
    • Policy swapping between countries (i.e. effects on country A of adopting a policy measure currently effective in country B) Generation of budget sets as input to labour supply or other models of behaviour change Generation of counterfactual income to answer "what if" questions Assessing effects and costs of EU-wide policy reforms.
    • +
    +
    Data imputation
    +
      +
    • Generation of gross income (by source) from net, or vice versa
    • +
    +

    For further information see https://euromod-web.jrc.ec.europa.eu/.

    + +

     

    + +
    + + + + diff --git a/EuromodHelp/HelpFiles/EM_BC_PresentationTaxBen.htm b/EuromodHelp/HelpFiles/EM_BC_PresentationTaxBen.htm new file mode 100644 index 0000000..7856daf --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_BC_PresentationTaxBen.htm @@ -0,0 +1,98 @@ + + + + + + +Presentation of countries' tax-benefit-systems + + + + +
    + +

    Presentation of countries' tax-benefit-systems

    + +

    Loading countries

    + +

    Clicking a flag in the user interface's Countries ribbon opens EUROMOD's representation of the respective country's tax-benefit system. The country's name and flag is shown right next to the Run EUROMOD button, to indicate which country is loaded. Further countries can be loaded by clicking their flags. Each country is represented in its own window and one can switch between these windows by again clicking the respective flag or via the Windows taskbar.

    + +

    The EUROMOD spine

    + +

    The main part of the window displays the representation of the country's tax-benefit system - at the time of opening in a collapsed state. Thus it shows what in EUROMOD lingo is frequently referred to as the spine. The EUROMOD spine is the list of policies worked off in sequence when the model performs its calculations. The term policies refers as well to policies in a narrow sense, i.e. benefits and taxes, as to special EUROMOD policies. These special policies for example define which variables are contained in the output. See Special EUROMOD policies below for further information. Each row of the spine represents one policy.

    + +

    EUROMOD policies, functions and parameters

    + +

    Expanding a policy by clicking the little triangle button left of the policy's name allows viewing the implementation of the policy. A policy is implemented by so-called functions. Each EUROMOD function is a self-contained building block that has its own parameters and represents a particular component of the respective policy. A typical social assistance benefit may for example be implemented by a function that determines eligibility for the benefit and a function that calculates the benefit amount for all eligible units. In fact these two functions: a function that determines eligibility/liability for benefits/taxes in a very general way and a function that calculates a wide range of benefits/taxes are the two most frequently used functions in EUROMOD. The purpose of using functions as building blocks of the model is to provide a general structure, which can be seen as using a standardised language to describe policy instruments. Once EUROMOD users are accustomed to this language, their understanding of other (foreign) countries' benefits and taxes, and how they are implemented in EUROMOD, improves considerably. The parameters of a function can be viewed by expanding it using the little triangle button left of its name. The section EUROMOD Functions gives a detailed description of EUROMOD functions, including their use, the specific behaviour and the parameters they provide to guide this behaviour. Expanded policies and functions can be re-collapsed by the little minus buttons. Note that the policy and function worked on is displayed in the status bar.

    + +

    EUROMOD systems

    + +

    The changes of a country's tax-benefit system over time are captured by EUROMOD systems. A EUROMOD system either reflects the tax-benefit rules for a specific policy year (assuming annual adaptations of tax-benefit rules) or the rules for an actual (planned) or imaginary reform scenario. The columns of the country's view represent these EUROMOD systems. Thus the value of a specific parameter (e.g. the rate of a particular tax band) for specific systems is defined at the intersection points of the parameter's row and the respective systems' columns (e.g. may take the value of 10% for the 2009-system and the value of 11% for the 2010-system).

    + +

    The fact that policy reforms are not always as simple as +changing the value of a specific parameter is taken into account by so called switches. The intersection points of +policies and functions with the systems represent these switches, i.e. they allow to switch policies and functions on or +off dependent on the system. The switches +also provide the settings n/a, +standing for not applicable. More detailed explanations of these +settings can be found in the section EUROMOD +Functions - Common Parameters.

    + +

    Special EUROMOD policies

    + +

    As mentioned above, the EUROMOD spine comprises policies, +which do not describe e.g. a tax or benefit. Instead they implement +definitions, which are necessary for the model's calculation.

    + +
      +
    • The policies ILDef_cc, IlsDef_cc and IlsUDBDef_cc contain +definitions of so called incomelists. +Technically an incomelist is the aggregate of several variables, which are +added or subtracted to build the aggregate. The term "income"list +indicates that the most common applications of this (important EUROMOD) concept +are income definitions, for example disposable income, taxable income, etc.
    • + + +
    • The policy SetDEfault_cc sets default values for variables. Depending on systems and dataset used, some variables default values need to be declared.
    • +
    • The policy random_cc generates random temporary variables that will be used in other policies.
    • + + +
    • The policy TUDef_cc contains +definitions of assessment units, which are in EUROMOD sometimes referred to as tax units (and are another important +EUROMOD concept). Many taxes and especially benefits do not concern single +individuals, but refer to bigger units, for example some sort of family +definition. Assessment units allow for such definitions by specifying who +belongs to the unit, who is a child, etc.
    • + +
    • Datasets are usually used for +implementing several systems, by up-dating monetary values to the corresponding +year. The policy Uprate_cc contains such up-dating of monetary dataset +variables.
    • + +
    • The policies output_std_cc and output_std_hh_cc +contain the specification of standard output on individual and household level +(see section EUROMOD Basic Concepts - EUROMOD input +and output).
    • +
    + +

    The listed policies are standard, that means they are +implemented for each country contained in EUROMOD. Some countries contain +further special policies like for example ConstDef_cc or InitVars_cc, +which define basic values which are used all over the implementation, e.g. +minimum income amount, pension age, etc.

    + +

    Technically there is no difference between special policies +and standard policies, both use functions for their implementation and both +need to be listed in the spine to be performed. Thus calling them special is +just a matter of better comprehensibility. Moreover, the functions, which are in +principle dedicated for the implementation of a special policy, like the +function DefIL for the policy ILDef_cc, can be used in any other +policy as well, if this seems appropriate.

    + +

     

    + +
    + + + + diff --git a/EM_Help/HelpFiles/EM_BC_Terminology.htm b/EuromodHelp/HelpFiles/EM_BC_Terminology.htm similarity index 97% rename from EM_Help/HelpFiles/EM_BC_Terminology.htm rename to EuromodHelp/HelpFiles/EM_BC_Terminology.htm index 5d51ec5..fc8fe57 100644 --- a/EM_Help/HelpFiles/EM_BC_Terminology.htm +++ b/EuromodHelp/HelpFiles/EM_BC_Terminology.htm @@ -20,7 +20,7 @@

    EUROMOD system

    The term system refers to the rules necessary to simulate a particular tax-benefit system. It may refer to an existing tax-benefit system -(e.g. the UK tax-benefit rules for 2010) or to a reform scenario.

    +(e.g. the DK tax-benefit rules for 2020) or to a reform scenario.

    EUROMOD parameters
    @@ -53,9 +53,9 @@
    EUROMOD incomelist
    is the aggregate of several EUROMOD variables and possibly other incomelists. These components (in rare cases fractions or multiples of them) are either added or subtracted to build -the aggregate. The term "income"list +the aggregate. The term "income" list indicates that the most common applications of the concept are income concepts, -for example disposable income, taxable income,

    +for example disposable income, taxable income, ...

    EUROMOD policy
    diff --git a/EuromodHelp/HelpFiles/EM_BC_UserInterface.htm b/EuromodHelp/HelpFiles/EM_BC_UserInterface.htm new file mode 100644 index 0000000..9e9524f --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_BC_UserInterface.htm @@ -0,0 +1,65 @@ + + + + + + +The EUROMOD user interface + + + + +
    + +

    The EUROMOD user interface

    + +

    The EUROMOD user interface is the central accession point of the model. Its purpose is to help users to orientate themselves within the options provided by the model and around the model.

    + +

    The user interface's main window shows the following components:

    +
      +
    • The ribbon Countries is filled with flags for the implemented countries. The flags can be clicked to access the EUROMOD parameters of the respective country. EUROMOD parameters store the information the model needs for its calculations. How the user interface presents this information is explained in Presentation of countries' tax-benefit-systems.
    • +
    • The button Run EUROMOD left of the ribbon Countries opens the EUROMOD run dialog, which is explained in Working with EUROMOD - Running EUROMOD.
    • + +
    • The ribbon Display provides different tools to facilitate the visualization of the spine. These dialogs allow for:
    • + + +
    • The ribbon Country Tools enables access to a number of dialogs, which support working with a country's parameters. These dialogs allow for:
    • +
        +
      • configuring country settings (e.g. name, short name), system settings (e.g. currency, exchange rate to Euro) and the input datasets which can be used for simulating the country's tax benefit system (see section Working with EUROMOD - Changing Countries' Settings),
      • +
      • offer a number of search tools, which - besides allowing for standard searching and replacing - facilitate finding errors and assessing if and where certain EUROMOD components (e.g. variables) are used in the respective country's parameters (see section Working with EUROMOD - Searching),
      • +
      +
    • The ribbon Administration Tools enables access to dialogs which allow for:
    • + + +
    • The ribbon Add-Ons is filled with icons for the available EUROMOD add-ons. The icons can be clicked to access the implementation of the respective add-on. The presentation of add-on implementations is equal to the presentation of country implementations and can therefore be looked up in Presentation of countries' tax-benefit-systems. For more information on add-ons and an example see EUROMOD Functions - EUROMOD add-ons and the special functions AddOn_Applic, AddOn_Pol,AddOn_Func and AddOnPar.
    • + +
    • The ribbon Applications enables access to a number of tools, which allow for analysing the EUROMOD output, respectively preparing the EUROMOD input (see section Working with EUROMOD - Applications). They comprise tools for:
    • +
        +
      • Generating simple summary statistics
      • +
      • Generating hypothetical input data
      • +
      • Generating the macrovalidation tables
      • +
      • Generating in-depth analysis summary statistics
      • +
      • Generating policy effects analysis
      • +
      • Opening output file
      • + +
      +
    • The ribbon Help & Info provides help and relevant information such as the EUROMOD version in use, and the End-User Licence Agreement.
    • +
    • The main menu left of the Run EUROMOD button contains functionalities like saving countries' parameters, opening projects, changing configuration, as well as exiting the programme. These functionalities are described at appropriate points in the section Working with EUROMOD.
    • +
    + +

     

    + +
    + + + + diff --git a/EM_Help/HelpFiles/EM_FC_AddHHMembers.htm b/EuromodHelp/HelpFiles/EM_FC_AddHHMembers.htm similarity index 99% rename from EM_Help/HelpFiles/EM_FC_AddHHMembers.htm rename to EuromodHelp/HelpFiles/EM_FC_AddHHMembers.htm index 9b85939..bb325e9 100644 --- a/EM_Help/HelpFiles/EM_FC_AddHHMembers.htm +++ b/EuromodHelp/HelpFiles/EM_FC_AddHHMembers.htm @@ -307,7 +307,7 @@

    Taxunits

    -

    Rule 2: The condition 'HHCond' and the formulas for initialising variables use a simple household taxunit[1]. +

    Rule 2: The condition 'HHCond' and the formulas for initialising variables use a simple household taxunit [1]. As the au-pair example above illustrates, this still allows changing to another household taxunit which provides the required specifications. It is however not possible to change to smaller units (this is the rule for the '#_Level' parameter, which does not allow changing to smaller units than the default unit). If necessary, one can use other functions and features to prepare for the AddHHMembers function.

    diff --git a/EM_Help/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm b/EuromodHelp/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm similarity index 86% rename from EM_Help/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm rename to EuromodHelp/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm index bb38b52..15f03f6 100644 --- a/EM_Help/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm +++ b/EuromodHelp/HelpFiles/EM_FC_AddOn_Applic_AddOn_Pol_AddOn_Func_AddOn_Par.htm @@ -15,11 +15,11 @@

    EUROMOD add-ons and the special functions AddOn_Applic, AddOn_Pol, AddOn_Fun

    Add-on features are EUROMOD extended functionalities, which are not part of the standard tax-benefit calculations. The main reasons for keeping -add-ons separate from the basic model, is to hold the latter as clear and -straight forward as possible. Typical examples for add-ons are the calculation +add-ons separate from the basic model is to hold the latter as clear and +straightforward as possible. Typical examples for add-ons are the calculation of marginal/average tax-rates; the calculation of disposable income by different labour supply options; templates for optimisation exercises, e.g. -choices between different policy options; templates for budget neutral reforms, +choices between different policy options; templates for budget neutral reforms; etc. While these examples are usually implemented for all or at least for a couple of countries, add-on features can also be used to store reform scenarios separately.

    @@ -35,11 +35,11 @@

    EUROMOD add-ons and the special functions AddOn_Applic, AddOn_Pol, AddOn_Fun of AddOn_Applic is compulsory (see below).
  • Add-ons make extensive use of -"identifiers"[1]: see examples below and EUROMOD Functions Identifiers and the +"identifiers" [1]: see examples below and EUROMOD Functions Identifiers and the placeholders =cc= and =sys=.
  • Add-ons make extensive use of the placeholders -=cc= and =sys=[1]: see examples +=cc= and =sys= [1]: see examples below and EUROMOD Functions Identifiers and the placeholders =cc= and =sys=.
  • @@ -308,7 +308,7 @@

    Example
    implementation of an "other child benefit" (bchot_s), which can be added to any 2010 tax-benefit systems implemented in EUROMOD, as well as to Simpleland. It uses three policies for this purpose. The first, Definition_ex1, can be -regarded as the centrepiece as it controls what happens. The second, Implementation_ex1, contains add-on +regarded as the centrepiece as it controls the rest. The second, Implementation_ex1, contains add-on specific implementations and the third, bchot_ex1, implements the "other child benefit". The add-on has two systems. The first, Ex1, can be applied on all @@ -316,7 +316,7 @@
    Example
    is especially designed for the Maltese 2010 system and illustrates what's different if one knows the country and system on which the add-on is applied. In the following the "systems on which the add on is -applied" will be referred to as base systems for brevities sake.

    +applied" will be referred to as base systems for the sake of brevity.

    The policy Definition_ex1 contains four functions. The first, AddOn_Applic, specifies on which base systems the add-on systems can be applied. The first Sys parameter allows for all 2010 @@ -328,11 +328,10 @@

    Example
    defines that the policy bchot_ex1 is to be added to the base system, i.e. the policy implementing the "other child benefit". This is accomplished by the parameter Pol_Name, while the parameter Insert_Before_Pol -specifies where to integrate the policy. The child benefit is inserted before -the standard output policy, which in the Maltese system, Ex1_MT, can be simply indicated as output_std_mt, while the many -country system, Ex1, needs to use the -placeholder =cc=, which is replaced by the respective countrys acronym ant -run-time (see EUROMOD Functions Identifiers +specifies where to integrate the policy. The child benefit inserted before +the standard output policy, which in the Maltese system Ex1_MT, can be simply indicated as output_std_mt, while for the many +countries systems, Ex1, the placeholder =cc= (which is replaced by the respective countrys acronym at +run-time) needs to be used (see EUROMOD Functions Identifiers and the placeholders =cc= and =sys=).

    The third function, AddOn_Func, @@ -351,7 +350,7 @@

    Example
    and the placeholders =cc= and =sys=), which is composed of the name of the policy where the function is located, i.e. the standard output policy (output_std_=cc=), and the order of the function, i.e. the function is supposed to be the first (#1) in this policy. This is in fact not a unique identifier and -therefore somewhat uncertain, which must however be accepted if the definition +therefore somewhat vague, which must however be accepted if the definition is to be valid for several base systems. Such uncertainty can be avoided if the add-on system refers to a single base system, therefore Ex1_MT uses the unique @@ -364,10 +363,10 @@
    Example
    Note that the parameter Insert_Func is set to the same values as the parameter Insert_After_Func of the function AddOn_Func. -Less obviously note that it is important to insert the special output function +Note as well that it is important to insert the special output function after the standard output function. Using the parameter Insert_Before_Func instead of the parameter Insert_After_Func -on first view would not do any harm, as it is not important which output comes +in principle would not matter, as it is not important which output comes first. However the insertion of the special output function would move the standard output function from first order to second order, thus #1 would not work anymore. Obviously this only matters for the system Ex1, @@ -379,19 +378,17 @@
    Example
    the "other child benefit" policy. Note, that this policy is in fact dispensable, as the function could as well be defined in the policy Definition_ex1. In fact the policy just serves illustration purposes as with more complex add-ons it might be more -transparent to separate definition from implementation. More important, however -note that there needs to be at least one policy which is not integrated into +transparent to separate definition from implementation. More importantly, note that there needs to be at least one policy which is not integrated into the base system. This policy needs to contain the AddOn_X functions and (usually) all functions integrated via AddOn_Func, as, if the latter were defined in an integrated policy, these functions would run twice (which may occasionally make sense).

    Finally the policy bchot_ex1 contains the implementation of -the "other child benefit". It is partly left to the readers imagination -what it actually does, denoted by the ... parts.

    +the "other child benefit".

    Generation and storage of add-ons
    -

    Physically add-ons are stored in xml files, which are named +

    Add-ons are stored in xml files, which are named like the add-ons short name. SeeWorking with EUROMOD - Changing countries' names and short names for more information on countries' and add-ons' short names and Generation and storage of add-ons matters of storage.

    Add-ons can be generated by using the Save As functionality (see Working with -EUROMOD - Saving, saving as and auto-saving) to -copy a suitable existing add-on and adapt it accordingly. Possibilities to -generate add-ons from scratch or derive them from differences between a base -system and a (potential) add-on system implemented in some country are planned -but not yet implemented.

    +EUROMOD - Saving, saving as and auto-saving).

    Application of add-ons
    diff --git a/EM_Help/HelpFiles/EM_FC_AddOn_ExtensionSwitch.htm b/EuromodHelp/HelpFiles/EM_FC_AddOn_ExtensionSwitch.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_AddOn_ExtensionSwitch.htm rename to EuromodHelp/HelpFiles/EM_FC_AddOn_ExtensionSwitch.htm diff --git a/EM_Help/HelpFiles/EM_FC_Allocate.htm b/EuromodHelp/HelpFiles/EM_FC_Allocate.htm similarity index 99% rename from EM_Help/HelpFiles/EM_FC_Allocate.htm rename to EuromodHelp/HelpFiles/EM_FC_Allocate.htm index 95381ca..a9a19dd 100644 --- a/EM_Help/HelpFiles/EM_FC_Allocate.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Allocate.htm @@ -48,7 +48,7 @@

    The policy function Allocate

    TAX_UNIT - sben_family_sl + tu_sben_family_sl @@ -97,7 +97,7 @@

    The policy function Allocate

    TAX_UNIT - sben_family_sl + tu_sben_family_sl diff --git a/EM_Help/HelpFiles/EM_FC_ArithOp.htm b/EuromodHelp/HelpFiles/EM_FC_ArithOp.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_ArithOp.htm rename to EuromodHelp/HelpFiles/EM_FC_ArithOp.htm diff --git a/EM_Help/HelpFiles/EM_FC_BenCalc.htm b/EuromodHelp/HelpFiles/EM_FC_BenCalc.htm similarity index 80% rename from EM_Help/HelpFiles/EM_FC_BenCalc.htm rename to EuromodHelp/HelpFiles/EM_FC_BenCalc.htm index c4afda2..7aa2c7d 100644 --- a/EM_Help/HelpFiles/EM_FC_BenCalc.htm +++ b/EuromodHelp/HelpFiles/EM_FC_BenCalc.htm @@ -13,42 +13,13 @@

    The policy function BenCalc

    -

    The -function BenCalc is often referred to as the benefit -calculator, as it allows for modelling a wide range of policy instruments, in -particular benefits. This is accomplished by combining the functionalities of -the functions Elig -and ArithOp. -Basically, the function calculates its result as a sum of "components", -where the value of a component is only added if a certain condition is -fulfilled by at least one member of the assessment unit. The following stylised -formulas illustrates the approach:

    - -

    result = Sumi -(compi_perTU if compi_cond = true)

    - -

    result = Sumi -(compi_perElig * nElig if compi_cond = true)

    - -

    That means, -a component is only added if the component's condition is fulfilled, which is -defined by the parameter compi_cond. This parameter -follows the same rules as the parameter elig_cond of -the function Elig. -The value of the component is either defined by the parameter compi_perTU or compi_perElig, -which follow the same rules as the parameter formula -of the function ArithOp. -In the former case simply the value as defined by compi_perTU -is added, whereas in the latter case the value as defined by compi_perElig multiplied by the number of assessment unit -members fulfilling the condition is added. Example 1 illustrates the approach by -modelling a simple child benefit, where each family with dependent children {nDepChildrenInTaxunit>0} receives a -monthly amount of 100 Euro (comp_perTU, GrpNo 1) -plus monthly 10 Euro (comp2_perElig, GrpNo 2) for -any child younger than three {dag<3}.

    +

    The function BenCalc is often referred to as the benefit calculator, as it allows for modelling a wide range of policy instruments, in particular benefits. This is accomplished by combining the functionalities of the functions Elig and ArithOp. Basically, the function calculates its result as a sum of "components", where the value of a component is only added if a certain condition is fulfilled by at least one member of the assessment unit. The following stylised formulas illustrates the approach:

    + +

    result = Sumi (compi_perTU if compi_cond = true)

    + +

    result = Sumi (compi_perElig * nElig if compi_cond = true)

    + +

    That means, a component is only added if the component's condition is fulfilled, which is defined by the parameter compi_cond. This parameter follows the same rules as the parameter elig_cond of the function Elig. The value of the component is either defined by the parameter compi_perTU or compi_perElig, which follow the same rules as the parameter formula of the function ArithOp. In the former case simply the value as defined by compi_perTU is added, whereas in the latter case the value as defined by compi_perElig multiplied by the number of assessment unit members fulfilling the condition is added. Example 1 illustrates the approach by modelling a simple child benefit, where each family with dependent children nDepChildrenInTaxunit>0 receives a monthly amount of 100 Euro (comp_perTU, GrpNo 1) plus monthly 10 Euro (comp2_perElig, GrpNo 2) for any child younger than three dag<3.

    @@ -67,7 +38,7 @@

    The policy function BenCalc

    - + @@ -79,7 +50,7 @@

    The policy function BenCalc

    - + @@ -97,7 +68,7 @@

    The policy function BenCalc

    - +
    Example 1:
    comp_cond 1{nDepChildrenInTaxunit>0}nDepChildrenInTaxunit>0
    comp_cond 2{dag<3}dag<3
    TAX_UNIT sben_family_sltu_sben_family_sl
    @@ -128,7 +99,7 @@

    The policy function BenCalc

    comp_cond 1 - {isNtoMchild}#1 + isNtoMchild#1 @@ -152,7 +123,7 @@

    The policy function BenCalc

    comp_cond 2 - {isNtoMchild}#2 + isNtoMchild#2 @@ -176,7 +147,7 @@

    The policy function BenCalc

    comp_cond 3 - {isNtoMchild}#3 + isNtoMchild#3 @@ -206,7 +177,7 @@

    The policy function BenCalc

    TAX_UNIT - sben_family_sl + tu_sben_family_sl @@ -251,7 +222,7 @@

    The policy function BenCalc

    comp_cond 1 - {IsDepChild} & {dag<=3} + IsDepChild & dag<=3 @@ -263,7 +234,7 @@

    The policy function BenCalc

    comp_cond 2 - {IsDepChild} & {dag=4} & {dag<=14} + IsDepChild & dag>=4 & dag<=14 @@ -275,7 +246,7 @@

    The policy function BenCalc

    comp_cond 3 - {IsDepChild} & {dag>=15} & {dag<=20} + IsDepChild & dag>=15 & dag<=20 @@ -293,7 +264,7 @@

    The policy function BenCalc

    TAX_UNIT - sben_family_sl + tu_sben_family_sl @@ -333,7 +304,7 @@

    The policy function BenCalc

    comp_cond 1 - {IsHeadofTU} + IsHeadofTU @@ -345,7 +316,7 @@

    The policy function BenCalc

    comp_cond 2 - {IsPartnerOfHeadofTU} + IsPartnerOfHeadofTU @@ -357,7 +328,7 @@

    The policy function BenCalc

    comp_cond 3 - {IsDepChild} + IsDepChild @@ -369,7 +340,7 @@

    The policy function BenCalc

    comp_cond 4 - {IsDepParent} + IsDepParent @@ -387,7 +358,7 @@

    The policy function BenCalc

    TAX_UNIT - big_family_sl + tu_big_family_sl @@ -421,7 +392,7 @@

    The policy function BenCalc

    comp_cond 1 - {IsLoneParent} + IsLoneParent @@ -451,7 +422,7 @@

    The policy function BenCalc

    TAX_UNIT - individual_sl + tu_individual_sl @@ -490,7 +461,7 @@

    The policy function BenCalc

    comp_cond 1 - {IsLoneParent} + IsLoneParent @@ -509,13 +480,13 @@

    The policy function BenCalc

    withdraw_start 500#m - 10 cents are withdrawn for each Euro earned + 20 cents for each Euro earned beyond 500 withdraw_end 1000#m - but only if income is below 100 + but only if income is below 1000 output_var @@ -526,7 +497,7 @@

    The policy function BenCalc

    TAX_UNIT - individual_sl + tu_individual_sl diff --git a/EM_Help/HelpFiles/EM_FC_Break.htm b/EuromodHelp/HelpFiles/EM_FC_Break.htm similarity index 88% rename from EM_Help/HelpFiles/EM_FC_Break.htm rename to EuromodHelp/HelpFiles/EM_FC_Break.htm index 84f87fb..46a26d8 100644 --- a/EM_Help/HelpFiles/EM_FC_Break.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Break.htm @@ -12,8 +12,8 @@

    The special function Break

    The function Break allows the user to break the run at any point inside the spine. This function -is only intendent to be used during the development stage of a system to help the developer locate and -fix bugs in such system. It is not intendent to be included in published models.

    +is only intended to be used during the development stage of a system to help the developer locate and +fix bugs in such system. It is not intended to be included in published models.

    This function is only available with EM3.

    @@ -37,7 +37,7 @@

    The special function Break

    will produce an output file (taking the name from the first DefOutput to be found after the Break function, which will typically be the default output function) that contains ALL variables and incomelists available at the time. Note that outputting incomelists will very likely lead to issuing warnings "... use of not initialised variable ...", -referring to variables which are included in the incomelists, but only generated after the break.

    +referring to variables that are included in the incomelists, but only generated after the break.

    A more controlled behaviour is shown in the next example:

    diff --git a/EM_Help/HelpFiles/EM_FC_CallProgramme.htm b/EuromodHelp/HelpFiles/EM_FC_CallProgramme.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_CallProgramme.htm rename to EuromodHelp/HelpFiles/EM_FC_CallProgramme.htm diff --git a/EM_Help/HelpFiles/EM_FC_ChangeLog.htm b/EuromodHelp/HelpFiles/EM_FC_ChangeLog.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_ChangeLog.htm rename to EuromodHelp/HelpFiles/EM_FC_ChangeLog.htm diff --git a/EM_Help/HelpFiles/EM_FC_ChangeParam.htm b/EuromodHelp/HelpFiles/EM_FC_ChangeParam.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_ChangeParam.htm rename to EuromodHelp/HelpFiles/EM_FC_ChangeParam.htm diff --git a/EM_Help/HelpFiles/EM_FC_ChangeSwitch.htm b/EuromodHelp/HelpFiles/EM_FC_ChangeSwitch.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_ChangeSwitch.htm rename to EuromodHelp/HelpFiles/EM_FC_ChangeSwitch.htm diff --git a/EM_Help/HelpFiles/EM_FC_CommonParameters.htm b/EuromodHelp/HelpFiles/EM_FC_CommonParameters.htm similarity index 77% rename from EM_Help/HelpFiles/EM_FC_CommonParameters.htm rename to EuromodHelp/HelpFiles/EM_FC_CommonParameters.htm index 24e4a35..74bba75 100644 --- a/EM_Help/HelpFiles/EM_FC_CommonParameters.htm +++ b/EuromodHelp/HelpFiles/EM_FC_CommonParameters.htm @@ -129,15 +129,15 @@

    Common

    Example 1 in section EUROMOD Functions - Interactions between functions provides an explanation for the parameter who_must_be_elig. This -explanation however does not mention which values (except from one_member) the parameter can +explanation however does not mention which values (except from one) the parameter can take on. These are:

      -
    • one_member (or one): one member of the assessment unit must be eligible
    • +
    • one: one member of the assessment unit must be eligible
    • one_adult: one adult member of the assessment unit must be eligible
    • -
    • all_members (or all or taxunit): all members of the assessment unit must be eligible
    • +
    • all: all members of the assessment unit must be eligible
    • all_adults: all adult members of the assessment unit must be eligible
    • -
    • nobody: calculations are carried out for each assessment unit, this is the default if the parameter is not indicated
    • +
    • nobody: calculations are carried out for each assessment unit, regardless of the eligibility rule simulated by the Elig function. This is the default if the parameter is not indicated and provides the same result as setting it to n/a

    "assessment unit" as well @@ -173,7 +173,7 @@

    Common elig_cond - {dag > 80} + dag > 80 person must be aged older than 80 @@ -193,8 +193,8 @@

    Common who_must_be_elig - taxunit - if assessment unit is individual, parameter can be set to "taxunit/all" or "one" with the same result + all + if assessment unit is individual, parameter can be set to "all" or "one" with the same result elig_var @@ -272,12 +272,7 @@

    Common -

    In example 3 the output variable stm02_s (s=system, tm=temporary, _s=simulated) is set to -100 in all cases where the (input) variable stm01_s -is smaller than 100 (lower limit applies). It is set to the value of stm01_s in all cases where stm01_s -is between 100 and 1000 (no limit applies). And it is set to 1000 in all cases -where stm01_s is greater than 1000 (upper limit -applies).

    +

    In example 3 the output variable stm02_s (s=system, tm=temporary, _s=simulated) is set to 100 in all cases where the (input) variable stm01_s is smaller than 100 (lower limit applies). It is set to the value of stm01_s in all cases where stm01_s is between 100 and 1000 (no limit applies). And it is set to 1000 in all cases where stm01_s is greater than 1000 (upper limit applies).

    @@ -378,22 +373,7 @@

    Common

    The common parameter TAX_UNIT

    -

    The parameter TAX_UNIT allows for the definition of the assessment unit a -function refers to. Assessment units range from individual units (each person -builds her/his own unit) over various definitions of family units to household -units (all persons of the household belong to the same unit). The possibility -of defining the assessment unit not only on policy level, but on function level -is one of the features, which make EUROMOD especially flexible. In fact it is -even possible to change the assessment unit within a function. The other side -of the coin is however, that it takes some learning effort and experience to -understand the consequential complexity. The sections EUROMOD Functions - Parameter values and the -assessment unit and EUROMOD Functions - The -system functions DefTU and UpdateTU -deal with these complexities. The former explains how parameters are -interpreted if the assessment unit consists of more than one person and to -which person within the unit the function result is assigned. The latter -describes how an assessment unit is defined.

    +

    The parameter TAX_UNIT allows for the definition of the assessment unit a function refers to. Assessment units range from individual units (each person builds her/his own unit) over various definitions of family units to household units (all persons of the household belong to the same unit). The possibility of defining the assessment unit not only on policy level, but on function level, is one of the features that makes EUROMOD especially flexible. In fact it is even possible to change the assessment unit within a function. The other side of the coin is however, that it takes some learning effort and experience to understand the consequential complexity. The sections EUROMOD Functions - Parameter values and the assessment unit and EUROMOD Functions - The system functions DefTU and UpdateTU deal with these complexities. The former explains how parameters are interpreted if the assessment unit consists of more than one person and to which person within the unit the function result is assigned. The latter describes how an assessment unit is defined and updated.

    The parameter is compulsory for all policy functions, i.e. must be indicated. System functions do not have a TAX_UNIT @@ -412,24 +392,9 @@

    Common parameters controlling whether a function by the model run. In fact the switch has four possible states:

      -
    • on (or 1): function is switched on
    • -
    • off (or 0): function is switched off
    • -
    • toggle (or 2): function is initially switched off, but may be -switched on later (using the function ChangeParam). -toggle tells the model that -the parameters of the function should be read and checked, which would not be -the case if the function were switched off. For a more detailed explanation see -section EUROMOD Functions - The special -function ChangeParam.
    • - -
    • n/a: function is not applicable. With respect to treatment -of the function by the model run this state is equal to the off state. However, -it stresses that the function is not only switched off (for whatever reason) -but has no meaning for the respective system. Moreover, the user interface uses -the n/a -state in its export/import functionalities to assess whether a function is -relevant for a system (see Working -with EUROMOD - Importing and exporting systems).
    • +
    • on: function is switched on
    • +
    • off: function is switched off
    • +
    • n/a: function is not applicable. With respect to treatment of the function by the model run this state is equal to the off state. However, it stresses that the function is not only switched off (for whatever reason) but has no meaning for the respective system. Moreover, the user interface uses the n/a state in its export/import functionalities to assess whether a function is relevant for a system (see Working with EUROMOD - Importing and exporting systems).

    Finally, the parameter run_cond @@ -440,9 +405,7 @@

    Common parameters controlling whether a function are individual or household based and therewith determine whether a function is processed for a specific unit. In contrast, the parameter run_cond is a conditional switch. Consequently, differently from eligibility conditions, run conditions are not intended to be -used with individual/household based operators.[1] -Also note that, the output variable of a function, which does not fulfil the +used with individual/household based operators. Also note that, the output variable of a function, which does not fulfil the run condition, stays uninitialised (analogous to switched off functions). Typically the parameter run_cond is used in more advanced applications of the model, e.g. loops, where the condition refers to a specific processing state (e.g. iteration of the loop) or some other global @@ -455,23 +418,6 @@

    Common parameters controlling whether a function -
    - -
    - -

    [1]Note that the programme does issue a warning if -individual/household specific operators are used with run_cond. If this warning is -ignored, the condition is fulfilled, if the assessment unit fulfils the -condition. Conditions which refer to a smaller unit are evaluated for the head -of unit (respectively the unit she/he belongs to). As a consequence, taking -this and the fact that the output variable stays uninitalised -if the run condition is not fulfilled, run_cond could in principle be used as a shortcut instead of -elig. This -is however considered as bad practise and only recommended for testing -purposes.

    - -
    - diff --git a/EM_Help/HelpFiles/EM_FC_CumulativeSum.htm b/EuromodHelp/HelpFiles/EM_FC_CumulativeSum.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_CumulativeSum.htm rename to EuromodHelp/HelpFiles/EM_FC_CumulativeSum.htm diff --git a/EM_Help/HelpFiles/EM_FC_DefIL.htm b/EuromodHelp/HelpFiles/EM_FC_DefIL.htm similarity index 97% rename from EM_Help/HelpFiles/EM_FC_DefIL.htm rename to EuromodHelp/HelpFiles/EM_FC_DefIL.htm index 7d2e5b9..48bb550 100644 --- a/EM_Help/HelpFiles/EM_FC_DefIL.htm +++ b/EuromodHelp/HelpFiles/EM_FC_DefIL.htm @@ -146,8 +146,8 @@

    The system function DefIL

    or ils_, where ils_ denotes system or standard incomelists. These are incomelists, which must be defined for each country. Also note the ... in example 1. They imply that some -definitions are not visible, i.e. the definitions of ils_origy, -ils_ben, etc., as it is not possible to use an +definitions are not visible in the example 1, i.e. the definitions of ils_origy, +ils_ben, etc. However, please note that it is not possible to use an incomelist as a component of another incomelist without defining it beforehand. Moreover, if an incomelist is composed of one or more simulated variables, these variables must be calculated before any use of the incomelist, otherwise diff --git a/EM_Help/HelpFiles/EM_FC_DefInput.htm b/EuromodHelp/HelpFiles/EM_FC_DefInput.htm similarity index 99% rename from EM_Help/HelpFiles/EM_FC_DefInput.htm rename to EuromodHelp/HelpFiles/EM_FC_DefInput.htm index 44317a5..4c6d63d 100644 --- a/EM_Help/HelpFiles/EM_FC_DefInput.htm +++ b/EuromodHelp/HelpFiles/EM_FC_DefInput.htm @@ -299,19 +299,19 @@

    The special function DefInput

    Example 4: Threshold
    - + - + - + diff --git a/EM_Help/HelpFiles/EM_FC_DefOutput.htm b/EuromodHelp/HelpFiles/EM_FC_DefOutput.htm similarity index 99% rename from EM_Help/HelpFiles/EM_FC_DefOutput.htm rename to EuromodHelp/HelpFiles/EM_FC_DefOutput.htm index dadc184..e257139 100644 --- a/EM_Help/HelpFiles/EM_FC_DefOutput.htm +++ b/EuromodHelp/HelpFiles/EM_FC_DefOutput.htm @@ -47,7 +47,7 @@

    The system function DefOutput

    - + @@ -77,7 +77,7 @@

    The system function DefOutput

    10.6789 as 10.68 and 10 as 10.00. The rest of the parameters determine the content of the output file. The parameter var simply tells that the variable idperson should be printed. -The parameter il tells that the incomelist ils_dispy should be printed, in this case this concerns +The parameter il tells that the incomelist ils_dispy should be printed. In this case this concerns the value of the incomelist (i.e. the sum of the comprised variables). The parameter DefIL, in contrast, tells that the value of each entry of the incomelist ils_dispy should be diff --git a/EM_Help/HelpFiles/EM_FC_DefTU_UpdateTU.htm b/EuromodHelp/HelpFiles/EM_FC_DefTU_UpdateTU.htm similarity index 84% rename from EM_Help/HelpFiles/EM_FC_DefTU_UpdateTU.htm rename to EuromodHelp/HelpFiles/EM_FC_DefTU_UpdateTU.htm index 31a991b..12c008b 100644 --- a/EM_Help/HelpFiles/EM_FC_DefTU_UpdateTU.htm +++ b/EuromodHelp/HelpFiles/EM_FC_DefTU_UpdateTU.htm @@ -14,37 +14,15 @@

    The system functions DefTU and UpdateTU

    The possibility of tailoring assessment units for any particular purpose, is one of -the big strength of EUROMOD, but also requires careful application and some +the big strengths of EUROMOD, but also requires careful application and some mental effort. The function DefTU allows for defining assessment units. In principle the function can be applied in any policy. For -reasons of transparency assessment units are however usually defined centrally +reasons of transparency, assessment units are however usually defined centrally in the special policy TUDef_cc. This rule may be disregarded if a particular assessment unit is just used temporarily in one special policy.

    -

    Once an -assessment unit is defined it can be used by any subsequent function and -policy. It is however important to know, at which point of the model run the -values of variables (and derivatively incomelists) are assessed. An example may -help to understand this issue and its implications. Imagine a family assessment -unit, defining a child as a person with "income" below a certain -amount. At the start of the model run this income may not be known, as benefits -and taxes are not yet calculated. Therefore, assessing the income at this point -would need to leave out any simulated variables. As this is not a good -solution, the value of variables is assessed once the assessment unit is first -used.[1] -Note, however, that from this point -the value is not reassessed! That means, if the income refers to a variable -that changes after the first usage of the assessment unit and the assessment -unit is reused after this change, everybody defined as child in first instance -will still be a child, even if the income condition is not valid anymore. The -model applies this behaviour as usually it is confusing if a person is a child -at one point in time and an adult at another point in time. This is aggravated -if units change, i.e. if persons drop out of their original unit, as they are -e.g. not a child anymore. As this behaviour still may be unwanted, the function -UpdateTU provides the -possibility to reassess any assessment unit conditions, as will be described -below. Lets however start with more basic issues.

    +

    Once an assessment unit is defined it can be used by any subsequent function and policy. It is however important to know, at which point of the model spine the values of variables (and derivatively incomelists) are assessed. An example may help to understand this issue and its implications. Imagine a family assessment unit, defining a child as a person with "income" below a certain amount. At the start of the model spine this income may not be known, as benefits and taxes are not yet calculated. Therefore, assessing the income at this point would need to leave out any simulated variables. As this is not a good solution, the value of variables is assessed once the assessment unit is first used [1]. Note, however, that from this point the value is not reassessed! That means, if the income refers to a variable that changes after the first usage of the assessment unit and the assessment unit is reused after this change, everybody defined as child in first instance will still be a child, even if the income condition is not valid anymore. The model applies this behaviour as, for consistency reasons, it does not want to allow a change in the status of a person (i.e. a child becoming an adult, following this example) within the same simulation (at the same point in time). This is aggravated if units change, i.e. if persons drop out of their original unit, as they are e.g. not a child anymore. As this behaviour still may be unwanted, the function UpdateTU provides the possibility to reassess any assessment unit conditions, as will be described below. Lets however start with more basic issues.

    Types and members of assessment units

    @@ -138,7 +116,7 @@

    Types and members of assessment units

    - + @@ -183,7 +161,7 @@

    Types and members of assessment units

    - + @@ -334,26 +312,24 @@

    Types and members of assessment units

    For the assessment unit household_sl, with parameter type set to HH, -all members of all household types belong to one unit, the unit A.[2] -In contrast, for the assessment unit individual_sl, +all members of all household types belong to one unit, the unit A [2]. In contrast, for the assessment unit individual_sl, with parameter type set to IND, all members of all household types belong to a different unit, units A to F. -For the assessment unit family_sl parameter type is set to SUBGROUP, i.e. +For the assessment unit family_sl, parameter type is set to SUBGROUP, i.e. the household is potentially split up into several units. With respect to the parameter members such a unit comprises Partners and OwnChildren. To -interpret this one needs to know that these relations are conceived in relation +interpret this, one needs to know that these relations are conceived in relation to the "head" of the assessment unit, i.e. the parameter members must be read as follows: an assessment unit, as defined by family_sl, consists of the -"head", his "partner" and their "own children". -The paragraphs below will complain the double quoted terms in detail, for now +"head", her/his "partner" and their "own children". +The paragraphs below will explain the double quoted terms in detail, for now we settle for their intuitive meaning. Household 1 consists of a head, a partner (note variable idpartner) and their two own children (note variables idmother/idfather), therefore they all belong to one unit A. Household 2 consists of a couple, i.e. head and partner, they also belong both to unit A. Household 3 consists of a lone parent and her/his child, i.e. head and own child, consequently they also belong both to unit A. Household 4 is a -single household, obviously there can be only one unit (A). As this gets -boring, household 5 is split into two one-person units A and B. The two singles +single household, and so there can be only one unit (A). Household 5 is split into two one-person units A and B. The two singles are neither partners nor children of each other, therefore they form separate units. Finally, household 6 consists of unit A, comprising the head (person 601), her/his partner (person 602, note variable idpartner) @@ -371,7 +347,7 @@

    Defining the head of an assessment unit

    is the head; if there are two or more equally rich and equally old persons, the person with the lowest idperson is the head. "Richest" is defined by the variable or incomelist indicated by -parameter HeadDefInc, which is set to ils_origy by default. Age is unsurprisingly defined by the +parameter HeadDefInc, which is set to ils_origy by default. Age is defined by the variable dag. In fact, if the assessment unit type is SUBGROUP, finding the head has to be repeated until all members of the household are assigned to a unit. That means, firstly (simplifying) the richest person of the household is found @@ -413,7 +389,7 @@

    Defining the head of an assessment unit

    - + @@ -427,7 +403,7 @@

    Defining the head of an assessment unit

    condition can be head. That means, example 2 describes a matriarchal society, as only women can be head. Among the women it is still the richest (oldest, ) who is chosen to be head. This condition, however, entails a problem, as the -model, for obvious reasons, does not allow for headless households. So what +model does not allow for headless households. So what happens to womanless households? Due to the parameter StopIfNoHeadFound (whose default value is no) the model will drop the extended head condition where necessary, i.e. if there is no person (left within the not yet assigned @@ -437,9 +413,9 @@

    Defining the head of an assessment unit

    without any women and stop its execution.

    Note, that -the extended head condition has a default value of !{IsDepChild}. That means that, +the extended head condition has a default value of !IsDepChild. That means that, if the parameter is not explicitly defined, children cannot be head and, if the -parameter StopIfNoHeadFound is also set to yes, the model will issue an error +parameter StopIfNoHeadFound is also set to "yes", the model will issue an error message if there are adultless households. To understand the rational of these defaults, consider the following household, a child condition of being younger than 18 and parameter members set to Partner & OwnDepChild.

    @@ -452,8 +428,8 @@

    Defining the head of an assessment unit

    - - + + @@ -499,12 +475,12 @@

    Defining the head of an assessment unit

    The 17 years old person 104 is a dependent child, with respect to the condition assumed above. However, he/she is also the "richest" person -in this poor household. Without the extended head condition set to !{IsDepChild}, person 104 becomes the first head, without +in this very low income household. Without the extended head condition set to !IsDepChild, person 104 becomes the first head, without any other persons in her/his unit (he/she has no partner or children). Person 101 becomes the second head with persons 102 (partner) and 103 (dependent -child) in his unit. In contrast, with the extended head condition set to !{IsDepChild}, person 104 is out ruled to be head. Instead +child) in her/his unit. In contrast, with the extended head condition set to !IsDepChild, person 104 is out ruled to be head. Instead person 101, being the oldest, becomes the first head with all other household -members in his unit, including person 104, as he/she is his child. Hence, the +members in her/his unit, including person 104, as he/she is his/her child. Hence, the default extended head condition ensures that dependent children do not get separated from their parents.

    @@ -512,17 +488,17 @@

    Defining the head of an assessment unit

    the approach entails a problem. If the child condition generates adultless households, the model will issue and error message and stop. This can be avoided by setting the parameter StopIfNoHeadFound -to no, putting up with some child heads. If child +to "no", putting up with some child heads. If child heads are unacceptable, one could still overwrite the extended head condition -(e.g. setting ExtHeadCond to {1}), +(e.g. setting ExtHeadCond to 1), and use the parameter NoChildIfHead, which is explained in more detail in the next paragraph.

    Before turning to this, note that the default of parameter ExtHeadCond is overwritten in example 2. If this is unwanted, the parameter must be changed -to {Default} & {dgn=0}. This will be explained in -more detail in the paragraph next but one.

    +to Default & dgn=0. This will be explained in +more detail in the next section.

    Defining dependent children

    @@ -531,9 +507,9 @@

    Defining dependent children

    next paragraph will describe a couple of conditions defining other "statuses" within the assessment unit. This paragraph picks up the condition for being a dependent child. An own paragraph is devoted to this -issue, not only as is one of the most important parts of assessment unit +issue, not only it is one of the most important parts of assessment unit specifications, but also as it is frequently a prerequisite for other conditions -(as it is in fact the case for the already discussed extended head condition !{IsDepChild}). Being a dependent child is specified by +(as it is in fact the case for the already discussed extended head condition !IsDepChild). Being a dependent child is specified by the parameter DepChildCond. Example 3 illustrates the use of this parameter.

    @@ -561,7 +537,7 @@

    Defining dependent children

    - +
    File SomeInputFile.txt:
    idpersonidhh sin01_s sin02_s $SomeVar
    1011 123 321 132
    1234012 789 987 798 disposable income
    DefIL1DefIL ils_dispy variables contained in incomelist disposable income
    family_sl
    typical familyfamily 1 101 102 A
    typical familyfamily 2 201 202
    ExtHeadCond{dgn=0}dgn=0
    idfather dag ils_origyExtHeadCond=
    !{IsDepChild}
    ExtHeadCond={1}ExtHeadCond=
    !IsDepChild
    ExtHeadCond=1
    101
    DepChildCond{dag<=15} | ({dag<=19} & {IsInEducation})dag<=15 | (dag<=19 & IsInEducation)
    @@ -606,7 +582,7 @@

    Defining dependent children

    DepChildCond - {dag<=15} | ({dag<=19} & {IsInEducation}) + dag<=15 | (dag<=19 & IsInEducation) @@ -696,8 +672,8 @@

    Defining dependent children

    -

    Person 101 is the first head of this household, as he is the richest. He -forms the assessment unit A together with person 102, his partner, and persons 105 +

    Person 101 is the first head of this household, as he/she is the richest. He +forms the assessment unit A together with person 102, his/her partner, and persons 105 and 106, their dependent children. Persons 103 and 104 are no dependent children with respect to the definition of parameter DepChildCond. Therefore, they do not belong to their fathers assessment unit, but form own @@ -739,12 +715,12 @@

    Defining dependent children

    DepChildCond - {dag<=15} | ({dag<=19} & {IsInEducation}) + dag<=15 | (dag<=19 & IsInEducation) ExtHeadCond - {1} + 1 @@ -761,7 +737,7 @@

    Defining dependent children

    Again some example households may illustrate what these parameter settings effect. Note, that the default extended head condition, which usually prevents -dependent children from being head, is "switched off" {1} means that everyone fulfils the condition, i.e. +dependent children from being head, is "switched off" 1 means that everyone fulfils the condition, i.e. everyone can potentially be a head.

    @@ -856,8 +832,8 @@

    Defining dependent children

    and not older than 19. With the parameter NoChildIfHead set to yes this condition is "overruled", i.e. being a head predominates being a dependent child. Note, that without -providing any further parameters, the model would issue an error message for -this household and stop, as the default of parameter ExtHeadCond +providing any further parameters or setting ExtHeadCond to 1, the model would issue an error message for +this household and stop, as the default of parameter ExtHeadCond (!IsDepChild) does not allow for child heads. Another way of preventing the stop was described above (setting parameter StopIfNoHeadFound to no). This again highlights that modellers have @@ -869,7 +845,7 @@

    Defining dependent children

    consists of a young couple. Person 201 is head, as she/he is the richest. Person 202 is her/his partner and therefore belongs to her/his unit. Person 202 is in education and not older than 19, i.e. a dependent child with respect to -parameter DepChildCond. However, with the parameter NoChildIfPartner set to yes +parameter DepChildCond. However, with the parameter NoChildIfPartner set to "yes" this condition is "overruled", i.e. being a partner predominates being a dependent child. Finally, household 3 consists of a couple without income and their 18-year-old child, who has a tiny income. As there are no @@ -877,8 +853,7 @@

    Defining dependent children

    head, though she/he is a dependent child with respect to parameter DepChildCond. Her/his parents do not belong to her/his unit, as they are neither her/his partner nor her/his children, therefore they form an own unit. If this split up of a family is "good" or not -depends on the application. The subject will be further discussed in the -paragraph next but one.

    +depends on the application. The subject will be further discussed in the next section.

    Defining "statuses" within the assessment unit

    @@ -938,7 +913,7 @@

    Defining "statuses" within the assessment unit

    - + @@ -963,7 +938,7 @@

    Defining "statuses" within the assessment unit

    - +
    PartnerCond{head:idperson=idpartner}head:idperson=idpartner
    PartnerCond{Default} & {IsMarried}Default & IsMarried
    @@ -975,22 +950,21 @@

    Defining "statuses" within the assessment unit

    first and the second assessment unit, couple1_sl and couple2_sl, are in fact identically, as the parameter PartnerCond is set to its default value, -which is {head:idperson=idpartner}. To understand this +which is head:idperson=idpartner. To understand this condition one needs to know that conditions used in assessment unit definitions allow for two special features (in addition to those provided in general by conditions, see section EUROMOD Functions - The policy function Elig). One of them is the possibility to use the prefixes head: and partner:. They -denote, that the subsequent variable refers to the head respectively the -partner of the unit. Please note, that the prefixes can only be used with -variables, but not with incomelists or queries. Knowing this we can interpret {head:idperson=idpartner}, sloppy speaking, as being a -partner means that ones own partner id is set to the heads id. Finally, the +denote, that the subsequent variable refers to the head and the +partner of the unit, respectively. Please note, that the prefixes can only be used with +variables, but not with incomelists or queries. Knowing this we can interpret head:idperson=idpartner, as a condition that states that the partner of the subgroup is the head's partner. Finally, the third assessment unit in example 6, couple3_sl, uses -the second "extra feature" provided by assessment unit conditions, {Default}, which simply denotes the default setting of the +the second "extra feature" provided by assessment unit conditions, Default, which simply denotes the default setting of the respective condition. That means, that the parameter PartnerCond -of couple3_sl translates to {head:idperson=idpartner}&{IsMarried}. +of couple3_sl translates to head:idperson=idpartner&IsMarried. In other words, this feature provides the possibility to further define the default condition. In the example, partners are not only identified by their -id, but in addition they must be married (hopefully to their partner).

    +id, but in addition they must be married.

    Now we are in the position to list the possible settings of the parameter members and @@ -1016,9 +990,9 @@

    Defining "statuses" within the assessment unit

    parameters default value, and even more for changing or extending them, it is necessary to know how the model processes the single conditions. For example, if a condition uses the prefix :head, the head must -be identified beforehand. Similarly, if a condition uses {IsDepChild}, -the parameter DepChildCond must be evaluated before. -The model interprets the conditions in the following order:[3]

    +be identified beforehand. Similarly, if a condition uses IsDepChild, +then the parameter DepChildCond must be evaluated before. +The model interprets the conditions in the following order [3]:

    1. DepChildCond
    2. @@ -1062,12 +1036,12 @@

      Defining "statuses" within the assessment unit

      • DepChildCond: If the parameter is not explicitly defined, nobody is a dependent child. - There is however a default setting that can be assessed with {Default}, whose main purpose is to avoid the split up of + There is however a default setting that can be assessed with Default, whose main purpose is to avoid the split up of families and is explained in more detail below.
      • LooseDepChildCond: The default definition of a "loose" dependent child describes a person, who is a dependent child with respect to DepChildCond, but has neither mother nor father with - respect to the variables idmother or idfather.[4] Loose dependent children are + respect to the variables idmother or idfather [4]. Loose dependent children are frequently a problem, if they form their own assessment unit, as they are not identified as the child of some adult. Imagine a three years old receiving its own child benefit, as it is the head of its own unit. Therefore the parameter members allows for the explicit assignment of loose @@ -1083,12 +1057,12 @@

        Defining "statuses" within the assessment unit

      • OwnChildCond: The default definition of an own child is being the child of the head or her/his partner (as defined by PartnerCond) with - respect to the variables idmother or idfather.[4] Note, that a such defined child + respect to the variables idmother or idfather [4]. Note, that a such defined child does not need to be a dependent child (as defined by DepChildCond), which may lead to odd constellations. For illustration, imagine an extended family, where a 70-year-old grandfather with a high pension lives with his 40 - years old son and his family. Setting members to OwnChild may result in splitting the household in a unit with - the grandfather and his son and another unit with the daughter in law and the + years old son and his his partner and children. Setting members to OwnChild may result in splitting the household in a unit with + the grandfather and his son and another unit with the partner and the children. More about this below.
      • OwnDepChildCond: The default definition of an own child is being an own child (as @@ -1098,20 +1072,20 @@

        Defining "statuses" within the assessment unit

      • DepParentCond: The default definition of a dependent parent is being the parent of the head or her/his partner (as defined by PartnerCond) - with respect to the variables idmother or idfather.[5] Note, that this condition in fact does + with respect to the variables idmother or idfather [5]. Note, that this condition in fact does not define any "dependency". Thats because such a dependency can hardly be generalised, but depends on circumstances. That means that, if the parameter members includes the type DepParent, it is nearly always necessary to further define - the parameter DepParentCond as {Default}&.
      • + the parameter DepParentCond as Default&. -
      • DepRelativeCond: The default definition of a dependent relative is {0}, +
      • DepRelativeCond: The default definition of a dependent relative is 0, i.e. not being a dependent relative. That means that, if the parameter members includes the type DepRelative, the parameter DepRelativeCond must define such a dependent relative.
      • LoneParentCond: The default definition of a lone parent is being the parent of at least one dependent child (as defined by DepChildCond) - with respect to the variables idmother or idfather[4] and not having a partner with respect to + with respect to the variables idmother or idfather [4] and not having a partner with respect to variable idpartner.
      @@ -1119,12 +1093,12 @@

      Avoiding to split up families

      This section presents some parameters, which may help to avoid the split up of households into odd units. Lets start this by explaining the rational -for the {Default} of the parameter DepChildCond. As briefly mentioned above, if the parameter +for the Default of the parameter DepChildCond. As briefly mentioned above, if the parameter is not explicitly defined, nobody is a dependent child. There is however a -default setting that can be assessed with {Default}, -which translates to !{isparent} & {idpartner=0}. -The first part of this setting !{isparent} prevents -that children get separated from their child-parents and the second part {idpartner=0} prevents that partners get separated from +default setting that can be assessed with Default, +which translates to !isparent & idpartner=0. +The first part of this setting !isparent prevents +that children get separated from their child-parents and the second part idpartner=0 prevents that partners get separated from their child-partners. This is illustrated by example 7.

      @@ -1176,7 +1150,7 @@

      Avoiding to split up families

      - + @@ -1201,7 +1175,7 @@

      Avoiding to split up families

      - +
      DepChildCond{dag<20} & {ils_origy=0}dag<20 & ils_origy=0
      DepChildCond{Default} & {dag<20} & {ils_origy=0}Default & dag<20 & ils_origy=0
      @@ -1296,7 +1270,7 @@

      Avoiding to split up families

      0 0 45 - 0 + 2000 0 0 0 @@ -1311,7 +1285,7 @@

      Avoiding to split up families

      0 0 43 - 0 + 1500 0 0 0 @@ -1326,7 +1300,7 @@

      Avoiding to split up families

      202 201 19 - 2000 + 0 0 1 0 @@ -1341,7 +1315,7 @@

      Avoiding to split up families

      0 0 18 - 1500 + 0 0 1 0 @@ -1417,10 +1391,10 @@

      Avoiding to split up families

      problems. Finally, the third definition, family3_sl, overcomes these problems, whether however the suggested solution is the desired depends on the concrete requirements. Now, lets investigate these statements. -Household 1 is a typical household: mother father and two small children. family1_sl does not even come up with this common family +Household 1: mother father and two small children. family1_sl does not even come up with this common family structure. The children form their own unit as, due to the missing parameter DepChildCond, nobody is a dependent child. family2_sl and family3_sl seem ok, persons 103 and 104 are dependent children and therefore assigned to unit -of their parents. Household 2 is less typical: a young couple, having no +of their parents. Household 2: a young couple, having no income, lives with the parents of one partner. In this case all three family definitions show a split that is not obviously odd. With the definitions of family1_sl and family3_sl the young couple forms an own unit. In both cases this is caused by the fact that @@ -1429,7 +1403,7 @@

      Avoiding to split up families

      caused by the missing dependent child condition, in contrast with the definition of family3_sl the 19 years old is a dependent child with respect to the age and income conditions, however she/he -does not fulfil the condition {idpartner=0}. family2_sl separates the child in law from the rest, as +does not fulfil the condition idpartner=0. family2_sl separates the child in law from the rest, as the 19 years old in this case is a dependent child and therefore belongs to the unit of her/his parents. As a result the child in law is left over without any relation entitling her/him to belong to the unit of the parents of her/his @@ -1444,7 +1418,7 @@

      Avoiding to split up families

      including loose dependent children would solve the problem, because the baby is no loose child, as it has a mother. Whether the split with family3_sl is desired depends on requirements, at least it is plausible. The young mother -stays together with her child, as the condition !{isparent} +stays together with her child, as the condition !isparent out rules her for being a dependent child herself, but the two get separated from the grandparents.

      @@ -1486,7 +1460,7 @@

      Avoiding to split up families

      DepChildCond - {dag<20} & {ils_origy=0} + dag<20 & ils_origy=0 @@ -1632,8 +1606,8 @@

      Avoiding to split up families

      0 302 301 - 0 19 + 0 1 A @@ -1707,7 +1681,7 @@

      Using conditions which refer to income

      DepChildCond - {dag<20} & {ils_origY#1<200#m} + dag<20 & ils_origY#1<200#m @@ -1764,7 +1738,7 @@

      Using conditions which refer to income

      DepChildCond - {dag<20} & {GetParentsIncome#1<=1000#m} + dag<20 & GetParentsIncome#1<=1000#m @@ -1777,7 +1751,7 @@

      Using conditions which refer to income

      In the example dependent children are persons younger than 20, whose -parents (as defined by variables idmother and idfather[6]) +parents (as defined by variables idmother and idfather [6]) income, as defined by incomelist ils_origY, does not exceed 1,000 Euro monthly. (For the definition of the query GetParentsIncome also see section EUROMOD Functions - Queries.)

      @@ -1821,13 +1795,13 @@

      Using conditions which refer to income

      DepChildCond - {dag<20} + dag<20 - DepChildCond + DepParentCond - {dag>60} & {GetParentsIncome#1<=1000#m} + dag>60 & GetParentsIncome#1<=1000#m @@ -1863,13 +1837,13 @@

      Using conditions which refer to income

      DepChildCond - {dag<20} + dag<20 - DepChildCond + DepParentCond - {dag>60} & {ils_origy#1<=1000#m} + dag>60 & ils_origy#1<=1000#m @@ -1880,7 +1854,7 @@

      Using conditions which refer to income

      -

      By and large the two assessment unit definitions in example 11 do the +

      The two assessment unit definitions in example 11 do the same. Both define dependent parents as persons aged older than 60. The joint income, as defined by incomelist ils_origY, of the person and her/his partner may not exceed 1,000 Euro monthly. The only difference is, that the query GetCoupleIncome used in the first version does not allow for an own @@ -1926,13 +1900,13 @@

      Using conditions which refer to income

      DepChildCond - {dag<20} + dag<20 - DepChildCond + DepParentCond - {dag>60} & {ils_origy#1<=1000#m} & {GetPartnerIncome#2<=500#m} + dag>60 & ils_origy#1<=1000#m & GetPartnerIncome#2<=500#m @@ -1943,7 +1917,7 @@

      Using conditions which refer to income

      #_income - 1 + 2 ils_origy @@ -1961,7 +1935,7 @@

      Updating assessment units

      As outlined above, household members are assigned to respective units once an assessment unit is first used. This assignment is not changed with subsequent uses, even if circumstances change, i.e. some conditions are not -fulfilled anymore or get fulfilled at a later point in the model run. However, +fulfilled anymore or get fulfilled at a later point in the model spine. However, the reassessment of the units can be enforced by using the function UpdateTU.

      Example 13 intends to illustrate these procedures.

      @@ -2067,7 +2041,7 @@

      Updating assessment units

      DepChildCond - {dag<25} & {il_MeansTest#1<=500#m} + dag<25 & il_MeansTest#1<=500#m @@ -2133,7 +2107,7 @@

      Updating assessment units

      elig_cond - {IsInEducation} & {dag>17} & {il_earns#1<1500#m} + IsInEducation & dag>17 & il_earns#1<1500#m @@ -2199,7 +2173,7 @@

      Updating assessment units

      comp_cond 1 - {IsHead} + IsHead @@ -2211,7 +2185,7 @@

      Updating assessment units

      comp_cond 2 - {IsPartner} + IsPartner @@ -2223,7 +2197,7 @@

      Updating assessment units

      comp_cond 3 - {IsDepChild} + IsDepChild @@ -2372,8 +2346,7 @@

      Excursus: using footnote parameters to change the assessment unit of operand

      Section EUROMOD Functions - Footnote parameters for the further specification of operands explains how to change the level of assessment for single operands of a formula or a condition. A special rule must -be taken into account when this possibility is used, which is explained here -and not already in this section, as the knowledge imparted in the current +be taken into account when this possibility is used, which is explained here and not before, as the knowledge imparted in the current section is of advantage in understanding the rule. Moreover, though more advanced users definitely should be aware of it, the rule better fits in an excursus, as it is a bit challenging. The rule reads: the assessment unit of the operand must "contain" the assessment @@ -2483,7 +2456,7 @@

      Excursus: using footnote parameters to change the assessment unit of operand condition - {dag<50} & {yem<1500#m} & {poa#1=0} + dag<50 & yem<1500#m & poa#1=0 @@ -2501,17 +2474,7 @@

      Excursus: using footnote parameters to change the assessment unit of operand -

      In the example a household member becomes eligible if she/he is younger than -50, the employment income of her/his family does not exceed 1,500 Euro monthly, -and nobody within the household she/he lives in receives old age pension. The -formulation "a household member becomes eligible" instead of -"the household becomes eligible" already provides a hint for the -rational of the condition exception. In fact conditions are always evaluated on -individual level, any assessment unit level condition just means that all -individuals within the assessment unit fulfils the condition. That means, on -closer examination, the condition exception is not really an exception, as one -always changes the assessment level from individual to some other unit that -necessarily must contain the individual as the smallest unit.

      +

      In the example a household member becomes eligible if she/he is younger than 50, the employment income of her/his family does not exceed 1,500 Euro monthly, and nobody within the household she/he lives in receives old age pension. The formulation "a household member becomes eligible" instead of "the household becomes eligible" already provides a hint for the rational of the condition exception. In fact conditions are always evaluated on individual level, any assessment unit level condition just means that all individuals within the assessment unit fulfils the condition. That means, on closer examination, the condition exception is not really an exception, as one always changes the assessment level from individual to some other unit that necessarily must contain the individual as the smallest unit.

       

      @@ -2521,51 +2484,19 @@

      Excursus: using footnote parameters to change the assessment unit of operand
      -

      [1] A rather special case should be mentioned in this context. If an -assessment unit is used with the parameter #i_level, -assessment unit formation only takes place if the function is carried out for -at least one unit. That means if no unit is eligible (parameter who_must_be_elig) the assessment unit is -not formed.

      - -

      [2] Please note, that the notation -A,B,,F just serves explanation purposes and is not really used by the model. -See section EUROMOD Functions - The system -function DefOutput, unitinfo parameters, for the possibility of putting out -assessment unit settings.

      - -

      [3] Note, that the list indicates the -order in which the model operates the conditions, but not the order in -which the parameters should be defined, i.e. it is for example no problem to -define the parameter DepPartnerCond -before the parameter DepChildCond.

      - -

      [4] Respectively with respect to the -variable idparent, -if this variable is used in the dataset instead of idmother and idfather.

      - -

      [5] Respectively with respect to the -variable idparent, -if this variable is used in the dataset instead of idmother and idfather. In -this case also a person is a dependent parent, whose partner (with respect to -variable idpartner) -is the parent of the head or her/his partner. The latter takes into account, -that only one parent can be defined by the variable idparent and assumes that this -parents partner is the other parent.

      - -

      [6] Respectively with respect to the -variable idparent, -if this variable is used in the dataset instead of idmother and idfather.

      - -

      [7] To complicate things a bit further, individual assessment units are -exempted from the container rule as another rule applies: the individual within -the unit to be taken into account is the head. With this information the second -function of the example would read as follows, if the parameter #1_level -was set to individual_sl: each household receives 500 Euro minus the -employment income of the head. To your relief, this exemption is nearly ever -applicable and just mentioned as a warning, as such (usually intransparent or -even wrong) modelling does not lead to an error message. The reason for the -exception is of technical nature, as it allows for the following (sensible) -exception with respect to conditions.

      +

      [1] A rather special case should be mentioned in this context. If an assessment unit is used with the parameter #i_level, assessment unit formation only takes place if the function is carried out for at least one unit. That means if no unit is eligible (parameter who_must_be_elig) the assessment unit is not formed.

      + +

      [2] Please note, that the notation A,B,,F just serves explanation purposes and is not really used by the model. See section EUROMOD Functions - The system function DefOutput, unitinfo parameters, for the possibility of putting out assessment unit settings.

      + +

      [3] Note, that the list indicates the order in which the model operates the conditions, but not the order in which the parameters should be defined, i.e. it is for example no problem to define the parameter DepPartnerCond before the parameter DepChildCond.

      + +

      [4] Respectively with respect to the variable idparent, if this variable is used in the dataset instead of idmother and idfather.

      + +

      [5] Respectively with respect to the variable idparent, if this variable is used in the dataset instead of idmother and idfather. In this case also a person is a dependent parent, whose partner (with respect to variable idpartner) is the parent of the head or her/his partner. The latter takes into account, that only one parent can be defined by the variable idparent and assumes that this parents partner is the other parent.

      + +

      [6] Respectively with respect to the variable idparent, if this variable is used in the dataset instead of idmother and idfather.

      + +

      [7] To complicate things a bit further, individual assessment units are exempted from the container rule as another rule applies: the individual within the unit to be taken into account is the head. With this information the second function of the example would read as follows, if the parameter #1_level was set to individual_sl: each household receives 500 Euro minus the employment income of the head. To your relief, this exemption is nearly ever applicable and just mentioned as a warning, as such (usually intransparent or even wrong) modelling does not lead to an error message. The reason for the exception is of technical nature, as it allows for the following (sensible) exception with respect to conditions.

      diff --git a/EM_Help/HelpFiles/EM_FC_DefVar_DefConst.htm b/EuromodHelp/HelpFiles/EM_FC_DefVar_DefConst.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_DefVar_DefConst.htm rename to EuromodHelp/HelpFiles/EM_FC_DefVar_DefConst.htm index 0fb1b6f..14e3fa2 100644 --- a/EM_Help/HelpFiles/EM_FC_DefVar_DefConst.htm +++ b/EuromodHelp/HelpFiles/EM_FC_DefVar_DefConst.htm @@ -298,7 +298,7 @@

      The system functions DefVar and DefConst

      elig_cond - {yem < $MinWage} + yem < $MinWage @@ -321,7 +321,7 @@

      The system functions DefVar and DefConst

      can be used. First of all, variables can be monetary or non-monetary. When they are monetary and used in a function where the TU contains multiple individuals, they will return the sum of values of all TU members. When they are non-monetary, they will return the value of the head. Constants on the other hand, although they are always named -as monetaqry, they will always return the value of the TU head. This is because their purpose is to be used as a +as monetary, they will always return the value of the TU head. This is because their purpose is to be used as a fixed (or scalar) number. Secondly, if a constant is defined without a Condition, then the same value will be applied to all observations, and this constant can also be used for run conditions (Run_Cond). In contrast, variables and constants defined with conditions, cannot be used in run conditions, as their value could be different diff --git a/EM_Help/HelpFiles/EM_FC_DescriptionOfFunctions.htm b/EuromodHelp/HelpFiles/EM_FC_DescriptionOfFunctions.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_DescriptionOfFunctions.htm rename to EuromodHelp/HelpFiles/EM_FC_DescriptionOfFunctions.htm diff --git a/EM_Help/HelpFiles/EM_FC_DropUnit_KeepUnit.htm b/EuromodHelp/HelpFiles/EM_FC_DropUnit_KeepUnit.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_DropUnit_KeepUnit.htm rename to EuromodHelp/HelpFiles/EM_FC_DropUnit_KeepUnit.htm diff --git a/EM_Help/HelpFiles/EM_FC_Elig.htm b/EuromodHelp/HelpFiles/EM_FC_Elig.htm similarity index 87% rename from EM_Help/HelpFiles/EM_FC_Elig.htm rename to EuromodHelp/HelpFiles/EM_FC_Elig.htm index f259512..2ea36be 100644 --- a/EM_Help/HelpFiles/EM_FC_Elig.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Elig.htm @@ -62,12 +62,12 @@

      Interpreting conditions with respect to the assessment unit

      elig_cond - {nDepChildrenInTaxunit>2} & {dag<10} & {ils_dispy<20000#y} + nDepChildrenInTaxunit>2 & dag<10 & ils_dispy<20000#y TAX_UNIT - sben_family_sl + tu_sben_family_sl @@ -77,7 +77,7 @@

      Interpreting conditions with respect to the assessment unit

      who_must_be_elig - one_member + one @@ -92,19 +92,19 @@

      Interpreting conditions with respect to the assessment unit

      TAX_UNIT - sben_family_sl + tu_sben_family_sl

      The benefit of monthly 100 Euro is received by families with more than two dependent children, where at least one is younger than ten and familys -disposable income is below 20,000 Euro annually. Lets figure out why. elig_cond consists of three conditions: {nDepChildrenInTaxunit>2} +disposable income is below 20,000 Euro annually. Lets figure out why. elig_cond consists of three conditions: nDepChildrenInTaxunit>2 clearly can be assessed on assessment unit level -only. {ils_dispy<20000#y} is also an +only. ils_dispy<20000#y is also an assessment unit level condition, because we know from section EUROMOD Functions - Parameter values and the assessment unit that incomelists, if not defined elsewise, are -assessed for the assessment unit. {dag<10}, on the contrary, is clearly an individual level condition. With +assessed for the assessment unit. dag<10, on the contrary, is clearly an individual level condition. With respect to the rules outlined above, the output variable of Elig, i.e. sel_s, is set to one for all children aged less than 10 years, living in familys with more than two dependent children and disposable income below 20,000 Euro annually. Those children fulfil the individual level condition of @@ -138,7 +138,7 @@

      Interpreting conditions with respect to the assessment unit

      elig_cond - {nDepChildrenInTaxunit>2} & {dag<10} & {ils_dispy#1<20000#y} + nDepChildrenInTaxunit>2 & dag<10 & ils_dispy#1<20000#y @@ -150,7 +150,7 @@

      Interpreting conditions with respect to the assessment unit

      TAX_UNIT - sben_family_sl + tu_sben_family_sl @@ -162,7 +162,7 @@

      Interpreting conditions with respect to the assessment unit

      who_must_be_elig - one_member + one @@ -180,7 +180,7 @@

      Interpreting conditions with respect to the assessment unit

      TAX_UNIT - sben_family_sl + tu_sben_family_sl @@ -192,15 +192,6 @@

      Interpreting conditions with respect to the assessment unit

      -
      - -
      - -

      [1] Please note, that the not-operator ! -only works on single conditions, e.g. !({IsDisabled} & {IsUnemployed}), is -incorrect syntax.

      - -
      diff --git a/EM_Help/HelpFiles/EM_FC_FootnoteParameters.htm b/EuromodHelp/HelpFiles/EM_FC_FootnoteParameters.htm similarity index 80% rename from EM_Help/HelpFiles/EM_FC_FootnoteParameters.htm rename to EuromodHelp/HelpFiles/EM_FC_FootnoteParameters.htm index 950ddf6..260a0c2 100644 --- a/EM_Help/HelpFiles/EM_FC_FootnoteParameters.htm +++ b/EuromodHelp/HelpFiles/EM_FC_FootnoteParameters.htm @@ -18,7 +18,7 @@

      Footnote parameters for the further specification of operands

      respective footnote parameters. Explanations and examples below illustrate what this means and introduce another bunch of common parameters, as footnote parameters are applicable with several functions (more specific, with all -functions providing formula and/or condition parameters[1]).

      +functions providing formula and/or condition parameters).

      Further specification of operands by footnotes: limits

      @@ -83,7 +83,7 @@

      Further specification of operands by footnotes: limits

      are to be further specified, while the parameters #_uplim, Grp/No 1 and #_uplim, Grp/No 2 conduct this further specification, in this case by defining the mentioned limits.

      -

      Note that, footnotes can apply any integer number, e.g. +

      Note that footnotes can apply any integer number, e.g. using #4711 and #_uplim, Grp/No 4711 instead of #1 and #_uplim, Grp/No 1 would be possible as well. Also note that, footnotes can be used more than once: if the @@ -277,17 +277,11 @@

      Further specification of operands by footnotes: assessment units

      i.e. some definition of the family. Thus the warning says that only assessment units containing the family are allowed, and obviously an individuals family is not part of the individual (but the other way round). But why is this problematic? -The answer is, that the programme would not know which individual in the family and therefore +The answer is that the programme would not know which individual in the family and therefore prefers to ignore the level change over possibly causing confusion by doing something arbitrary. That means level changes are only possible to bigger (comprising) units (in the example e.g. the whole household) but not to smaller (sub) units.

      -

      This bad example demonstrates the clubfoot of the high -flexibility offered by adaptable definitions of assessment units in general and -by the possibility of applying them on the most detailed level in particular, -and suggests using these options with great care, especially with respect to -transparency.

      -

      Further specification of operands by footnotes: specification of queries

      A few queries need or allow for further specification. For example for the query GetPartnerIncome @@ -349,76 +343,10 @@

      Further specification of operands by footnotes: specification of queries

      EUROMOD Functions - Queries.

      -

      Further specification of operands by footnotes: types

      - -

      For the sake of completeness the following example illustrates -a rarely applicable usage of footnotes. In principle EUROMOD automatically -finds out whether a non-numeric operand is a variable, an incomelist -or a query. If there is however an ambiguity because a variable and an incomelist have the same name, the type of an operand can -be explicitly defined. As such equal naming is in fact bad modelling style (not -least as names of incomelists should always start -with il -or ils) the usage of this -functionality should be exceptional. Example 5 shows how to (unnecessarily) -define yem as a variable. -Allowed parameter values are var -(or variable), il (or incomelist) -and query.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Example 5:
      PolicyGrp/NoSL_demoComment
      func_ArithOpon
      formulayem#1 * 0.1
      #_type1var
      output_varstm01_s
      TAX_UNITtu_individual_sl
      -

       

      -
      - -
      - -

      [1]Note that in conditions footnotes can be placed either inside -the curly brackets, i.e. {A#x} or outside {A}#x. Internally the model changes {A}#x to {A#x}, -respectively {A < B}#x to {A#x < b#x}.

      - -
      - diff --git a/EM_Help/HelpFiles/EM_FC_Formula.htm b/EuromodHelp/HelpFiles/EM_FC_Formula.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Formula.htm rename to EuromodHelp/HelpFiles/EM_FC_Formula.htm diff --git a/EM_Help/HelpFiles/EM_FC_GeneralFeatures.htm b/EuromodHelp/HelpFiles/EM_FC_GeneralFeatures.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_GeneralFeatures.htm rename to EuromodHelp/HelpFiles/EM_FC_GeneralFeatures.htm diff --git a/EM_Help/HelpFiles/EM_FC_HeaderPage.htm b/EuromodHelp/HelpFiles/EM_FC_HeaderPage.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_HeaderPage.htm rename to EuromodHelp/HelpFiles/EM_FC_HeaderPage.htm diff --git a/EM_Help/HelpFiles/EM_FC_ILVarOp.htm b/EuromodHelp/HelpFiles/EM_FC_ILVarOp.htm similarity index 99% rename from EM_Help/HelpFiles/EM_FC_ILVarOp.htm rename to EuromodHelp/HelpFiles/EM_FC_ILVarOp.htm index 4234557..ef45610 100644 --- a/EM_Help/HelpFiles/EM_FC_ILVarOp.htm +++ b/EuromodHelp/HelpFiles/EM_FC_ILVarOp.htm @@ -104,7 +104,7 @@

      The special function ILVarOp

      default, as well as parameter sel_var could have been skipped in example 1 as all is default.

      - + diff --git a/EM_Help/HelpFiles/EM_FC_IlArithOp.htm b/EuromodHelp/HelpFiles/EM_FC_IlArithOp.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_IlArithOp.htm rename to EuromodHelp/HelpFiles/EM_FC_IlArithOp.htm diff --git a/EM_Help/HelpFiles/EM_FC_InitVars.htm b/EuromodHelp/HelpFiles/EM_FC_InitVars.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_InitVars.htm rename to EuromodHelp/HelpFiles/EM_FC_InitVars.htm diff --git a/EM_Help/HelpFiles/EM_FC_InteractionsBetweenFunctions.htm b/EuromodHelp/HelpFiles/EM_FC_InteractionsBetweenFunctions.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_InteractionsBetweenFunctions.htm rename to EuromodHelp/HelpFiles/EM_FC_InteractionsBetweenFunctions.htm diff --git a/EM_Help/HelpFiles/EM_FC_Loop_UnitLoop.htm b/EuromodHelp/HelpFiles/EM_FC_Loop_UnitLoop.htm similarity index 97% rename from EM_Help/HelpFiles/EM_FC_Loop_UnitLoop.htm rename to EuromodHelp/HelpFiles/EM_FC_Loop_UnitLoop.htm index a5083f6..efe4c97 100644 --- a/EM_Help/HelpFiles/EM_FC_Loop_UnitLoop.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Loop_UnitLoop.htm @@ -209,9 +209,8 @@

      The special functions Loop and UnitLoop

      policies. In this case it is important to know how the programme identifies the "inner" and "outer loop". If the first_xxx/last_xxx parameters are used, the loop which is defined first will be the inner loop. If the start_after_xxx/stop_before_xxx parameters are used, the loop which -is defined first will be the outer loop.[1] -To make things clearer one could also use the first_xxx/last_xxx parameters for the inner loop and +is defined first will be the outer loop [1]. To make things clearer one could also use the first_xxx/last_xxx parameters for the inner loop and the start_after_xxx/stop_before_xxx parameters for the outer loop (referring to the functions/policies preceding the first respectively following the last function/policy of the loop).

      diff --git a/EM_Help/HelpFiles/EM_FC_Min_Max.htm b/EuromodHelp/HelpFiles/EM_FC_Min_Max.htm similarity index 86% rename from EM_Help/HelpFiles/EM_FC_Min_Max.htm rename to EuromodHelp/HelpFiles/EM_FC_Min_Max.htm index 3d85622..5b62a1a 100644 --- a/EM_Help/HelpFiles/EM_FC_Min_Max.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Min_Max.htm @@ -58,8 +58,7 @@

      The policy functions Min and Max

      Example 1:Example 3:
      Policy SL_demo
      -

      Please note, that formula parameters provide the operators <min> and <max>, -which may allow a more efficient implementation of minima and maxima.

      +

      Please note, that formula parameters provide the operators MIN(2) and MAX(2), which may allow a more efficient implementation of minima and maxima. e.g. min(10, 15), max(3,8), etc.

       

      diff --git a/EuromodHelp/HelpFiles/EM_FC_ParameterTypes.htm b/EuromodHelp/HelpFiles/EM_FC_ParameterTypes.htm new file mode 100644 index 0000000..fa5c955 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_FC_ParameterTypes.htm @@ -0,0 +1,203 @@ + + + + + + +Types of parameter values + + + + +
      + +

      Types of parameter values

      + +

      Apart from classifying parameters with respect to their functionality (i.e. affecting output, limiting result, etc.) or into compulsory/optional, there is another possible grouping. Parameters can be classified by the values they take as follows:

      + +

      Yes/no parameters

      + +

      Such parameters allow only for two values: yes (or 1) and no (or 0).

      + +

      Amount parameters

      + +

      Amount parameters take either monetary or non-monetary amounts. Example 1 shows the tax schedule of a simple income tax policy. There are two bands: one for taxable income below 5,000 Euro annually and one for income above this amount. For the first band a tax of 10% of taxable income is due, for the second the rate is 25%. The parameters band_uplim and band_rate are amount parameters, where the former takes monetary amounts and the latter non-monetary amounts.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Example 1:
      PolicyGrp/NoSL_demoComment
      SchedCalcontax schedule
      baseil_taxableY
      band_upLim15000#yfor annual taxable income up to 5,000
      band_rate10.1the tax amounts to 10% of taxable income
      band_rate20.25and 25% for income above this amount
      output_vartin_s
      TAX_UNITtu_individual_sl
      + +

      Usually amount parameter values are followed by their "period", for example the band limit of 5000 is followed by #y for yearly. EUROMOD internally converts all amounts to monthly, e.g. the 5000 are divided by 12. It is good practise to always indicate a period, though #m for monthly has no real effect, as no conversion to monthly is necessary. It is however more transparent to explicitly state whether amounts are annual, monthly or some other period. Of course there are amounts where a period does not make sense, as for example for the two rate parameters or capital values.

      + +

      The period can take on the following values:

      +
        +
      • #m for monthly (no conversion)
      • +
      • #y for yearly (divided by 12, more precisely multiplied by 0.08333333333333)
      • +
      • #q for quarterly (divided by 3, more precisely multiplied by 0.3333333333333)
      • +
      • #w for weekly (multiplied by 4.34 =365/12/7)
      • +
      • #d for daily (multiplied by 30.5)
      • +
      • #l for labour day (multiplied by 21.73)
      • +
      • #s for labour day in a six days week (multiplied by 26.07)
      • +
      • #c for capital (no conversion)
      • +
      + +

      Moreover each period can be used with r for rate, e.g. #mr for monthly rate. Rules for conversion are the same.

      + +

      Note that, despite of numbers, constants as defined by func_DefConst can be used as amount parameter values.

      + +

      Variable parameters

      + +

      Variable parameters take EUROMOD variables as values (see EUROMOD Basic Concepts - EUROMOD terminology). In most of the examples we come across a very important variable parameter, the parameter output_var. If variable parameters are used with an assessment unit that comprises more than one person the question arises how to interpret this. This issue is dealt with in section EUROMOD Functions - Parameter values and the assessment unit.

      + +

      Incomelist parameters

      + +

      Incomelist parameters take EUROMOD incomelists as values. Incomelists are important EUROMOD concepts. They are usually defined in the special policy ILDef_cc of a countrys parameter file (see EUROMOD Basic Concepts - Presentation of countries' tax-benefit-systems). Section EUROMOD Functions - The system function DefIL describes how to define an incomelist. Generally speaking an incomelist is a variable, which is composed of other variables, e.g. the incomelist il_earns may be the sum of the variables yem (y=income, em=employment) and yse (se=self employment). The name of an incomelist by convention starts with il_ or ils_, where il_ is used for "normal" incomelists and ils_ for system incomelists. The latter are incomelists, which exist in all countries models and have a certain definition, for example ils_dispy is the incomelist for disposable income as defined in EUROMOD. In principle incomelists (once defined) are applied in the same way as variables, therefore there is roughly any parameter which takes only incomelists but not variables.

      + +

      Variable-incomelist parameters

      + +

      A few parameters take as well variables as incomelists as values. As an example, the parameter Share_Prop of the function Allocate features this type.

      + +

      Name parameters

      + +

      Such parameters allow for indicating names, e.g. the name of a file, incomelist, etc. As an example, the parameter File of the function DefOutput is a name parameter, taking the name of the output file.

      + +

      Query parameters

      + +

      EUROMOD offers the so-called "queries" which allow for more complex questions, as for example how many children are in the assessment unit. These queries are listed and described in the section EUROMOD Functions - Queries. The result of a query is either yes or no, e.g. for the query IsLoneParent, or some (monetary or non monetary) value, e.g. for the queries GetPartnerIncome respectively nDepChildrenInTu. Actually, there are no "pure" query parameters, i.e. parameters that only take queries as their values, rather queries are usually used within formulas and conditions.

      + +

      Formula parameters

      + +

      Formula parameters are in fact little calculators. Example 2 shows a somewhat more complex application, by calculating a benefit for persons in education, amounting to 500 Euro monthly, supplemented by half of the expenditure on education. Any other education benefit is deducted from the resulting amount, where a lower limit ensures that no negative benefit results. For determining whether a person is in education the formula applies a query (IsInEducation), the basic benefit is indicated as monetary amount (500#m), the supplement for expenditure on education is calculated by using a variable (xed) and dividing it by a non monetary amount (2). Finally, an incomelist is used to determine other education benefits (il_OthEducBen).

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Example 2:
      PolicySL_demoComment
      ArithOpon
      formulaIsInEducation * (500#m + xed / 2) il_OthEducBen
      lowlim0
      output_varstm01_s
      TAX_UNITtu_individual_sl
      + +

      In general formula parameters take amounts (monetary and non monetary), variables, incomelists and queries as operands and combine them by simple arithmetic operations to calculate some result. Consequently, formula parameters can be used as amount, variable, incomelist and query parameters (by using just one operand of the respective type and no arithmetic operations). In fact, there are no pure query parameters and very few pure amount and incomelist parameters. Section EUROMOD Functions - The policy function ArithOp provides a more detailed description of the formula parameter.

      + +

      Condition parameters

      + +

      Similar to formula parameters condition parameters take amounts, variables, incomelists and queries as operands. However, they combine them by logical and comparison operators to evaluate a condition with a yes/no result. Example 3 shows a somewhat more complex application, which tests whether there is at least one dependent child in the family and if so, whether earnings are below 15,000 Euro annually or unemployment benefits are received. A more detailed description of condition parameters is provided in the section EUROMOD Functions - The policy function Elig.

      + + + + + + + + + + + + + + + + + + + + + + + + +
      Example 3:
      PolicySL_demoComment
      Eligon
      elig_condnDepChildrenInTu>1 & (il_earns<15000#y | bun>0)
      TAX_UNITtu_sben_family_sl
      + +

      Taxunit parameters

      + +

      A few parameters take assessment units as their values, the most important is the parameter TAX_UNIT, which is described in more detail in section EUROMOD Functions - Common Parameters. The name of assessment units by convention starts with tu_.

      + +

      Categorical parameters

      + +

      Some parameters take a limited number of defined values, as for example the parameter who_must_be_elig, taking the values one_member / one_adult / all / all_adults (also see section EUROMOD Functions - Common Parameters).

      + +

      Footnote parameters

      + +

      Finally, there are parameters that serve the further specification of other parameters. They can be easily identified by names starting with the character #, e.g. #_amount. The application of such parameters is described in detail in section EUROMOD Functions - Footnote parameters for the further specification of operands.

      + +

       

      + +
      + + + + diff --git a/EM_Help/HelpFiles/EM_FC_ParameterValues.htm b/EuromodHelp/HelpFiles/EM_FC_ParameterValues.htm similarity index 80% rename from EM_Help/HelpFiles/EM_FC_ParameterValues.htm rename to EuromodHelp/HelpFiles/EM_FC_ParameterValues.htm index 9c5b9b6..d50f066 100644 --- a/EM_Help/HelpFiles/EM_FC_ParameterValues.htm +++ b/EuromodHelp/HelpFiles/EM_FC_ParameterValues.htm @@ -41,22 +41,22 @@

      Assessing the result of a function

      formula IsDisabled * xhc il_earns - benefit funds expenditure for housing + lowlim 0 - if the head of the household is disabled + output_var bho_s - any earnings (received by anyone in the household) + TAX_UNIT tu_household_sl - are deducted + @@ -80,7 +80,7 @@

      Assessing the result of a function

      head of assessment unit - non individual level queries ... + non-individual level queries ... consult description in section
      EUROMOD Functions - Queries consult description in section
      EUROMOD Functions - Queries @@ -94,42 +94,17 @@

      Assessing the result of a function

      of the function and means that values are added up over all members of the unit. -
    3. Who is the head of the assessment unit is - determined on the basis of the respective definition via the function DefTU. (See section EUROMOD Functions - The system functions DefTU and UpdateTU for - information with respect to defining an assessment unit.)
    4. - -
    5. Special care needs to be taken if monetary - variables and incomelists are used in any of the - condition parameters of the function DefTU - (e.g. DepChildCond). The - rule that they are interpreted on assessment unit level is still valid. - However, as the model is operating on a not yet finally defined assessment - unit, it is not clear what this means, if the assessment unit is of type SUBGROUP.[1] - Therefore, it is good practise in such cases to always explicitly define the - level of assessment by using a level parameter (see section EUROMOD Functions - Footnote parameters for - the further specification of operands).
    6. - -
    7. Whether a variable is monetary or non-monetary - is defined in the variable description file. Note that simulated temporary (stmxx_s) and intermediate (sinxx_s) variables are defined - to be monetary.
    8. - -
    9. It is possible to change the assessment unit - generally used by the function (i.e. indicated by parameter TAX_UNIT) for single variables, incomelists - or queries. As examples for the application of this feature consider a personal - level benefit, where a means test refers to family income or a family based - benefit, where a means test should only cover parents income. A detailed - description of this feature is provided in section EUROMOD Functions - Footnote parameters for - the further specification of operands.
    10. +
    11. Who is the head of the assessment unit is determined on the basis of the respective definition via the function DefTU. (See section EUROMOD Functions - The system functions DefTU and UpdateTU for information with respect to defining an assessment unit.)
    12. + +
    13. Special care needs to be taken if monetary variables and incomelists are used in any of the condition parameters of the function DefTU (e.g. DepChildCond). The rule that they are interpreted on assessment unit level is still valid. However, as the model is operating on a not yet finally defined assessment unit, it is not clear what this means, if the assessment unit is of type SUBGROUP [1]. Therefore, it is good practise in such cases to always explicitly define the level of assessment by using a level parameter (see section EUROMOD Functions - Footnote parameters for the further specification of operands).
    14. + +
    15. Whether a variable is monetary or non-monetary is defined in the variable description file (see section Administration of EUROMOD variables). Note that simulated temporary (stmxx_s) and intermediate (sinxx_s) variables are defined to be monetary.
    16. + +
    17. It is possible to change the assessment unit generally used by the function (i.e. indicated by parameter TAX_UNIT) for single variables, incomelists or queries. As examples for the application of this feature consider a personal level benefit, where a means test refers to family income or a family based benefit, covering only parents income. A detailed description of this feature is provided in section EUROMOD Functions - Footnote parameters for the further specification of operands.
    18. -

      Before answering the question -raised above, lets exercise by interpreting some more -simple and stylised examples, based on a simple sample household.

      +

      Before answering the questions raised above, let's exercise by interpreting some more simple and stylised examples, based on a simple sample household.

      @@ -166,10 +141,7 @@

      Assessing the result of a function

      -

      Lets -interpret some formula parameters of the function ArithOp (i.e. "other" parameters -with respect to the table of rules above) assuming that the assessment unit -(parameter TAX_UNIT) is the whole household.

      +

      Let's interpret some formula parameters of the function ArithOp (i.e. "other" parameters with respect to the table of rules above) assuming that the assessment unit (parameter TAX_UNIT) is the whole household.

      @@ -199,7 +171,7 @@

      Assessing the result of a function

      -

      Now lets +

      Now let's interpret some elig_cond parameters of the function Elig (i.e. condition parameters with respect to the table of rules above) again @@ -220,7 +192,7 @@

      Assessing the result of a function

      wmbe=all - {yem<1700} + yem<1700 101 (2000+1500+0)<1700=0 (0 or 0 or 0)=0 @@ -236,7 +208,7 @@

      Assessing the result of a function

      (2000+1500+0)<1700=0 - {ils_origy>3000} + ils_origy>3000 101 (2000+1800+0)>3000=1 (1 or 1 or 1)=1 @@ -252,7 +224,7 @@

      Assessing the result of a function

      (2000+1800+0)>3000=1 - {dag<30} + dag<30 101 40<30=0 (0 or 0 or 1)=1 @@ -265,10 +237,10 @@

      Assessing the result of a function

      103 - 7<30=0 + 7<30=1 - {IsMarried} + IsMarried 101 (dms=2)=1 (1 or 1 or 0)=1 @@ -444,7 +416,7 @@
      For all members of a rather arbitrary subgroup is used.

      [2] Except the variable was "undefined" before in which +lang=DE-AT> Except when the variable was "undefined" before in which case it is set to zero (a defined value). Note that EUROMOD initialises all simulated variables by a value called VOID, which amounts to 0.0000000000001, to mark them as undefined.

      diff --git a/EM_Help/HelpFiles/EM_FC_Placeholders.htm b/EuromodHelp/HelpFiles/EM_FC_Placeholders.htm similarity index 91% rename from EM_Help/HelpFiles/EM_FC_Placeholders.htm rename to EuromodHelp/HelpFiles/EM_FC_Placeholders.htm index 29e3b20..7385e85 100644 --- a/EM_Help/HelpFiles/EM_FC_Placeholders.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Placeholders.htm @@ -24,21 +24,21 @@

      Placeholders

      typical example, all countries have some definition of the assessment unit household, but specifications (e.g. who is a child) differ, therefore the respective assessment units are called tu_household_ee, -tu_household_uk, etc. To +tu_household_dk, etc. To be still able to refer to them all at once the placeholder =cc= can be used, e.g. tu_household_=cc=. The model will replace the placeholders by the respective country acronym at runtime. As another typical example an add-on may produce a special output. In order to not overwrite this output if the add-on -is run for several systems, one may want to us someoutput_=sys= as filename (parameter File +is run for several systems, one may want to use someoutput_=sys= as filename (parameter File of function DefOutput). Again the model will replace the -placeholder by the respective system name at runtime, e.g. someoutput_UK_2012. In principle the placeholders not only can be +placeholder by the respective system name at runtime, e.g. someoutput_DK_2012. In principle the placeholders not only can be used with add-ons but in each parameter file (though probably seldom necessary).

      Identifiers

      Each EUROMOD policy, function and parameter possesses a -unique identifier in the form of a GUID[1]. +unique identifier in the form of a GUID [1]. More precisely, identifiers are system specific, which means that each policy, function or parameter possesses one unique identifier per system. These unique identifiers are assigned once a component is created and kept for the whole @@ -85,8 +85,7 @@

      Identifiers

      special functions AddOn_Applic, AddOn_Pol, AddOn_Func and AddOnPar. Please note that symbolic identifiers -can only be used within add-ons! Within country implementations please use -unique identifiers.

      +can only be used within add-ons!
      For within country implementations only the use of unique identifiers are allowed.

      To use an identifier right click the respective policy, function or parameter and select either Copy @@ -94,7 +93,7 @@

      Identifiers

      Identifier from the context menu. This copies the respective identifier to the clipboard, from where it can be pasted to the required location.

      -

      If you prefer the "manual" way to create identifiers, this summary of syntax may help:
      +

      If the user prefers the "manual" way to create identifiers, this summary of syntax may help:
      General: PolicyName[_#FunctionNumber][.ParameterNumber] (examples: tin_es, tin_es_#3, tin_es_#3.7)
      DefIL: PolicyName_#IncomelistName[.ParameterNumber] (examples: ildef_bg_#ils_dispy, ildef_bg_#ils_dispy.6)
      DefTU: PolicyName_#TaxunitName[.ParameterNumber] (examples: tudef_bg_#tu_household_bg, tudef_bg_#tu_household_bg.3)
      diff --git a/EM_Help/HelpFiles/EM_FC_Queries.htm b/EuromodHelp/HelpFiles/EM_FC_Queries.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Queries.htm rename to EuromodHelp/HelpFiles/EM_FC_Queries.htm diff --git a/EM_Help/HelpFiles/EM_FC_RandSeed.htm b/EuromodHelp/HelpFiles/EM_FC_RandSeed.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_RandSeed.htm rename to EuromodHelp/HelpFiles/EM_FC_RandSeed.htm diff --git a/EM_Help/HelpFiles/EM_FC_Scale.htm b/EuromodHelp/HelpFiles/EM_FC_Scale.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Scale.htm rename to EuromodHelp/HelpFiles/EM_FC_Scale.htm diff --git a/EM_Help/HelpFiles/EM_FC_SchedCalc.htm b/EuromodHelp/HelpFiles/EM_FC_SchedCalc.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_SchedCalc.htm rename to EuromodHelp/HelpFiles/EM_FC_SchedCalc.htm index 88bf0e4..afeb6fa 100644 --- a/EM_Help/HelpFiles/EM_FC_SchedCalc.htm +++ b/EuromodHelp/HelpFiles/EM_FC_SchedCalc.htm @@ -13,9 +13,7 @@

      The policy function SchedCalc

      -

      The -function SchedCalc is a schedule calculator. Its -basic functionality is demonstrated in example 1.

      +

      The function SchedCalc is a schedule calculator. Its basic functionality is demonstrated in example 1.

      @@ -302,7 +300,7 @@

      The policy function SchedCalc

      - +
      Example 1:
      TAX_UNIT tu_individual_sltu_couple_sl
      @@ -320,7 +318,7 @@

      The policy function SchedCalc

      - + diff --git a/EM_Help/HelpFiles/EM_FC_SetDefault.htm b/EuromodHelp/HelpFiles/EM_FC_SetDefault.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_SetDefault.htm rename to EuromodHelp/HelpFiles/EM_FC_SetDefault.htm diff --git a/EM_Help/HelpFiles/EM_FC_SortsOfFunctions.htm b/EuromodHelp/HelpFiles/EM_FC_SortsOfFunctions.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_SortsOfFunctions.htm rename to EuromodHelp/HelpFiles/EM_FC_SortsOfFunctions.htm diff --git a/EM_Help/HelpFiles/EM_FC_Store_Restore.htm b/EuromodHelp/HelpFiles/EM_FC_Store_Restore.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_Store_Restore.htm rename to EuromodHelp/HelpFiles/EM_FC_Store_Restore.htm index 8eed666..6766461 100644 --- a/EM_Help/HelpFiles/EM_FC_Store_Restore.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Store_Restore.htm @@ -562,7 +562,7 @@

      The special functions Store and Restore

      - + @@ -784,45 +784,64 @@

      The special functions Store and Restore

      Example 4:Example 5:
      Policy Grp/No
      postloop unitset yem back to its value before the first iteration
      var 2
      - + + + + + + - + diff --git a/EM_Help/HelpFiles/EM_FC_Sum_SetDefault.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_SetDefault.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_SetDefault.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_SetDefault.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Store.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Store.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Store.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Store.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Totals.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Totals.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Totals.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Totals.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_UnitLoop.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_UnitLoop.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_UnitLoop.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_UnitLoop.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_UpdateTU.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_UpdateTU.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_UpdateTU.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_UpdateTU.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Uprate.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Uprate.htm similarity index 88% rename from EM_Help/HelpFiles/EM_FC_Sum_Uprate.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Uprate.htm index d81946e..5a13aa9 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_Uprate.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_Uprate.htm @@ -39,7 +39,7 @@

      Function Specific Parameters

      - + @@ -111,7 +111,7 @@

      Function Specific Parameters

      - + @@ -120,7 +120,7 @@

      Function Specific Parameters

      - + @@ -140,6 +140,15 @@

      Function Specific Parameters

      + + + + + + + + + diff --git a/EM_Help/HelpFiles/EM_FC_SummaryOfFunctions.htm b/EuromodHelp/HelpFiles/EM_FC_SummaryOfFunctions.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_SummaryOfFunctions.htm rename to EuromodHelp/HelpFiles/EM_FC_SummaryOfFunctions.htm diff --git a/EM_Help/HelpFiles/EM_FC_Totals.htm b/EuromodHelp/HelpFiles/EM_FC_Totals.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Totals.htm rename to EuromodHelp/HelpFiles/EM_FC_Totals.htm diff --git a/EM_Help/HelpFiles/EM_FC_Uprate.htm b/EuromodHelp/HelpFiles/EM_FC_Uprate.htm similarity index 83% rename from EM_Help/HelpFiles/EM_FC_Uprate.htm rename to EuromodHelp/HelpFiles/EM_FC_Uprate.htm index 8508a06..b8c275b 100644 --- a/EM_Help/HelpFiles/EM_FC_Uprate.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Uprate.htm @@ -86,14 +86,14 @@

      The system function Uprate

      - + - +
      + + + + + + + + + + + + + + @@ -835,15 +854,14 @@

      The special functions Store and Restore

      The rule leading to these results is: the variable without an iteration number is set in each iteration to the -value of the currently eligible unit.[1] -In the left example this means: in the first iteration persons 101, 201 and 301 +value of the currently eligible unit [1]. In the first example (first above table) this means: in the first iteration persons 101, 201 and 301 are eligible, therefore for them stm01_s_unit takes on the value of stm01_s_unit1 and stays VOID for everyone else. In the second iteration persons 102 and 302 are eligible, therefore for them stm01_s_unit takes on the value of stm01_s_unit2. For everyone else stm01_s_unit keeps its value where it has already one and stays VOID where it has not. Finally, in the third iteration person 103 is eligible, therefore for her/him stm01_s_unit takes on the value of stm01_s_unit3 and keeps its value for everyone -else. The story for the right example is similar: in the first iteration +else. The story for the second example (second of the above tables) is similar: in the first iteration persons 102 and 201 are eligible, therefore for them stm01_s_unit takes on the value of stm01_s_unit1 and stays VOID for everyone else. -In the second iteration person 201 is eligible, therefore for her/him stm01_s_unit takes on the value of stm01_s_unit2. For everyone else it stays unchanged, +In the second iteration person 103 is eligible, therefore for her/him stm01_s_unit takes on the value of stm01_s_unit2. For everyone else it stays unchanged, which amongst others means that it stays undefined for persons 101, 301 and 302 as they never were eligible.

      diff --git a/EM_Help/HelpFiles/EM_FC_Sum_AddHHMembers.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_AddHHMembers.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_Sum_AddHHMembers.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_AddHHMembers.htm index e85ec53..5083d0b 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_AddHHMembers.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_AddHHMembers.htm @@ -60,7 +60,7 @@

      Function Specific Parameters

      - + diff --git a/EM_Help/HelpFiles/EM_FC_Sum_AddOn_Applic.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Applic.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_AddOn_Applic.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Applic.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_AddOn_ExtensionSwitch.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_ExtensionSwitch.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_AddOn_ExtensionSwitch.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_ExtensionSwitch.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_AddOn_Func.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Func.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_AddOn_Func.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Func.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_AddOn_Par.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Par.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_AddOn_Par.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Par.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_AddOn_Pol.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Pol.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_AddOn_Pol.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_AddOn_Pol.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Allocate.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Allocate.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Allocate.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Allocate.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_ArithOp.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_ArithOp.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_ArithOp.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_ArithOp.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_BenCalc.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_BenCalc.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_Sum_BenCalc.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_BenCalc.htm index 6266ec6..61b968d 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_BenCalc.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_BenCalc.htm @@ -12,7 +12,7 @@

      Summary of parameters for function BenCalc

      Allows for modelling a wide range of policy instruments, in particular benefits.
      The result is calculated as a sum of "components", where the value of a component is only added if a certain condition is fulfilled by at least one member of the assessment unit.
      -The following stylised formulas illustrates the approach:
      result = Sum (Comp_perTU if Comp_Cond = true)
      result = Sum (Comp_perElig * nElig if Comp_Cond = true)

      +The following stylised formulas illustrate the approach:
      result = Sum (Comp_perTU if Comp_Cond = true)
      result = Sum (Comp_perElig * nElig if Comp_Cond = true)

      Function Specific Parameters

      idhhidperson dag stm01_s_unit1 stm01_s_unit2 stm01_s_unit
      1101 51 1 2 VOID
      1102 48 1 2 1
      1103 20 1 2 2
      2201 30 1 1 1
      3301 58 VOID VOID VOID
      3302 56 VOID VOID no yes yesIf yes, the partner of the new parent (person fulfilling ParentCond) gets the other partent of the added child.
      Only relevant if Add_Who=Child.
      If yes, the partner of the new parent (person fulfilling ParentCond) gets the other parent of the added child.
      Only relevant if Add_Who=Child.
      [Placeholder]
      diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Break.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Break.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Break.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Break.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_CallProgramme.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_CallProgramme.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_CallProgramme.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_CallProgramme.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_ChangeParam.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_ChangeParam.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_ChangeParam.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_ChangeParam.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_ChangeSwitch.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_ChangeSwitch.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_ChangeSwitch.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_ChangeSwitch.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_CommonParameters.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_CommonParameters.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_CommonParameters.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_CommonParameters.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_CumulativeSum.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_CumulativeSum.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_CumulativeSum.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_CumulativeSum.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DefConst.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DefConst.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_DefConst.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DefConst.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DefIL.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DefIL.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_DefIL.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DefIL.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DefInput.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DefInput.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_DefInput.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DefInput.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DefOutput.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DefOutput.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_DefOutput.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DefOutput.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DefTU.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DefTU.htm similarity index 85% rename from EM_Help/HelpFiles/EM_FC_Sum_DefTU.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DefTU.htm index eb161be..f84cc4a 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_DefTU.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_DefTU.htm @@ -10,7 +10,7 @@

      Summary of parameters for function DefTu

      -

      Allows for the definition of assessment units.
      Note that parameters may use variables with the prefixes "head:" or "partner:". These prefixes can be used with variables only, not with incomelists or queries.
      Also note that "{Default}" can be used to further define any default condition (as indicated in Default Value).

      +

      Allows for the definition of assessment units.
      Note that parameters may use variables with the prefixes "head:" or "partner:". These prefixes can be used with variables only, not with incomelists or queries.
      Also note that "Default" can be used to further define any default condition (as indicated in Default Value).

      Function Specific Parameters

      @@ -44,7 +44,7 @@

      Function Specific Parameters

      - + @@ -59,8 +59,8 @@

      Function Specific Parameters

      - - + @@ -68,7 +68,7 @@

      Function Specific Parameters

      - + @@ -76,15 +76,15 @@

      Function Specific Parameters

      - - + + - + @@ -92,7 +92,7 @@

      Function Specific Parameters

      - + @@ -100,7 +100,7 @@

      Function Specific Parameters

      - + @@ -108,7 +108,7 @@

      Function Specific Parameters

      - + @@ -116,7 +116,7 @@

      Function Specific Parameters

      - + @@ -124,7 +124,7 @@

      Function Specific Parameters

      - + @@ -133,7 +133,7 @@

      Function Specific Parameters

      - + diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DefVar.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DefVar.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_DefVar.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DefVar.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_DropUnit.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_DropUnit.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_DropUnit.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_DropUnit.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Elig.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Elig.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Elig.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Elig.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_ILVarOp.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_ILVarOp.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_ILVarOp.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_ILVarOp.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_IlArithOp.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_IlArithOp.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_Sum_IlArithOp.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_IlArithOp.htm index 02d64da..1c19695 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_IlArithOp.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_IlArithOp.htm @@ -16,7 +16,7 @@

      Summary of parameters for function IlArithOp

      The operation carried out is defined by parameter 'Formula' and allows for three types of placeholders:
      • BASE_IL_COMPONENT refers to a variable in the incomelist defined by parameter 'Base_ILName'
      • -
      • IL_COMPONENT[il-identifier] refers to a variable in the incomelist defined by parameter 'ILName'. +
      • IL_COMPONENT [il-identifier] refers to a variable in the incomelist defined by parameter 'ILName'. As this parameter is not unique [il-identifier] indicates the name of the incomelist or the group-number.
        The variable within the incomelist corresponds to the variable in the incomelist defined by 'Base_ILName' in the sense that they share the core-name. This is the variable-name without the corresponding prefix (parameters 'Base_Prefix'/'Prefix') and postfix (parameters 'Base_Postfix'/'Postfix').
      • diff --git a/EM_Help/HelpFiles/EM_FC_Sum_InitVars.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_InitVars.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_InitVars.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_InitVars.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_KeepUnit.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_KeepUnit.htm similarity index 97% rename from EM_Help/HelpFiles/EM_FC_Sum_KeepUnit.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_KeepUnit.htm index 0e3ea50..d50ada9 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_KeepUnit.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_KeepUnit.htm @@ -28,7 +28,7 @@

        Function Specific Parameters

      - + diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Loop.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Loop.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Loop.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Loop.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Max.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Max.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Max.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Max.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Min.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Min.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Min.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Min.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_RandSeed.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_RandSeed.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_RandSeed.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_RandSeed.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Restore.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Restore.htm similarity index 85% rename from EM_Help/HelpFiles/EM_FC_Sum_Restore.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Restore.htm index 7b15957..9e00400 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_Restore.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_Restore.htm @@ -30,7 +30,7 @@

      Function Specific Parameters

      - + @@ -39,7 +39,7 @@

      Function Specific Parameters

      - + @@ -48,7 +48,7 @@

      Function Specific Parameters

      - +
      no yes Specifies which members of the household form a unit, if parameter Type is set to SUBGROUP.
      Syntax: Status & Status & Status & ..., e.g. Partner & OwnChild.

      Possible values for Status:
      - Partner: defined by parameter PartnerCond
      - OwnDepChild: defined by parameter OwnDepChildCond
      - LooseDepChild: defined by parameter LooseDepChildCond
      - LooseDepChild: defined by parameter LooseDepChildCond
      - OwnChild: defined by parameter OwnChildCond
      - DepParent: defined by parameter DepParentCond
      - DepRelative: defined by parameter DepRelativeCond

      Note, that the Head is obviously always part of unit and (usually) relations are defined with reference to the Head.
      Specifies which members of the household form a unit, if parameter Type is set to SUBGROUP.
      Syntax: Status & Status & Status & ..., e.g. Partner & OwnChild.

      Possible values for Status:
      - Partner: defined by parameter PartnerCond
      - OwnDepChild: defined by parameter OwnDepChildCond
      - LooseDepChild: defined by parameter LooseDepChildCond
      - OwnChild: defined by parameter OwnChildCond
      - DepParent: defined by parameter DepParentCond
      - DepRelative: defined by parameter DepRelativeCond

      Note, that the Head is obviously always part of unit and (usually) relations are defined with reference to the Head.
      HeadDefInc condition no yes!{IsDepChild}Condition further defining the head of the assessment unit. The condition is &-linked with the following fixed head condition:
      {HeadDefInc>anyother:HeadDefInc} |
      ({HeadDefInc>=anyother:HeadDefInc} & {dag>anyother:dag}) |
      ({HeadDefInc>=anyother:HeadDefInc} & {dag>=anyother:dag} & {idperson<anyother:idperson})
      +
      !IsDepChildCondition further defining the head of the assessment unit. The condition is &-linked with the following fixed head condition:
      HeadDefInc>anyother:HeadDefInc |
      (HeadDefInc>=anyother:HeadDefInc & dag>anyother:dag) |
      (HeadDefInc>=anyother:HeadDefInc & dag>=anyother:dag & idperson<anyother:idperson)
      where 'anyother' refers to potential heads, in the sense of fulfilling ExtHeadCond.
      condition no yes{head:idperson=idpartner}head:idperson=idpartner Condition defining who is a partner.
      condition no yes{0}Condition defining who is a dependent child.
      The "real" default, i.e. if the parameter is not defined or set to n/a, is {0} (i.e. nobody is a child).
      However, setting the parameter to "{Default}" is interpreted as !{isparent}&{idpartner<=0}.
      0Condition defining who is a dependent child.
      The "real" default, i.e. if the parameter is not defined or set to n/a, is 0 (i.e. nobody is a child).
      However, setting the parameter to "Default" is interpreted as !isparent&idpartner<=0.
      OwnChildCond condition no yes{head:idperson=idmother}|{head:idperson=idfather}|{partner:idperson=idmother}|{partner:idperson=idfather}head:idperson=idmother|head:idperson=idfather|partner:idperson=idmother|partner:idperson=idfather Condition defining who is an own child.
      condition no yes{isownchild}&{isdepchild}isownchild&isdepchild Condition defining who is an own dependent child.
      condition no yes{idmother=0}&{idfather=0}&{isdepchild}idmother=0&idfather=0&isdepchild Condition defining who is a loose dependent child.
      condition no yes{head:idmother=idperson}|{head:idfather=idperson}|{partner:idmother=idperson}|{partner:idfather=idperson}head:idmother=idperson|head:idfather=idperson|partner:idmother=idperson|partner:idfather=idperson Condition defining who is a dependent parent.
      condition no yes{0}0 Condition defining who is a dependent relative.
      condition no yes{isparentofdepchild}&{idpartner<=0}isparentofdepchild&idpartner<=0 Condition defining who is a lone parent.
      no yes noIf set to yes: an error is issued if ExtHeadCond rules out all household members.
      If se to no: no error issued, instead ExtHeadCond is dropped for affected households.
      If set to yes: an error is issued if ExtHeadCond rules out all household members.
      If set to no: no error issued, instead ExtHeadCond is dropped for affected households.
      NoChildIfHeadyes yes Condition defining which assessment units (i.e. indvidual, families or households) are to be kept.Condition defining which assessment units (i.e. individual, families or households) are to be kept.
      Keep_Cond_Who yes PostFixcopy of stored variable is called varname_postfix
      e.g. var1 = yem, postfix = bkup: name of copy = yem_bkup
      copy of stored variable is called varname_PostLoop
      e.g. var1 = yem, postloop = lp: name of copies = yem_lp1 (1. iteration), yem_lp2 (2. iteration), etc.
      PostFix yes PostLoopcopy of stored variable is called varname_postloopiteration
      e.g. var1 = yem, postloop = lp: name of copies = yem_lp1 (1. iteration), yem_lp2 (2. iteration), etc.
      copy of stored variable is called varname_PostFix
      e.g. var1 = yem, postfix = bkup: name of copy = yem_bkup
      Iteration yes most recent to be used with parameter postloop: variables are set back to the value they had when function store was carried out in the indicated iterationto be used with parameter PostLoop: variables are set back to the value they had when function store was carried out in the indicated iteration
      diff --git a/EM_Help/HelpFiles/EM_FC_Sum_Scale.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_Scale.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_Sum_Scale.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_Scale.htm diff --git a/EM_Help/HelpFiles/EM_FC_Sum_SchedCalc.htm b/EuromodHelp/HelpFiles/EM_FC_Sum_SchedCalc.htm similarity index 98% rename from EM_Help/HelpFiles/EM_FC_Sum_SchedCalc.htm rename to EuromodHelp/HelpFiles/EM_FC_Sum_SchedCalc.htm index d348772..7a66586 100644 --- a/EM_Help/HelpFiles/EM_FC_Sum_SchedCalc.htm +++ b/EuromodHelp/HelpFiles/EM_FC_Sum_SchedCalc.htm @@ -112,7 +112,7 @@

      Function Specific Parameters

      yes If defined Base is rounded to nearest whole number if set to 1, to nearest number with 1 decimal if set to 0.1, to nearest 10 if set to 10, etc.If defined Base is rounded to nearest whole number; if set to 1, to nearest number with 1 decimal; if set to 0.1, to nearest 10 if set to 10, etc.
      Simple_Prog no yes Factor, which is applied on all monetary variables in the dataset, which do not have a particular own factor.
      Possible values are amounts (e.g. 1.023) or factors as defined by parameters Factor_Name, Factor_Value, Factor_Condition.
      Factor, which is applied on all monetary variables in the dataset that do not have a particular own factor.
      Possible values are amounts (e.g. 1.023) or factors as defined by parameters Factor_Name, Factor_Value, Factor_Condition.
      Factor_Name no yes yesIf set to yes, a warning is issues for uprating non-monetary variables.If set to yes, a warning is issued for uprating non-monetary variables.
      WarnIfNoFactor no yes yesIf set to yes an warning is issues for any monetary dataset variable without an explicitly defined uprating factor.If set to yes a warning is issued for any monetary dataset variable without an explicitly defined uprating factor.
      DBYearVar Pattern (regular expression) defining the group of variables to be uprated by RegExp_Factor, e.g. x[0-9]+.
      RegExp_ConditionconditionREG_EXPnowithin groupCondition that needs to be fulfilled to apply the factor specified by parameters RegExp_Def and RegExp_Factor.
      RegExp_Factor text yem n/a n/a1.0051.05 employment income
      yse n/a n/a1.0151.15 self-employment income
      @@ -223,7 +223,7 @@

      The system function Uprate

      Factor_Condition 1 - {drgn1=1} + drgn1=1 in region 1 @@ -235,7 +235,7 @@

      The system function Uprate

      Factor_Condition 2 - {drgn1=3} + drgn1=2 in region 2 @@ -247,18 +247,18 @@

      The system function Uprate

      Factor_Condition 3 - {drgn1=3} + drgn1=3 in region 3

      In the example employment income (yem) is uprated by three different factors, dependent on region. For the region number one, defined by -setting the parameter Factor_Condition; Grp/No 1 to {drgn1=1} (d=demographic, rg=region, +setting the parameter Factor_Condition; Grp/No 1 to drgn1=1 (d=demographic, rg=region, n1=nuts level 1), a factor of 1.02 is defined. Analogously, employment income -in region number two is uprated by 2.5% (Factor_Condition, Grp/No 2 set to {drgn1=2} and +in region number two is uprated by 2.5% (Factor_Condition, Grp/No 2 set to drgn1=2 and yem, Grp/No 2 set to 1.025) and in region number three by -3% (Factor_Condition, Grp/No 3 set to {drgn1=3} and yem, Grp/No 3 set to 1.03).

      +3% (Factor_Condition, Grp/No 3 set to drgn1=3 and yem, Grp/No 3 set to 1.03).

      Another, not unlikely use of conditions in the uprate function may however be problematic and therefore @@ -271,7 +271,7 @@

      The system function Uprate

      This is most likely not what was intended, instead one would assume that the conditions refer to the original value of poa. However, the programme has no "intuitive knowledge" about the content of the -condition and does not take care about such self-references.[2] For +condition and does not take care about such self-references [2]. For the example presented here, a solution may be to use func_SchedCalc for uprating instead. Another possibility is to generate a copy of the original poa to be used in the conditions.

      @@ -340,36 +340,25 @@

      The system function Uprate

      aggvar_tolerance 1 - aggvar_tolerance - + 1 + parameter for changing the default tolerance -

      In the example employment income (yem) is composed of employment -income in permanent jobs (yempj) -and employment income in temporary jobs (yemtj). To make sure for consistent uprating it is -not advisable to define a separate uprating factor for the aggregate variable -and its components (e.g. 1.025 for yem, -1.03 for yempj and 1.02 -for yemtj), as this most -likely results in yempj+yemtj≠yem. The -approach in the example tells the model that an aggregate variable (parameter aggvar1_name set to yem) is composed of particular other variables -(parameters aggvar_part1 and aggvar_part2 -set yempj respectively yemtj). The -model than "uprates" the aggregate variable by simply building the -sum of the already uprated components. Note, that for this reason it is -necessary to define the uprating factors of the component variables before -defining the composition of the aggregate variable. In principle it is possible -that a component variable is itself an aggregate variable (e.g. yempj = yempjag + yempjbs, -where ag -stands for agriculture and for bs -business). In such cases the placing of uprating factors and definitions of -compositions should be done with great care. Example 4 shows another parameter, -aggvar_tolerance. This -parameter allows for imprecise sums. The model checks for each aggregate -variable whether it is, before uprating, actually the sum of its components, -with a default tolerance of -0.01 to +0.01. The parameter allows for changing -this tolerance, in the example it is even tightened.

      +

      In the example employment income (yem) is composed of employment income in permanent jobs (yempj) and employment +income in temporary jobs (yemtj). To make sure for consistent uprating it is not advisable to define a separate +uprating factor for the aggregate variable and its components (e.g. 1.025 for yem, 1.03 for yempj and 1.02 for yemtj), +as this most likely results in yempj+yemtj≠yem. The approach in the example tells the model that an aggregate +variable (parameter aggvar_name, Grp/No 1 set to yem) is composed of particular other variables (parameter aggvar_part, +Grp/No 1 set to yempj and yemtj). The model than "uprates" the aggregate variable by simply building the +sum of the already uprated components. Note, that for this reason it is necessary to define the uprating factors of +the component variables before defining the composition of the aggregate variable. In principle it is possible that +a component variable is itself an aggregate variable (e.g. yempj = yempjag + yempjbs, where ag stands for agriculture +and for bs business). In such cases the placing of uprating factors and definitions of compositions should be done +with great care. Example 4 shows another parameter, aggvar_tolerance. This parameter allows for imprecise sums. The +model checks for each aggregate variable whether it is, before uprating, actually the sum of its components, with +a default tolerance of -0.01 to +0.01. The parameter allows for changing this tolerance, in the example it is even +tightened.

      Finally, there is an option to uprate a whole group of variables at once. This is illustrated in example 5.

      @@ -403,7 +392,7 @@

      The system function Uprate

      RegExp_Def 1 - yem* + yem.* uprate all employment variables @@ -415,7 +404,7 @@

      The system function Uprate

      RegExp_Def 2 - x1* + x1.* uprate expenditure variables of the first COICOP group @@ -441,8 +430,8 @@

      The system function Uprate

      In the example, all employment variables are uprated with the cpi rate, while expenditure variables are uprated according to their COICOP group. This is feature is very useful if you have an unknown or very large number of variables that you need to uprate simultaneously, as it allows the user to define -the variables to be uprated using a regular expression. Note however that this feature cannot be combined -with any of the other advanced features such as aggvar or conditions. +the variables to be uprated using a regular expression. Note that this feature cannot be combined with +aggregate variables.

       

      diff --git a/EM_Help/HelpFiles/EM_FC_WhatAndHow.htm b/EuromodHelp/HelpFiles/EM_FC_WhatAndHow.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FC_WhatAndHow.htm rename to EuromodHelp/HelpFiles/EM_FC_WhatAndHow.htm diff --git a/EM_Help/HelpFiles/EM_FC_WhatAreFunctions.htm b/EuromodHelp/HelpFiles/EM_FC_WhatAreFunctions.htm similarity index 96% rename from EM_Help/HelpFiles/EM_FC_WhatAreFunctions.htm rename to EuromodHelp/HelpFiles/EM_FC_WhatAreFunctions.htm index 316fdfd..a110f8a 100644 --- a/EM_Help/HelpFiles/EM_FC_WhatAreFunctions.htm +++ b/EuromodHelp/HelpFiles/EM_FC_WhatAreFunctions.htm @@ -32,7 +32,7 @@

      What are functions?

      elig_cond - {dag < 3} + dag < 3 there must be @@ -95,8 +95,8 @@

      What are functions?

      elig_cond - {dag < 3} - {dag < 3} + dag < 3 + dag < 3 there must be @@ -152,11 +152,11 @@

      What are functions?

      implement conditions under which a benefit is received / a tax must be paid. Therefore, it offers parameters that allow the specification of such conditions. For the child benefit the parameter elig_cond is used. This parameter takes -"formulas" with a yes/no result as values, in the example {dag<3}, i.e. the variable for age must be smaller than +"formulas" with a yes/no result as values, in the example dag<3, i.e. the variable for age must be smaller than three. The general purpose of the other function used, ArithOp, is to implement arithmetical operations. Consequently, it offers parameters to specify the operation. For the child benefit the parameter formula is used to define a -very simple operation it is just set to the amount of 100 respectively 50 (#m +very simple operation - it is just set to the amount of 100 respectively 50 (#m stands for monthly).

      Each function, which calculates some result, offers the diff --git a/EM_Help/HelpFiles/EM_FS_Branding.htm b/EuromodHelp/HelpFiles/EM_FS_Branding.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FS_Branding.htm rename to EuromodHelp/HelpFiles/EM_FS_Branding.htm diff --git a/EM_Help/HelpFiles/EM_FS_CommandLine.htm b/EuromodHelp/HelpFiles/EM_FS_CommandLine.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FS_CommandLine.htm rename to EuromodHelp/HelpFiles/EM_FS_CommandLine.htm diff --git a/EM_Help/HelpFiles/EM_FS_ConfigurationFile.htm b/EuromodHelp/HelpFiles/EM_FS_ConfigurationFile.htm similarity index 97% rename from EM_Help/HelpFiles/EM_FS_ConfigurationFile.htm rename to EuromodHelp/HelpFiles/EM_FS_ConfigurationFile.htm index 9e58406..aff69dc 100644 --- a/EM_Help/HelpFiles/EM_FS_ConfigurationFile.htm +++ b/EuromodHelp/HelpFiles/EM_FS_ConfigurationFile.htm @@ -124,11 +124,11 @@

      The configuration file

      <EMCONTENTPATH>C:\Euromod\EuromodFiles\</EMCONTENTPATH> - folder containing the EUROMOD file structure (see EUROMOD Installation andArchitecture - EUROMOD content (parameter files))[1] + folder containing the EUROMOD file structure (see EUROMOD Installation andArchitecture - EUROMOD content (parameter files)) [1] <POLICY_SWITCH>yem_??=4027fd02-1691-4216-a3e2-f00b980bb06f=off</POLICY_SWITCH> - instructions for the executable to change switches of switchable policies, in the form SwitchablePolicy_SearchPattern=SystemID=value, for more information see Working with EUROMOD - Changing Countries' Setting - Administrating policy switches + instructions for the executable to change switches of switchable policies, in the form SwitchablePolicy_SearchPattern=SystemID=value, for more information see Working with EUROMOD - Running EUROMOD, paragraph Switching extensions on or off <POLICY_SWITCH>yem_??=6b06872b-6a65-4750-869c-9aa41c7cf6e9=on</POLICY_SWITCH> diff --git a/EM_Help/HelpFiles/EM_FS_FileStructure.htm b/EuromodHelp/HelpFiles/EM_FS_FileStructure.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FS_FileStructure.htm rename to EuromodHelp/HelpFiles/EM_FS_FileStructure.htm diff --git a/EM_Help/HelpFiles/EM_FS_HeaderPage.htm b/EuromodHelp/HelpFiles/EM_FS_HeaderPage.htm similarity index 96% rename from EM_Help/HelpFiles/EM_FS_HeaderPage.htm rename to EuromodHelp/HelpFiles/EM_FS_HeaderPage.htm index 9c06a14..aaf9f28 100644 --- a/EM_Help/HelpFiles/EM_FS_HeaderPage.htm +++ b/EuromodHelp/HelpFiles/EM_FS_HeaderPage.htm @@ -35,7 +35,7 @@

      EUROMOD Installation and Architecture

    19. running the model
    20. -

      For accomplishing the former task, the user interface reads +

      To accomplish the former task, the user interface reads and modifies information stored in the EUROMOD content. Essentially it reads from and writes to parameter files in XML format, which contain the instructions the model needs for representing the countries tax-benefit @@ -63,7 +63,7 @@

      EUROMOD Installation and Architecture

      For accomplishing the latter task running the model - the user interface starts the EUROMOD executable, which in fact carries out the -tax-benefit calculations and produces respective output in text format. To do +tax-benefit calculations and produces the respective output in text format. To do so the executable needs two sets of information. Firstly, it reads the XML parameter files as stored in the EUROMOD content (and possibly modified by the user interface). Secondly, it reads a configuration file produced by the user diff --git a/EM_Help/HelpFiles/EM_FS_InstallingEuromod.htm b/EuromodHelp/HelpFiles/EM_FS_InstallingEuromod.htm similarity index 61% rename from EM_Help/HelpFiles/EM_FS_InstallingEuromod.htm rename to EuromodHelp/HelpFiles/EM_FS_InstallingEuromod.htm index b5055d9..ef5182e 100644 --- a/EM_Help/HelpFiles/EM_FS_InstallingEuromod.htm +++ b/EuromodHelp/HelpFiles/EM_FS_InstallingEuromod.htm @@ -13,23 +13,28 @@

      Installing EUROMOD

      Prerequisites

        -
      • Windows XP, Windows Vista, Windows 7 or Windows 8
      • +
      • Windows 7 or later
      • -
      • At least 150 MB free disc space
      • +
      • Internet Explorer 9 or later (required to use the Statistics Presenter plugin)
      • -
      • Administrator -permissions and internet connection (as the Setup will download and install -Microsoft .NET framework files)
      • +
      • Disk Space: 150 MB required to install the software, 850 MB required to unzip the model, and additional space for the input microdata
      • + +
      • Internet connection (in case Microsoft .NET Framework is not installed yet)
      • + +
      • Administrator permissions
      +

      Installation or Upgrade of EUROMOD software

      see EUROMOD Installation and Architecture - EUROMOD software (user interface and executable)

      -

      Download the EUROMOD software installation file Setup_EMSoftware_X.Y.exe, start it and -follow the instructions. This checks and, if necessary, downloads and installs -.NET Framework. It also adds a shortcut to the Start menu and to the desktop, -and adds EUROMOD to the installed programmes in Windows Control Panel.

      +

      Download the EUROMOD software from the EUROMOD website. Double click on the installer to launch the installation process and +follow the instructions. During installation, it will check and, if necessary, download and install +.NET Framework. It will also add a shortcut to the Start menu and to the desktop, +and add EUROMOD to the installed programmes in Windows Control Panel. Detailed instructions on how to install and configure EUROMOD software can be found in the corresponding manual.

      Specification the EUROMOD user interface's "references"

      @@ -44,7 +49,7 @@

      Specification the EUROMOD user interface's "references"

      for example where the model, as a default, generates output or where the model, as a default, looks for input data. This purpose is served by the project configuration dialog, opened via the item Project Configuration -of the main menu.[1] See +of the main menu [1]. See Working with EUROMOD - Configure project for a detailed description.

      @@ -61,10 +66,9 @@

      Specification the EUROMOD user interface's "references"


      -

      [1] +

      [1] You find the main menu above the Run EUROMOD button. Press the little arrow to open it.

      - diff --git a/EM_Help/HelpFiles/EM_FS_OrganisationOfFiles.htm b/EuromodHelp/HelpFiles/EM_FS_OrganisationOfFiles.htm similarity index 82% rename from EM_Help/HelpFiles/EM_FS_OrganisationOfFiles.htm rename to EuromodHelp/HelpFiles/EM_FS_OrganisationOfFiles.htm index 4a9212f..285f0be 100644 --- a/EM_Help/HelpFiles/EM_FS_OrganisationOfFiles.htm +++ b/EuromodHelp/HelpFiles/EM_FS_OrganisationOfFiles.htm @@ -77,19 +77,11 @@

      Organisation of files

          Config -

      This folder contains two files:

      -

      VarConfig.xml - stores the list of EUROMOD variables in XML-format - see Working with EUROMOD - Administration of EUROMOD - variables.

      -

      EuromodVersion.txt stores the EUROMOD version - number see Working with EUROMOD - Open - project, paragraph EUROMOD Version.

      -

      Moreover, - the folder contains a subfolder Images, - which contains two images in portable network graphic format (png) used by the user interface as a default to display a - country's flag or an add-on's symbol, if it does not possess an own - flag/symbol.

      +

      This folder contains four files:

      +

      EXCHANGERATESCONFIG.xml stores the exchange rates as defined in the Exchange Rates table (located in the Administration Tools ribbon).

      +

      HICPCONFIG.xml stores the Eurostat's Harmonized Index of Consumer Prices (HICP) and other series of uprating indices as defined in the Uprating Indices table (See Working with EUROMOD - Defining Uprating Factors).

      +

      SWITCHABLEPOLICYCONFIG.xml stores the list of Policy Switches available in EUROMOD (see Working with EUROMOD - Changing Countries Settings Extensions).

      +

      VARCONFIG.xml stores the list of EUROMOD variables in XML-format - see Working with EUROMOD - Administration of EUROMOD variables.

      @@ -104,10 +96,6 @@

      Organisation of files

      Output This folder may be used as default output folder - see Working with EUROMOD - Open project. - - Applications - This folder contains external tools - see Working with EUROMOD - Applications. - diff --git a/EM_Help/HelpFiles/EM_FS_ParameterFiles.htm b/EuromodHelp/HelpFiles/EM_FS_ParameterFiles.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FS_ParameterFiles.htm rename to EuromodHelp/HelpFiles/EM_FS_ParameterFiles.htm diff --git a/EM_Help/HelpFiles/EM_FS_Software.htm b/EuromodHelp/HelpFiles/EM_FS_Software.htm similarity index 91% rename from EM_Help/HelpFiles/EM_FS_Software.htm rename to EuromodHelp/HelpFiles/EM_FS_Software.htm index bb67fb9..eb9eed2 100644 --- a/EM_Help/HelpFiles/EM_FS_Software.htm +++ b/EuromodHelp/HelpFiles/EM_FS_Software.htm @@ -27,9 +27,7 @@

      EUROMOD software (user interface and executable)

      functions, can principally be compiled to run on other environments as well. However, this option is currently not utilised nor are there plans to check it out in the near future. Also in principle the executable can be run -independently from the user interface. For this a respective configuration file -must be set up, which is also the way the user interface communicates with the -executable.

      +independently from the user interface, by calling it from command line. See EUROMOD Installation and Architecture - EUROMOD software (user interface and executable) Command line parameters for a detailed description on how to run EUROMOD executable from command line.

      In fact, the communication between the user interface and the executable takes place as follows:

      diff --git a/EM_Help/HelpFiles/EM_FS_VariablesFile.htm b/EuromodHelp/HelpFiles/EM_FS_VariablesFile.htm similarity index 100% rename from EM_Help/HelpFiles/EM_FS_VariablesFile.htm rename to EuromodHelp/HelpFiles/EM_FS_VariablesFile.htm diff --git a/EM_Help/HelpFiles/EM_VC_AddProject.htm b/EuromodHelp/HelpFiles/EM_VC_AddProject.htm similarity index 90% rename from EM_Help/HelpFiles/EM_VC_AddProject.htm rename to EuromodHelp/HelpFiles/EM_VC_AddProject.htm index 03dd998..9b9c0ff 100644 --- a/EM_Help/HelpFiles/EM_VC_AddProject.htm +++ b/EuromodHelp/HelpFiles/EM_VC_AddProject.htm @@ -15,7 +15,7 @@

      Add VC Project

      which you can find in the NEW VC PROJECT section of the VC ribbon. In order to do this, you need to be logged in to Version Control and also to have the required access rights. Please note that the dialog suggests the -name of the local project[1] +name of the local project [1] (i.e. the project loaded by the user interface). Also note, that if you are already connected to a VC project, you will be asked to disconnect first. After typing the project's name, pressing the button OK generates the new project remotely (i.e. on the version control system). This is confirmed by a respective success message and you are also automatically @@ -25,7 +25,7 @@

      Add VC Project

      Content
      button to add your local units to the new VC project (see Administrate Content).

      Please note that the new VC project, after creation, has only -one user[2], i.e. the user that generated the project. The user has full +one user [2], i.e. the user that generated the project. The user has full admin-rights on the project and may want to add other users by clicking the Administrate Users button (see Administrate Users).

      diff --git a/EM_Help/HelpFiles/EM_VC_AdminContent.htm b/EuromodHelp/HelpFiles/EM_VC_AdminContent.htm similarity index 94% rename from EM_Help/HelpFiles/EM_VC_AdminContent.htm rename to EuromodHelp/HelpFiles/EM_VC_AdminContent.htm index 490fd1d..a3c4d25 100644 --- a/EM_Help/HelpFiles/EM_VC_AdminContent.htm +++ b/EuromodHelp/HelpFiles/EM_VC_AdminContent.htm @@ -47,7 +47,7 @@

      Remove Units from VC

      By selecting the respective units from the list and pressing OK, the units are removed from the VC project. -

      A new version of the project will be created if new units are added to VC. You can change the version number by clicking on Manual Version +

      A new version of the project will be created if units are removed from VC. You can change the version number by clicking on Manual Version and writing the version.

      diff --git a/EM_Help/HelpFiles/EM_VC_AdminUsers.htm b/EuromodHelp/HelpFiles/EM_VC_AdminUsers.htm similarity index 89% rename from EM_Help/HelpFiles/EM_VC_AdminUsers.htm rename to EuromodHelp/HelpFiles/EM_VC_AdminUsers.htm index 5c6e5b2..bbf64f0 100644 --- a/EM_Help/HelpFiles/EM_VC_AdminUsers.htm +++ b/EuromodHelp/HelpFiles/EM_VC_AdminUsers.htm @@ -22,13 +22,13 @@

      Administrate Users

      operations are only available to users which have administration rights for the project (see below).

      -

      The main part of the dialog lists all users which are part of this VC project and for each of them their respective access rightsThe main part of the dialog lists all users which are part of this VC project and for each of them their respective access rights [1].

      Add Users

      Pressing this button opens a dialog showing all users which potentially can be added to the -project's VC. That means they are registered with the VC System but not yet +project's VC. That means they are registered with the VC System but are not yet users of the particular project. Ticking the respective users and pressing the button OK adds the users to this VC project, which means that they are now shown in the main-dialog's list of users. Initially the new @@ -36,7 +36,7 @@

      Add Users

      Remove Users

      Users are -removed from the project's VC by selecting them[2] +removed from the project's VC by selecting them [2] and pressing the button Remove Users. The dialog asks for confirmation of this operation to avoid unintended removal.

      @@ -58,12 +58,9 @@
      Administration Right
      units to/from the project's VC and administrating users and their rights.

      Default Right
      -

      This -column takes the values Download or Upload. The right can be changed by selecting another value from the -list.

      +

      This column takes the values Download or Upload. The right can be changed by selecting another value from the list.

        -
      • Download: This means that the user has the right to download units (e.g. countries). The user - is however not allowed to upload any own versions to VC.
      • +
      • Download: This means that the user has the right to download units (e.g. countries). The user is however not allowed to upload any own versions to VC.
      • Upload: This means that the user has the right to download units and also to upload new versions.
      diff --git a/EM_Help/HelpFiles/EM_VC_ConnectingProject.htm b/EuromodHelp/HelpFiles/EM_VC_ConnectingProject.htm similarity index 92% rename from EM_Help/HelpFiles/EM_VC_ConnectingProject.htm rename to EuromodHelp/HelpFiles/EM_VC_ConnectingProject.htm index 8f2bbe6..a6c58eb 100644 --- a/EM_Help/HelpFiles/EM_VC_ConnectingProject.htm +++ b/EuromodHelp/HelpFiles/EM_VC_ConnectingProject.htm @@ -14,13 +14,13 @@

      Connecting & Disconnecting a project

      Connecting a project

      To connect your local project to the version control system, click the button Connect in the in the Version -Control ribbon's section NEW ONLINE BUNDLE.. +Control ribbon's section NEW ONLINE BUNDLE. The Connect button is only available if the project is not yet connected to version control, as it changes to Disconnect when a connection is already established - see below. Furthermore, this button is only enabled if you are already logged in.

      Clicking on the Connect button will bring up the Connect Project to Version Control form. There you will see a listing of all projects which are available -to you[1] on the version control system. Ticking the respective project and pressing OK +to you [1] on the version control system. Ticking the respective project and pressing OK connects the local project (the one loaded by the interface) to the VC project (the version controlled project just selected). This is indicated by an informative message, while the button Disconnect changes its caption to Connect and the application title bar changes to include the name of the VC project your local project is connected to. Lastly (but not least), this will enable most other VC buttons (depending on your access rights).

      diff --git a/EM_Help/HelpFiles/EM_VC_DownloadRelease.htm b/EuromodHelp/HelpFiles/EM_VC_DownloadRelease.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_DownloadRelease.htm rename to EuromodHelp/HelpFiles/EM_VC_DownloadRelease.htm diff --git a/EM_Help/HelpFiles/EM_VC_FormsFunctions.htm b/EuromodHelp/HelpFiles/EM_VC_FormsFunctions.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_FormsFunctions.htm rename to EuromodHelp/HelpFiles/EM_VC_FormsFunctions.htm diff --git a/EM_Help/HelpFiles/EM_VC_HeaderPage.htm b/EuromodHelp/HelpFiles/EM_VC_HeaderPage.htm similarity index 96% rename from EM_Help/HelpFiles/EM_VC_HeaderPage.htm rename to EuromodHelp/HelpFiles/EM_VC_HeaderPage.htm index 60addd6..2de9364 100644 --- a/EM_Help/HelpFiles/EM_VC_HeaderPage.htm +++ b/EuromodHelp/HelpFiles/EM_VC_HeaderPage.htm @@ -11,7 +11,7 @@

      EUROMOD Version Control

      -

      The help for EUROMOD version control is split in two parts

      +

      The help for EUROMOD Version Control (VC) is split in two parts

      • Workflow guide & basic concepts and
      • diff --git a/EM_Help/HelpFiles/EM_VC_LogInOut.htm b/EuromodHelp/HelpFiles/EM_VC_LogInOut.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_LogInOut.htm rename to EuromodHelp/HelpFiles/EM_VC_LogInOut.htm diff --git a/EM_Help/HelpFiles/EM_VC_MergeTool.htm b/EuromodHelp/HelpFiles/EM_VC_MergeTool.htm similarity index 80% rename from EM_Help/HelpFiles/EM_VC_MergeTool.htm rename to EuromodHelp/HelpFiles/EM_VC_MergeTool.htm index 3961397..864886d 100644 --- a/EM_Help/HelpFiles/EM_VC_MergeTool.htm +++ b/EuromodHelp/HelpFiles/EM_VC_MergeTool.htm @@ -12,10 +12,8 @@

        The Merge Tool

        The user interface provides a tool that supports the merging -of two versions of a country or add-on. Imagine developer A and developer B -both have worked on country X. The tool firstly allows viewing what was changed -between the two versions. Secondly, the tool offers facilities to determine which -changes are to be overtaken in the final merged version.

        +of two versions of a country or add-on. Imagine that developer A and developer B, have both worked on country X and changed different parts of it. Firstly, the tool allows viewing what was changed +between the local version and the online one. Secondly, it offers facilities to determine which changes are to be overtaken in the final merged version.

        Please note that the following description, for simplicity reasons, refers to countries only though all descriptions apply for add-ons as @@ -24,7 +22,7 @@

        The Merge Tool

        Selecting the versions

        Clicking the button Merge Country (in the NEW ONLINE BUNDLE section) or - Compare & merge country (in the ADVANCED OPTION section)in the VC ribbon opens a dialog which + Compare & merge country (in the ADVANCED OPTION section) in the VC ribbon opens a dialog which allows defining the versions which are to be compared and merged, whereupon one of the versions is always the country, which is currently loaded by the user interface and from which the dialog was started. This version is @@ -35,24 +33,13 @@

        Selecting the versions

        XML-files) that should be compared and merged with the Local Version.

        -

        Moreover, a Parent Version can be selected from the Advanced options. This -is the version from which as well the local as the remote version started from, -i.e. ideally the base where the two versions diverged. This parent version is -used by the interface (solely) to decide whether a change occurred in the local -version or in the remote version.[1]

        +

        Moreover, a Parent Version can be selected from the Advanced options. This must be a version that is an ancestor of both, the local and the remote version, and ideally the base where the two versions diverged. This parent version is used by the interface (solely) to decide whether a change occurred in the local version or in the remote version.[1]

        -

        Taking into account, that a parent version may not always be -available, the dialog allows that either the local (by checking the box Use Local) or the remote version (by -checking the box Use Remote) may be -defined as the parent version, meaning that all changes are considered as -remote respectively local. By default (without selecting any parent version from the advanced options), the local version - will be defined as parent version.

        +

        Taking into account, that a parent version may not always be available, the dialog allows that either the local (by checking the box Use Local) or the remote version (by +checking the box Use Remote) may be defined as the parent version. By default (without selecting any parent version from the advanced options), the local version + will be defined as parent version, meaning that all changes are considered as remote. Note that if you are following the "New online bundle" process (see Start/Finish Merging: Creation of a new online bundle), then by default the "local version" will be the one you downloaded, and "remote version" the one with your changes.

        - - -

        Clicking OK performs -the comparison, which, depending on the extent of differences, may take a -while, and opens the merge dialog.

        +

        Clicking OK performs the comparison, which, depending on the extent of differences, may take a while, and opens the merge dialog.

        The merge dialog

        @@ -70,7 +57,7 @@

        The merge dialog

        Representation of changes

        The middle and main part of the merge dialog comprises a -register with the following four tabs:

        +register with the following tabs:

        • Systems: This tab lists added and deleted systems as well as changes in system settings.
        • @@ -87,26 +74,25 @@
          Representation of changes
        • Conditional Formatting: This tab lists changes in conditional formatting settings.
        • Uprating indices: This tab lists changes in uprating indices.
        • +
        • Indirect taxes: This tab lists changes in indirect taxes.
        • +
        • External statistics: This tab lists changes in external statistics.
        • Extensions: This tab lists changes in extensions.
        • -
        • Switches: This tab lists changes in switches.
        • +
        • Extension Switches: This tab lists changes in switches.
        • Groups: This tab lists changes in groups.
        -

        The structure of the eight tabs is very similar and will be -described by means of the main tab, the Policy-Spine -tab.

        +

        The structure of the tabs is very similar and will be described by means of the main tab, the Policy-Spine tab.

        The main part of each tab is taken by two "lists" (with tree-structure, to allow for collapsing and expanding the information), -where the left one presents the local spine, whereas the right one presents the +where the left one presents the local spine, and the right one presents the remote spine. The two lists are synchronised so that one can see local and remote spine side-by-side. That means, amongst others, that expanding or scrolling in one of the two lists always effects in the same move of the other list. Initially the two spines are an extract of the two spines, in the sense -that only those parts of the spine are displayed which contain changes. Please +that only those parts of the spine which contain changes are displayed. Please note that, given the tree-structure of the list, this means that if e.g. a parameter is changed the parent-function and parent-policy is visible too. However, the -sibling-parameters are not displayed, neither the "aunt"-functions -(unless they show changes as well). This initial view can be further reduced by +sibling-parameters are not displayed, unless they show changes as well. This initial view can be further reduced by filtering changes, as described below, or extended to the full spine by pressing the button Release Filter.

        @@ -128,7 +114,7 @@
        Types and representation of changes
        • Additions (of policies, functions and parameters) are displayed by a green plus at the left edge of the spine.
        • -
        • Accordingly, removals are displayed by a red minus.
        • +
        • Removals are displayed by a red minus.
        • Changes are marked by a pencil. Note that changes may concern parameter-values or policy/function-switches, as well as @@ -175,10 +161,8 @@
          Special display of order-changes
          This is accomplished by clicking the button Show Order. The column shows entries like LR:7 or L:7/R:8, where the former, if displayed with a function, means, that the function is in -both spines the 7th within its parent-policy. The latter means, -that the function is the 7th in the Local -spine whereas it is the 8th in the Remote -spine.

          +both spines the 7th within its parent-policy. The latter means that the function is the 7th in the Local +spine whereas it is the 8th in the Remote spine.

          Note that "parallelism" is not affected by new or removed components. For example orders like local PolA-PolB-PolC-PolD and remote PolA-PolB-newPolBC-PolC-PolD would be numbered as @@ -189,8 +173,7 @@

          Special display of order-changes
          Filter.

          As it would however be rather cumbersome to watch out for -order changes in the order-column, policies and functions where the function- -respectively parameter-order differs in local and remote spine are marked by a +order changes in the order-column, policies and functions where the function-order or parameter-order differs in local and remote spine are marked by a highlighted (green or red) button at the very left edge of the local spine. Differences in the order of policies are indicated by a highlighted button at the very left of the heading-row of the local spine.

          @@ -204,7 +187,7 @@
          Filtering changes

          Remote / Local:

          • Local and - Remote: With this option checked as well local as remote changes are + Remote: With this option checked both local and remote changes are displayed.
          • Local only: @@ -224,22 +207,18 @@
            Filtering changes

            Type:

            • Added: - Checking this option effects that added policies, + With this option checked, added policies, functions and parameters are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that added - policies are not displayed.
            • + policies, functions and parameters are not displayed.
            • Removed: - Checking/unchecking this option effects the same for - removed components as described above for added components.
            • + With this option checked, removed policies, functions and parameters are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that removed policies, functions and parameters are not displayed.
            • Reordered: - Checking/unchecking this option effects the same for policies and function with - different function- respectively parameter-order in the two spines as described - above for added components.
            • + With this option checked, reordered policies, functions and parameters are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that reordered policies, functions and parameters are not displayed.
            • Changed: - In principle checking/unchecking this option effects - the same for changed components as described above for added components. + With this option checked, changed policies, functions and parameters are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that changed policies, functions and parameters are not displayed. However, the filter can be further refined by showing only selected types of changes:
              • @@ -261,16 +240,13 @@
                Filtering changes

                Level:

                  -
                • Parameter: -Selecting this option corresponds in fact to no Level-filter.
                • +
                • Parameter: With this option selected, there is essentially no Level-filter: all levels (policies, functions, parameters) are shown.
                • Function: -Selecting this option effects that only changes on policy- and function level -are displayed, i.e. parameter-level changes are hidden.
                • +With this option selected, only changes on policy and function level are displayed, i.e. parameter level changes are hidden.
                • Policy: -Selecting this option effects that only changes on policy-level are displayed, -i.e. function- and parameter-level changes are hidden.
                • +With this option selected, only changes on policy level are displayed, i.e. function and parameter level changes are hidden.

                Please note that the filters only take effect once the @@ -280,20 +256,19 @@

                Filtering changes

                As mentioned above, the button Release Filter effects the display of the full spine, i.e. suspends all filters.

                -
                Defining the carrying out of the merge
                +
                Defining the merge specification

                Initially the merge tool suggests accepting all changes, i.e. overtake them into the merged version. This is reflected by green hooks and green highlighting. Only if there is a conflict, i.e. a component was changed in the local version as well as in the remote version, the local version is preferred, i.e. the remote version shows a red cross (or left-arrow) -and possibly a red highlighting. This default setting can be changed in several -ways.

                +and possibly a red highlighting. Note that conflicts can only occur if you manually select a third version as the Parent, otherwise the version that is set as parent will not show any changes.

                Accepting / rejecting all changes

                In the left-bottom part of the dialog the merge tool offers -the buttons Accept All and Reject All to accept respectively reject +the buttons Accept All and Reject All to accept or reject all changes. For technical reasons (in context with conflict cases) accepting/rejecting all changes can be only done for one version at once. In other words, if one wants to accept all, @@ -349,7 +324,9 @@

                Accepting / rejecting single changes
                Accept Changes, Reject Changes and a check-box Visible Only. The logic behind this is the same as described under Accepting / rejecting all changes, just that the reference is the respective policy, function or parameter (i.e. all -changed values/switches and settings) instead of all.

                +changed values/switches and settings) instead of all. Please note that, if you have selected +multiple rows (with shift or ctrl) and the row you right-clicked was among the selected rows, the change +will be applied to all selected rows and not only to the right-clicked one.

                Right-clicking the cell of a single change, e.g. the change of the value of a parameter within a certain system, offers the same context @@ -386,7 +363,7 @@

                Interrupting one's work - buttons Save and Close

                If there are many differences between the local and the remote version it may take quite some consideration to decide what should go -into the finally merged version. Therefore, the merge tool provides a Save button for saving all the so far +into the merged version. Therefore, the merge tool provides a Save button for saving all the so far taken decisions on accepting and rejecting changes. The merge tool and even the whole interface can then be closed without loss of the so far accomplished work. Upon the next time the merge tool is opened for the respective country, @@ -398,7 +375,7 @@

                Interrupting one's work - buttons Save and Close
                does not have to be repeated.

                Also note that the question whether an "in-progress -merging" is to be used is even asked if the merge tool is closed by the Close button, i.e. accepting/rejecting +merging" is to be used, is even asked if the merge tool is closed by the Close button, i.e. accepting/rejecting changes is not saved. The user interface then refers to the copies of the local-, remote- and parent-version of the country it made at the first opening of the merge tool (in a sub-folder of the country folder, called Merge). In this case the comparison of diff --git a/EM_Help/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm b/EuromodHelp/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm similarity index 93% rename from EM_Help/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm rename to EuromodHelp/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm index df7b6cb..beeab54 100644 --- a/EM_Help/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm +++ b/EuromodHelp/HelpFiles/EM_VC_NewBundleFromLocalVersion.htm @@ -13,7 +13,7 @@

                New bundle from local version

                Assuming that you are already logged in and connected to a project, the New bundle from local version button in the ADVANCED OPTIONS section will allow you to create a new bundle using your local version of the project. This version will upload directly the changes in the local version without comparing them with the lastest version available online and - without following the steps under NEW OLINE BUNDLE[1].

                + without following the steps under NEW OLINE BUNDLE [1].

                To use this option click on Start new online bundle in the NEW ONLINE BUNDLE section and then on New bundle from local version button in the ADVANCED OPTIONS sections to open the Upload Bundle form.

                diff --git a/EM_Help/HelpFiles/EM_VC_RemoveBundles.htm b/EuromodHelp/HelpFiles/EM_VC_RemoveBundles.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_RemoveBundles.htm rename to EuromodHelp/HelpFiles/EM_VC_RemoveBundles.htm diff --git a/EM_Help/HelpFiles/EM_VC_RemoveProject.htm b/EuromodHelp/HelpFiles/EM_VC_RemoveProject.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_RemoveProject.htm rename to EuromodHelp/HelpFiles/EM_VC_RemoveProject.htm diff --git a/EM_Help/HelpFiles/EM_VC_Settings.htm b/EuromodHelp/HelpFiles/EM_VC_Settings.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_Settings.htm rename to EuromodHelp/HelpFiles/EM_VC_Settings.htm diff --git a/EM_Help/HelpFiles/EM_VC_StartFinishMerging.htm b/EuromodHelp/HelpFiles/EM_VC_StartFinishMerging.htm similarity index 90% rename from EM_Help/HelpFiles/EM_VC_StartFinishMerging.htm rename to EuromodHelp/HelpFiles/EM_VC_StartFinishMerging.htm index 20fcd8b..613acfd 100644 --- a/EM_Help/HelpFiles/EM_VC_StartFinishMerging.htm +++ b/EuromodHelp/HelpFiles/EM_VC_StartFinishMerging.htm @@ -21,10 +21,10 @@

                Start/Finish Merging: Creation of a new online bundle

                Before starting the merge, please open in EUROMOD the bundle where you implemented your changes and log in to the Version Control.

                Then, follow the steps under the NEW ONLINE BUNDLE group of -the VC ribbon):

                +the VC ribbon:

                1. Connect

                -

                Open in EUROMOD the bundle where you implemented your changes.

                +

                Connect to the Version Control project where you want to upload your bundle. Once you are connected to an online project, this will be visible in the application title.

                2. Start new online bundle

                @@ -49,23 +49,23 @@

                3. Download latest bundle

              • Select the components that you would like to download (Note: Switchablepolicyconfig, hicpconfig, input, varconfig, exchangerateconfig and em_log should always be downloaded in order to assure that the downloaded project works properly).
              • -
              • Click on Download .
              • +
              • Click on Download.
              -After the online project has been downloaded, a message will appear. Click on OK . +After the online project has been downloaded, a message will appear. Click on OK. -This project will be automatically opened in EUROMOD. Another message will inform you about this, click again on OK . +This project will be automatically opened in EUROMOD. Another message will inform you about this, click again on OK.

              4. Merge changes in countries

              This step will allow you to easily incorporate your changes to the country spines to the latest online bundle.

              -

              In order to do so, first you have to open the country you would like to merge. To do so, click on Countries and then, on the flag of the country:

              +

              In order to do so, first you have to open the country you would like to merge. Click on the Country Tools tab and then on the flag of the country.

              Then, go back to the Version Control tool tab and click on Merge country. You will be asked if you would like to compare this bundle with another local bundle. That local bundle should correspond to the one from which you initiated the process (the one in which you implemented your changes). Click on Yes.

              -

              The merge tool will be opened. +

              The merge tool window will be opened.

              The merge tool contains several tabs for the different elements that can be compared and merge. It is divided in two sections (local and remote). The area on the left-hand side displays the values in the local bundle (this is the one you have just downloaded). @@ -76,7 +76,7 @@

              4. Merge changes in countries

            • Accepting a change means that this value will be copied from the remote bundle to the local bundle (this is, from the bundle where you implemented your changes to the bundle you just downloaded).
            • -
            • Rejecting a change means that your modified value will be discarded and the original value will remain.
            • +
            • Rejecting a change means that your modified value will be discarded and the original value of the online bundle will remain.
            Once all changes have been accepted or rejected, click on Apply.A message will appear. Click on OK.

            @@ -102,7 +102,7 @@

            5. Merge changes in configuration files

          • Accepting a change means that this value will be copied from the remote bundle to the local bundle (this is, from the bundle where you implemented your changes to the bundle you just downloaded).
          • -
          • Rejecting a change means that your modified value will be discarded and the original value will remain.
          • +
          • Rejecting a change means that your modified value will be discarded and the original value of the online bundle will remain.
          @@ -124,6 +124,8 @@

          7. Upload and finish online bundle

          The version may also be changed by ticking the checkbox Manual Version and then manually writing the new version. Click on Upload.

          Wait until all units are uploaded. A message will appear then. Click on OK.

          + +

          As a last step, you will be asked if you want to automatically rename the current project according to the new release you just generated.

          Once the new bundle is created, all users with permissions to access this project will receive an email informing them about the fact that a new bundle has been created by you for this project.

          @@ -133,7 +135,7 @@

          7. Upload and finish online bundle

          Abort the creation of a new online bundle

          -

          The creation of a new online bundle can be aborted at any time by clicking[4] on the Abort new online bundle button and then clicking on Yes.

          +

          The creation of a new online bundle can be aborted at any time by clicking [4] on the Abort new online bundle button and then clicking on Yes.

          Then click OK on the message that will appear.

          diff --git a/EM_Help/HelpFiles/EM_VC_VarMergeTool.htm b/EuromodHelp/HelpFiles/EM_VC_VarMergeTool.htm similarity index 84% rename from EM_Help/HelpFiles/EM_VC_VarMergeTool.htm rename to EuromodHelp/HelpFiles/EM_VC_VarMergeTool.htm index d4cf16b..f2ca035 100644 --- a/EM_Help/HelpFiles/EM_VC_VarMergeTool.htm +++ b/EuromodHelp/HelpFiles/EM_VC_VarMergeTool.htm @@ -18,22 +18,19 @@

          The Merge Tool for Configuration files

          href="EM_FS_FileStructure.htm">EUROMOD Installation and Architecture - EUROMOD content (parameter files)). Imagine developer A and developer B both have edited EUROMOD configuration files. The tool firstly allows viewing -what was changed by developer A and what by developer B.[1] -Secondly, the tool offers facilities to determine which changes are to be +what was changed by developer A and what by developer B [1]. Secondly, the tool offers facilities to determine which changes are to be overtaken in the final merged version.

          Selecting the versions

          Clicking the button Merge -config files (found in the Administration Tools or Version Control ribbon, depending -on whether you have Version Control installed) opens a dialog which allows defining the versions which are to be merged, +config files (found in the Administration Tools or in the NEW ONLINE BUNDLE section of the Version Control ribbon, depending +on whether you have Version Control installed) or button Compare & merge config files (found in the ADVANCED OPTION section of the Version Control ribbon) opens a dialog which allows defining the versions which are to be merged, whereupon one of the versions is always one of the EUROMOD configuration files, which is -currently loaded by the user interface. This version is referred to as the Local +currently loaded by the user interface and from which the dialog was started. This version is referred to as the Local Version.

          -

          Consequently, the dialog allows for loading a Remote -Version, which is the EUROMOD configuration file -that should be merged with the Local Version.

          +

          Consequently, the dialog allows for loading a Remote Version, which is the EUROMOD configuration file(i.e. XML-files) that should be compared and merged with the Local Version.

          Moreover, a Parent Version can be selected from the Advanced Options. This is the version from which as well the local as the remote version started from, @@ -44,8 +41,7 @@

          Selecting the versions

          Taking into account, that a parent version may not always be available, the dialog allows that either the local (by checking the box Use Local) or the remote version (by checking the box Use Remote) may be -defined as the parent version, meaning that all changes are considered as -remote respectively local. By default (without selecting any parent version from the advanced options), the local version will be defined as parent version.

          +defined as the parent version. By default (without selecting any parent version from the advanced options), the local version will be defined as parent version, meaning that all changes are considered as remote. Note that if you are following the New online bundle process (see Start/Finish Merging: Creation of a new online bundle), then by default the local version will be the one you downloaded, and remote version the one with your changes.

          Clicking OK performs the comparison, which, depending on the extent of differences, may @@ -89,15 +85,14 @@

          Representation of changes
          side-by-side. That means, amongst others, that expanding or scrolling in one of the two lists always effects in the same move of the other list. Initially the two lists are an extract of the two versions, in the sense that only those -parts are displayed which contain changes. This initial view can be further +parts of the spine which contain changes are displayed. This initial view can be further reduced by filtering changes, as described below.

          The Acronym-tab is different from the other three tabs in the sense that it shows a tree-structure, i.e. acronyms (e.g. the acronym ur for urban) are arranged in acronym-levels (e.g. the acronym-level region), -which are themselves arranged in acronym-types (e.g. the acronym-type Demographic).[3] -This tree-structure allows for collapsing and expanding the information, and +which are themselves arranged in acronym-types (e.g. the acronym-type Demographic) [3]. This tree-structure allows for collapsing and expanding the information, and therewith for more clearness.[4]

          Another mentionable, though seldom relevant, particularity @@ -123,7 +118,7 @@

          Types and representation of changes
          • Additions (of e.g. variables) are displayed by a green plus at the left edge of the list.
          • -
          • Accordingly, removals are displayed by a red minus.
          • +
          • Removals are displayed by a red minus.
          • Changes are marked by a pencil. A "change" of e.g. a variable may mean that @@ -160,7 +155,7 @@
            Filtering changes

            Remote / Local:

              -
            • Local and Remote: With this option checked as well local as remote changes are displayed.
            • +
            • Local and Remote: With this option checked both local and remote changes are displayed.
            • Local only: With this option checked only local changes are displayed. For a better @@ -174,15 +169,13 @@
              Filtering changes

              Type:

                -
              • Added: Checking this option effects that added components are +
              • Added: With this option checked, added components are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that added components are not displayed.
              • -
              • Removed: Checking/unchecking this option effects the same for removed components as described above for added components.
              • +
              • Removed: With this option checked, removed components are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that removed components are not displayed.
              • -
              • Changed: In principle checking/unchecking this option effects - the same for changed components as described above for added components. - However, the filter can be further refined by showing only selected types of changes:
              • +
              • Changed: With this option checked, changed components are displayed (unless they are out-ruled by a Level- or Remote/Local-filter), while unchecking the option means that changed components are not displayed. However, the filter can be further refined by showing only selected types of changes:
                • All Settings / Selected Settings: If the option All Settings is checked, all components with changes in any setting are shown. This can however be restricted to, e.g. only show components where a @@ -193,15 +186,13 @@
                  Filtering changes

                Level: This option is only available in the Acronyms-tab.

                  -
                • Category: Selecting this option corresponds in fact to no Level-filter.
                • +
                • Category: With this option selected, there is essentially no Level-filter: all levels (acronyms, levels, types, categories) are shown.
                • -
                • Acronym: Selecting this option effects that changes of acronym-categories are hidden.
                • +
                • Acronym: With this option selected, only changes on acronym, level and type are displayed, i.e. acronym-category changes are hidden.
                • -
                • Level: Selecting this option effects that only changes on acronym-level are displayed, - i.e. acronym- and category-level changes are hidden.
                • +
                • Level: With this option selected, only changes on level and type are displayed, i.e. acronym and category changes are hidden.
                • -
                • Type: Selecting this option effects that only changes on acronym-type are displayed, - i.e. acronym-level-, acronym- and category-level changes are hidden.
                • +
                • Type: With this option selected, only changes on type are displayed, i.e. level, acronym and category changes are hidden.

                Please note that the filters only take effect once the button Apply / Update Filter is clicked.

                @@ -212,20 +203,19 @@
                Filtering changes
                variables which show any changes, were added or deleted. For technical reasons Release Filter pressed in the Acronym-tab effects, that all acronyms (including unchanged) are displayed.[5]

                -
                Defining the carrying out of the merge
                +
                Defining the merge specification

                Initially the merge tool suggests accepting all changes, i.e. overtake them into the merged version. This is reflected by green hooks and green highlighting. Only if there is a conflict, i.e. a component was changed in the local version as well as in the remote version, the local version is preferred, i.e. the remote version shows a red cross (or left-arrow) -and possibly a red highlighting. This default setting can be changed in several -ways.

                +and possibly a red highlighting. Note that conflicts can only occur if you manually select a third version as the Parent, otherwise the version that is set as parent will not show any changes.

                Accepting / rejecting all changes

                In the left-bottom part of the dialog the merge tool offers -the buttons Accept All and Reject All to accept respectively reject +the buttons Accept All and Reject All to accept or reject all changes. For technical reasons (in context with conflict cases) accepting/rejecting all changes can be only done for one version at once. In other words, if one wants to accept all, diff --git a/EM_Help/HelpFiles/EM_VC_WFI_Admin.htm b/EuromodHelp/HelpFiles/EM_VC_WFI_Admin.htm similarity index 98% rename from EM_Help/HelpFiles/EM_VC_WFI_Admin.htm rename to EuromodHelp/HelpFiles/EM_VC_WFI_Admin.htm index c0e37dc..950c2d3 100644 --- a/EM_Help/HelpFiles/EM_VC_WFI_Admin.htm +++ b/EuromodHelp/HelpFiles/EM_VC_WFI_Admin.htm @@ -57,7 +57,7 @@

                Administrating the Users of your VC project

                see a list of all existing users, along with their access rights for this project. You can add further users by clicking on the Add Users button on the top right. This will give you a list of all the VC users (who are not already part of this project) and allow -you to give them access to this project.[1] +you to give them access to this project [1]. Furthermore, you can finetune the type of access each user has. The highest access a user can have is to be an Admin for this project, meaning that (s)he has the power to change everything related to this project or even to remove diff --git a/EM_Help/HelpFiles/EM_VC_WFI_ConnectingProject.htm b/EuromodHelp/HelpFiles/EM_VC_WFI_ConnectingProject.htm similarity index 95% rename from EM_Help/HelpFiles/EM_VC_WFI_ConnectingProject.htm rename to EuromodHelp/HelpFiles/EM_VC_WFI_ConnectingProject.htm index 8ef5a74..ec40698 100644 --- a/EM_Help/HelpFiles/EM_VC_WFI_ConnectingProject.htm +++ b/EuromodHelp/HelpFiles/EM_VC_WFI_ConnectingProject.htm @@ -23,7 +23,7 @@

                Logging-in to the EUROMOD version control system

                the login dialog. The dialog asks you for a User Name and Password. Both should be at your disposal; if not, then you have to get them from the EUROMOD team. Once you enter the required information and click OK, the connection to the EUROMOD version control -system is established.[1] Note that every time +system is established [1]. Note that every time you close EUROMOD you are automatically logged out and you will need to repeat this process.

                Now you are connected to the EUROMOD version control system. The user interface visualises @@ -40,7 +40,7 @@

                Establishing connection to a VC project

                The Version Control ribbon shows in the section NEW ONLINE BUNDLE a chain symbol with the text Connect underneath. Following this instruction opens a dialog which offers all available Version-Controlled (VC) Projects for selection. Which projects -are available and thus displayed depend on your user rights[2]. +are available and thus displayed depend on your user rights [2]. To connect your local project to one of the available VC projects, you need to select it and press OK.

                diff --git a/EM_Help/HelpFiles/EM_VC_WFI_DownloadingRelease.htm b/EuromodHelp/HelpFiles/EM_VC_WFI_DownloadingRelease.htm similarity index 88% rename from EM_Help/HelpFiles/EM_VC_WFI_DownloadingRelease.htm rename to EuromodHelp/HelpFiles/EM_VC_WFI_DownloadingRelease.htm index 4fb9eb1..3340ca4 100644 --- a/EM_Help/HelpFiles/EM_VC_WFI_DownloadingRelease.htm +++ b/EuromodHelp/HelpFiles/EM_VC_WFI_DownloadingRelease.htm @@ -16,13 +16,13 @@

                Downloading a project bundle

                frequently new or improved implementations of EUROMOD add-ons and sometimes even new countries. This section describes how to download a given bundle, either as a clean new project or to update your existing local EUROMOD project. The following instructions -apply to any VC project, including ones that you have created yourself.

                +apply to any VC project, including the ones that you have created yourself.

                Creating a new local project

                In order to create a new (clean) local project out of an online bundle, you first need to click the New Project button to bring up the New Project form. -You can find this button in two places: in the main menu and in the Version Control ribbon within the ADVANCED OPTIONS group. -There you should check the Project on VC option. Note that if you were +You can find this button in two places: in the main menu (white arrow in the upper left corner) and in the Version Control ribbon within the ADVANCED OPTIONS group. +There you should click on the checkbox Project on VC. Note that if you were not already logged into the VC, you will be asked to login now. Then you need to choose the Project and the Bundle you want to download. As with any new project, you also need to specify the Project Folder and Project Name at @@ -81,9 +81,9 @@

                Updating an existing local project

                selected Get Online Version and will create a merge environment for all units where you selected Get Merge Support.
              • If you selected Get Merge Support for one or more Countries or Add-ons, - you can now open them in the UI, click the Compare & merge country/Add-on button on - the VC ribbon and then click Yes to open the Merge Tool using the downloaded - merging environment.
              • + you can now open them in the UI. First you have to open the country, then click the Compare & merge country/Add-on button on + the VC ribbon and click Yes to open the Merge Tool using the downloaded + merging environment. For more information about merging see The Merge Tool section.
              • If you selected Get Merge Support for the configuration files units, you can now click the Compare & merge config files button on the VC ribbon and then click Yes to open the Merge Tool using the downloaded merging environment.
              • diff --git a/EM_Help/HelpFiles/EM_VC_WFI_General.htm b/EuromodHelp/HelpFiles/EM_VC_WFI_General.htm similarity index 100% rename from EM_Help/HelpFiles/EM_VC_WFI_General.htm rename to EuromodHelp/HelpFiles/EM_VC_WFI_General.htm diff --git a/EM_Help/HelpFiles/EM_VC_WFI_GeneratingRelease.htm b/EuromodHelp/HelpFiles/EM_VC_WFI_GeneratingRelease.htm similarity index 98% rename from EM_Help/HelpFiles/EM_VC_WFI_GeneratingRelease.htm rename to EuromodHelp/HelpFiles/EM_VC_WFI_GeneratingRelease.htm index 20fcd8b..aeaa826 100644 --- a/EM_Help/HelpFiles/EM_VC_WFI_GeneratingRelease.htm +++ b/EuromodHelp/HelpFiles/EM_VC_WFI_GeneratingRelease.htm @@ -133,7 +133,7 @@

                7. Upload and finish online bundle

                Abort the creation of a new online bundle

                -

                The creation of a new online bundle can be aborted at any time by clicking[4] on the Abort new online bundle button and then clicking on Yes.

                +

                The creation of a new online bundle can be aborted at any time by clicking [4] on the Abort new online bundle button and then clicking on Yes.

                Then click OK on the message that will appear.

                diff --git a/EM_Help/HelpFiles/EM_WW_AddingCountries.htm b/EuromodHelp/HelpFiles/EM_WW_AddingCountries.htm similarity index 86% rename from EM_Help/HelpFiles/EM_WW_AddingCountries.htm rename to EuromodHelp/HelpFiles/EM_WW_AddingCountries.htm index 1010e08..58cb0eb 100644 --- a/EM_Help/HelpFiles/EM_WW_AddingCountries.htm +++ b/EuromodHelp/HelpFiles/EM_WW_AddingCountries.htm @@ -34,9 +34,7 @@

                Adding countries

                Adding add-ons

                -

                You may have noted that the ribbon Administration Tools contains a button for deleting add-ons but no -button for adding add-ons. This is due to the fact that add-ons are usually not -generated from scratch but either exported from a country (see The ribbon Administration Tools contains buttons for deleting and adding add-ons. Add-ons can also be exported from a country (see Working with EUROMOD - Importing and exporting add-ons) or created by adapting an existing add-on (see Working with EUROMOD - Saving, saving as and auto-saving).

                diff --git a/EM_Help/HelpFiles/EM_WW_AddingFunctions.htm b/EuromodHelp/HelpFiles/EM_WW_AddingFunctions.htm similarity index 79% rename from EM_Help/HelpFiles/EM_WW_AddingFunctions.htm rename to EuromodHelp/HelpFiles/EM_WW_AddingFunctions.htm index c7b20a5..8d40173 100644 --- a/EM_Help/HelpFiles/EM_WW_AddingFunctions.htm +++ b/EuromodHelp/HelpFiles/EM_WW_AddingFunctions.htm @@ -12,14 +12,14 @@

                Adding a function

                To add a function to a policy right-click the name of the function -before respectively after which you want to insert the new function. This opens -the functions context menu, where you select the menu item Add Function Before respectively Add Function After. A sub menu allows choosing +before (after) which you want to insert the new function. This opens +the function's context menu, where you select the menu item Add Function Before (Add Function After). A submenu allows choosing which function should be added.

                -

                This sub menu is slightly different depending on the policy +

                This submenu is slightly different depending on the policy the new function will be part of. For "normal" policies (e.g. benefits and taxes) firstly the policy functions are listed (ArithOp, Elig, BenCalc, etc.), -followed by two sub menus containing System +followed by two submenus containing System Functions (DefConst, DefIL, DefOutput, etc.) and Special Functions (Loop, Store, Totals, etc.). For @@ -29,7 +29,7 @@

                Adding a function

                DefOutput in the case of policy Output_std_cc and function DefIL in the case of policy ILDef_cc) -followed by three sub menus containing Other +followed by three submenus containing Other System Functions (DefConst, DefTU, Uprate, etc.), Policy Functions (ArithOp, Elig, BenCalc, etc.) and Special Functions (Loop, Store, Totals, etc.). See @@ -41,7 +41,7 @@

                Adding a function

                Click the respective function to add the function itself as well as the compulsory parameters of this function (e.g., for most functions, TAX_UNIT and Ouput_Var).

                -

                Alternative to using the function context menu the policy +

                Alternative to using the function context menu, the policy context menu offers the menu item Add Function. Using this adds the function as the very last function of the policy.

                diff --git a/EM_Help/HelpFiles/EM_WW_AddingParameters.htm b/EuromodHelp/HelpFiles/EM_WW_AddingParameters.htm similarity index 91% rename from EM_Help/HelpFiles/EM_WW_AddingParameters.htm rename to EuromodHelp/HelpFiles/EM_WW_AddingParameters.htm index f7b14b1..c1a6146 100644 --- a/EM_Help/HelpFiles/EM_WW_AddingParameters.htm +++ b/EuromodHelp/HelpFiles/EM_WW_AddingParameters.htm @@ -14,7 +14,7 @@

                Adding Parameters

                The Add Parameter Form

                Open the Add Parameter Form to add a -parameter to a function. The form is opened by right clicking the respective +parameter to a function. The form is opened by right-clicking the respective function to open its context menu which provides the menu item Show Add Parameter Form. Alternatively the form can be opened by selecting the function and pressing Control-A. The dialog is non-modal, which means it can be kept open while working on other things. Accordingly it can be resized, shifted and @@ -23,12 +23,12 @@

                The Add Parameter Form

                The form shows all parameters that can be added to the function (in the column Parameter) with a description (in the column Description). -That means, amongst others, that "normal" parameters, which are +That means, amongst others, that "normal" parameters that are already part of the function are not listed (e.g. the parameter TAX_UNIT or the parameter formula of the function ArithOp). Excepted from this rule are "special" parameters, i.e. parameters, which can be added more than once (e.g. the parameter Var of the function DefOutput or the parameter Comp_Cond of the function BenCalc) -and parameters, which have "aliases" (see Replacing +and parameters that have "aliases" (see Replacing an "alias" parameter below).

                In consideration of its non-modality the form observes what @@ -42,8 +42,8 @@

                The Add Parameter Form

                • Show Common Parameters: If this option is unchecked, the form shows only -parameters, which are specific to the respective function, i.e. it hides -parameters, which are common to all (or most) functions, like TAX_UNIT, Output_Var, Who_Must_Be_Elig, +parameters that are specific to the respective function, i.e. it hides +parameters that are common to all (or most) functions, like TAX_UNIT, Output_Var, Who_Must_Be_Elig, etc.
                • Show @@ -85,10 +85,10 @@

                  Adding parameters

                  parameters are added after this parameter, whereas if a function is selected, new parameters are added at the end of the function.

                  -

                  Adding parameters, which allow for more than one incidence

                  +

                  Adding parameters that allow for more than one incidence

                  -

                  Parameters, which allow for more than one incidence (e.g. -the parameter Var of the function DefOutput), +

                  Parameters that allow for more than one incidence (e.g. +the parameter Var of the function DefOutput) can be added in bulk. To add X incidences of a parameter to the function, put X the Count column of the parameter, which automatically selects the parameter (i.e. its check box is ticked). Press @@ -117,7 +117,7 @@

                  Replacing an "alias" parameter

                  listed in the column Replaces while the column Parameter contains their alias. Once the Add button (or the Enter key) is pressed the parameter is -replaced by its alias. The replaced parameter keeps its value: If for example Output_Var was set to the variable bun_s, Output_Add_Var will still be set to this variable.

                  +replaced by its alias. The replaced parameter keeps its value: if for example Output_Var was set to the variable bun_s, Output_Add_Var will still be set to this variable.

                  Note that if both aliases (e.g. as well Output_Var as Output_Add_Var) are removed from the function, they both appear in the Add Parameter Form's @@ -139,7 +139,7 @@

                  Adding the parameter [Placeholder]

                  (normal and) special parameters.

                  Note that the parameter [Placeholder] -can always be added in bulk (see Adding parameters, which +can always be added in bulk (see Adding parameters that allow for more than one incidence above).

                   

                  diff --git a/EM_Help/HelpFiles/EM_WW_AddingPolicies.htm b/EuromodHelp/HelpFiles/EM_WW_AddingPolicies.htm similarity index 85% rename from EM_Help/HelpFiles/EM_WW_AddingPolicies.htm rename to EuromodHelp/HelpFiles/EM_WW_AddingPolicies.htm index 0181993..1b6d50e 100644 --- a/EM_Help/HelpFiles/EM_WW_AddingPolicies.htm +++ b/EuromodHelp/HelpFiles/EM_WW_AddingPolicies.htm @@ -13,10 +13,7 @@

                  Adding Policies

                  Adding a policy

                  -

                  To add a policy right click the name of the policy before -respectively after which you want to insert the new policy. This opens the policy's -context menu, where you select the menu item Add Policy Before respectively Add -Policy After. A sub menu opens, which allows choosing the type of the new policy +

                  To add a policy, right-click on the name of the policy before (after) which you want to insert the new policy. This opens the policy context meny, where you select the menu item Add Policy Before (Add Policy After). A sub menu opens, which allows choosing the type of the new policy (benefit, tax, ...). Click the respective policy type to open a dialog where you are asked to indicate the new policy's name. Clicking OK adds the new policy. Note that the policy's name must not contain any other characters than letters, numbers and underscores. If any other diff --git a/EM_Help/HelpFiles/EM_WW_AddingSystems.htm b/EuromodHelp/HelpFiles/EM_WW_AddingSystems.htm similarity index 95% rename from EM_Help/HelpFiles/EM_WW_AddingSystems.htm rename to EuromodHelp/HelpFiles/EM_WW_AddingSystems.htm index 686992e..f4d1eac 100644 --- a/EM_Help/HelpFiles/EM_WW_AddingSystems.htm +++ b/EuromodHelp/HelpFiles/EM_WW_AddingSystems.htm @@ -14,7 +14,7 @@

                  Adding Systems

                  Adding a system via copy/paste

                  To add a system either click the Add System button in the ribbon Country -Tools or click the a(n existing) system's header to select the menu item Copy/Paste System from the context menu. +Tools or right-click on an existing system's header to select the menu item Copy/Paste System from the context menu. This opens a dialog where you are asked to indicate the new system's name. Note that the system's name must not contain any other characters than letters, numbers and underscores. If any other character is used or if the chosen name diff --git a/EM_Help/HelpFiles/EM_WW_AdminProjects.htm b/EuromodHelp/HelpFiles/EM_WW_AdminProjects.htm similarity index 92% rename from EM_Help/HelpFiles/EM_WW_AdminProjects.htm rename to EuromodHelp/HelpFiles/EM_WW_AdminProjects.htm index 4ffbef7..3799954 100644 --- a/EM_Help/HelpFiles/EM_WW_AdminProjects.htm +++ b/EuromodHelp/HelpFiles/EM_WW_AdminProjects.htm @@ -21,7 +21,7 @@

                  Administration of EUROMOD projects

                  In practical terms this means that a user can easily switch from one project to another. For example -she can have one project containing the " EUROMOD +she can have one project containing the "EUROMOD core project", i.e. the one she gets from the EUROMOD team. Then she may have a project where she implements changes for the purpose of analysing certain policy changes. Then she may have another project where she implements @@ -53,7 +53,7 @@

                  Administration of EUROMOD projects

                  [1] You find the main menu above the Run -EUROMOD button. Press the little arrow to open it.

                  +EUROMOD
                  button, that can be seen when clicking on the Countries ribbon. Press the little arrow to open it.

                  diff --git a/EuromodHelp/HelpFiles/EM_WW_AdministratingAcronyms.htm b/EuromodHelp/HelpFiles/EM_WW_AdministratingAcronyms.htm new file mode 100644 index 0000000..4cca745 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_AdministratingAcronyms.htm @@ -0,0 +1,81 @@ + + + + + + +Acronym Administration + + + + +

                  Acronym Administration

                  + +

                  The following operations are performed with the variable administration tool. To open this tool press the button Variables in the ribbon Administration Tools (also see Working with EUROMOD - Administration of EUROMOD variables paragraph Administrating variables and acronyms in the EUROMOD user interface).

                  + +

                  Listing of acronyms

                  + +

                  The variable administration tool lists in its right part all acronyms available for generating variable names (see the Data Requirement Document (DRD) for detailed information concerning the generation of variable names). The acronyms are organised in a tree with three steps. The first step exhibits the variable type, i.e. DEOMOGRAPHIC, TAX, INCOME, etc. The second step subdivides types into levels. The levels mainly help to better categorize the acronyms [1]. Finally, the third step shows the acronyms themselves together with a verbal description, which is used to generate the Automatic Labels of the variables. If an acronym is categorical (e.g. gender has two categories: male and female), selecting this acronym in the Acronyms list displays the categories in the Categories list (locate below the Acronyms list).

                  + +

                  Adding types

                  + +

                  Click the button Add Type in the ribbon Acronyms of the variable administration tool. Alternatively use the key combination Alt-T. This appends a new empty type row at the end of the Acronyms list.

                  + +

                  Changing types

                  + +

                  To change a type's Description (DEOMOGRAPHIC, TAX, INCOME, etc.) or Acronym (D, T, Y, etc.) simply edit the respective cell. In the case of changing the Acronym the interface checks if the Acronym is already used by another type and, if so, issues a respective message and prevents the change to avoid ambiguousness. Moreover, the interface checks whether the Acronym is used in the current listing of variables. If so, a warning is issued, which lists the variables concerned. The user is still able to accomplish the change, however the description (Automatic Label) of the variables will show up question marks to indicate unknown acronyms.

                  + +

                  Deleting types

                  + +

                  Select the type to delete and click the button Delete Type in the ribbon Acronyms of the variable administration tool. Alternatively use the key combination Ctrl-Shift-T. The interface checks whether this type is used in the current listing of variables. If so, a warning is issued, which lists the variables concerned. The user is still able to accomplish the removal, however the description (Automatic Label) of the variables concerned will show up question marks to indicate unknown acronyms.

                  + +

                  Adding levels

                  + +

                  Click the button Add Level in the ribbon Acronyms of the variable administration tool. Alternatively use the key combination Alt-L. This adds a new empty level row. Note that, other than for types and acronyms, the order of levels is relevant, thus the interface does not simply append the row, but uses the selected row as orientation: if another level row or an acronym row is selected, the new row is inserted below the respective level. If a type row is selected, the level is inserted as the first level of this type.

                  + +

                  Changing levels

                  + +

                  To change a level's description, simply edit the respective cell. Note that, other than types and acronyms, levels do not possess an Acronym (thus the respective cell is not editable), reflecting that levels are not directly used in generating the Automatic Label of variables.[2]

                  + +

                  Deleting levels

                  + +

                  Select the level to delete and click the button Delete Level in the ribbon Acronyms of the variable administration tool. Alternatively use the key combination Ctrl-Shift-L. The interface checks whether acronyms of this level are used in the current listing of variables. If so, a warning is issued, which lists the variables concerned. The user is still able to accomplish the removal, however the description (Automatic Label) of the variables concerned will show up question marks to indicate unknown acronyms.

                  + +

                  Adding acronyms

                  + +

                  Select the level, where to add the new acronym (or select another acronym within the level) and click the button Add Acronym in the ribbon Acronyms of the variable administration tool. Alternatively use the key combination Alt-A. This appends a new empty acronym row at the end of the level.

                  + +

                  Changing acronyms

                  + +

                  To change an acronym's Description (age, gender, etc.) or Acronym (AG, GN, etc.) simply edit the respective cell. In the case of changing the Acronym the interface checks if the acronym is already used within this type or is incorrect, i.e. does not consist of two characters. If so, a respective message is issued and the change is prevented to avoid ambiguousness. Moreover, the interface checks whether an acronym is used in the current listing of variables. If so, a warning is issued, which lists the variables concerned. The user is still able to accomplish the change, however the description (Automatic Label) of the variables concerned will show up question marks to indicate unknown acronyms.

                  + +

                  Deleting acronyms

                  + +

                  Select the acronym to delete and click the button Delete Acronym in the ribbon Acronyms of the variable administration tool. Alternatively use the key combination Ctrl-Shift-A. The interface checks whether the acronym is used in the current listing of variables. If so, a warning is issued, which lists the variables concerned. The user is still able to accomplish the removal, however the description (Automatic Label) of the variables will show up question marks to indicate unknown acronyms.

                  + +

                  Searching acronyms

                  + +

                  The Search buttons at the top right of the ribbon Acronyms allow for searching acronyms.

                  +
                    +
                  • The button Acronyms searches for the acronym as specified in the fields left of the buttons. This is also the default search if you press Enter in the search text field. Select the acronym type (DEOMOGRAPHIC, TAX, INCOME, etc.) in the upper field and the searched acronym in the field below. Pressing the button selects the matched acronym. Note that, if ALL ACRONYMS is selected instead of a specific type, several matches may be found, as acronyms need to be unique only within a type. If more than one occurrence is found, an info box appears showing all the matches. Matches will appear in black colour (blue when hovered) and clicking them will select the corresponding acronym in the acronym tree. Also note that a full acronym description tooltip appears if you hover the mouse over any of the matches.
                  • + +
                  • The button Description searches for acronyms with a description as specified in the fields left of the button. Select the acronym type (DEOMOGRAPHIC, TAX, INCOME, etc.) in the upper field and the searched description in the field below. Note that search patterns ? and * can be used, where ? stands for one arbitrary character and * for any number of arbitrary characters (examples: *child*, *wom?n*). Pressing the button selects the matched acronym. If more than one occurrence is found, an info box appears showing all the matches. Matches will appear in black colour (blue when hovered) and clicking them will select the corresponding acronym in the acronym tree. Also note that a full acronym description tooltip appears if you hover the mouse over any of the matches.
                  • +
                  + +

                   

                  + + + +
                  + +
                  + +

                  [1] The level also plays a role in the naming rules of variables. For more information see Working with EUROMOD - Administrating variables.

                  + +

                  [2] They are used indirectly by determining the order of acronyms. For more information see Working with EUROMOD - Administrating variables.

                  + +
                  + + + + diff --git a/EuromodHelp/HelpFiles/EM_WW_AdministratingVariables.htm b/EuromodHelp/HelpFiles/EM_WW_AdministratingVariables.htm new file mode 100644 index 0000000..cc8d4a3 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_AdministratingVariables.htm @@ -0,0 +1,62 @@ + + + + + + +Administrating Variables + + + + +

                  Administrating Variables

                  + +

                  The following operations are performed with the variable administration tool. To open this tool press the button Variables in the ribbon Administration Tools (also see Working with EUROMOD - Administration of EUROMOD variables paragraph Administrating variables and acronyms in the EUROMOD user interface).

                  + +

                  Adding variables

                  + +

                  Click the button Add Variable in the ribbon Variables of the variable administration tool. Alternatively use the key combination Alt-V. This adds an empty row to the list of variables. At first instance the row is added below the selected row. Note, however, that resorting the list (manually or by an automatic update due to another change) moves empty rows to the beginning (ascended sorting) or end (descended sorting) of the list of variables.

                  + +

                  Changing the name of a variable

                  + +

                  The name of a variable is changed by simply editing the respective cell.

                  + +

                  If the name of an existing variable is edited, the acronyms currently used by this variable are highlighted in the list of acronyms. This indicates which acronyms can furthermore be used and which not. In this context, note that only acronyms of the same or a higher level as its precedent acronyms can be appended. See the EUROMOD Modelling Conventions for detailed information concerning the generation of variable names.

                  + +

                  Once editing is finished, the interface checks the validity of the new name. Firstly, it checks whether the type and acronyms used exist. Secondly, it checks whether the order of acronyms is correct. Finally, it checks whether this name already exists. If any of the checks fails a respective warning is issued, but it is still possible to accomplish the change. The interface automatically updates the variable's description (Automatic Label). For unknown types or acronyms question marks are displayed.

                  + +

                  Note that changing the name is only possible without warning, if the variable was added during the current session of the administration tool. For existing variables a message warns about possibly renaming a variable used in country implementations.

                  + +

                  Changing the monetary state of a variable

                  + +

                  To change the state of a variable from non-monetary to monetary or vice-versa, check respectively uncheck the box alongside the variable name.

                  + +

                  Changing the country specific descriptions of a variable

                  + +

                  If a variable is selected, the Descriptions list (located below the Variables list) shows country specific descriptions for this variable. These descriptions can be changed by simply editing the respective cells.

                  + +

                  Deleting variables

                  + +

                  Select the variable to delete and click the button Delete Variable in the ribbon Variables of the variable administration tool. Alternatively use the key combination Ctrl-Shift-V. A message is issued to warn about possibly deleting a variable used in country implementations. This warning is however not shown, if the variable was added in the current session of the administration tool (and therefore cannot be used yet).

                  + +

                  Filtering variables

                  + +

                  To obtain a better overview the variables listed can be reduced to those having certain properties (monetary / non-monetary, taken from data / generated by the model) and types (DEMOGRAPHIC, LABOUT MARKET, ..., UNKNOWN). Moreover, variables can be restricted to those having a country specific description (for a specific country or for any country). Select the respective properties and/or types and click the button Apply Filters to list the variables fulfilling the criteria.

                  + +

                  The buttons Select All Filters and Unselect All Filters serve the easier selection of filters by generating an original state (all filters selected or no filters selected) that then can be refined as required.

                  + +

                  Sorting variables

                  + +

                  By clicking the header of the Name column variables are sorted by name. A second click changes the sorting direction (from ascending to descending and vice versa). Variables can also be sorted by Automatic Label, but the result will not differ much from sorting by name.

                  + +

                  Searching variables

                  + +

                  The Search button at the top right of the ribbon Variables allows for checking the existence of the variable as specified in the field above the button. Note that it is possible to use the search patterns ? and *, where ? stands for one arbitrary character and * for any number of arbitrary characters. The search will select the first visible match of the search pattern. If more than one occurrence is found or if the only occurrence is hidden due to filtering, an info box appears showing all the matches. Hidden matches will appear in dark grey colour. Visible matches will appear in black colour (blue when hovered) and clicking them will select the corresponding variable in the variables table. Also note that a full variable description tooltip appears if you hover the mouse over any of the matches.

                  + +

                   

                  + + + + + + diff --git a/EM_Help/HelpFiles/EM_WW_Administration.htm b/EuromodHelp/HelpFiles/EM_WW_Administration.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_Administration.htm rename to EuromodHelp/HelpFiles/EM_WW_Administration.htm diff --git a/EuromodHelp/HelpFiles/EM_WW_Applications.htm b/EuromodHelp/HelpFiles/EM_WW_Applications.htm new file mode 100644 index 0000000..7e86729 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_Applications.htm @@ -0,0 +1,33 @@ + + + + + + +Applications + + + + +

                  Applications

                  + +

                  EUROMOD provides access to a couple of extended functionalities. To access the tools, select the ribbon Applications and press the respective button.

                  + +

                   

                  +
                  +

                  Applications included in EUROMOD are:

                  + +

                  Each of them is described in the following sections.

                  +
                  + + + + + + diff --git a/EM_Help/HelpFiles/EM_WW_BackupRestore.htm b/EuromodHelp/HelpFiles/EM_WW_BackupRestore.htm similarity index 87% rename from EM_Help/HelpFiles/EM_WW_BackupRestore.htm rename to EuromodHelp/HelpFiles/EM_WW_BackupRestore.htm index 7c26dbf..accce58 100644 --- a/EM_Help/HelpFiles/EM_WW_BackupRestore.htm +++ b/EuromodHelp/HelpFiles/EM_WW_BackupRestore.htm @@ -13,8 +13,8 @@

                  Backup - Restore

                  Some actions, like for example importing and exporting systems, do not allow for undo (see Working with EUROMOD - Undo -and redo).[1] However, +and redo) [1]. However, in order to still enable going back to the state before the action, the user interface generates a backup of the XML-files, which allows for restoring this state.

                  @@ -27,9 +27,8 @@

                  Backup

                  folder (see EUROMOD Installation and Architecture - EUROMOD content (parameter files) Organisation of files). The folder is called cc_yyyy-mm-dd_hh-mm-ss, for example RO_2013-12-29_14-12-00, -for a backup of Romania on the 29th December 2013, at twelve past two pm.[2] -After the (successful) termination of the action the user interface issues a +for a backup of Romania on the 29th December 2013, at twelve past two pm [2]. After the (successful) termination of the action the user interface issues a message, which indicates the existence of the backup, how the file is called and where it is stored. The message also informs about the possibility to restore this version via the button Restore @@ -42,8 +41,7 @@

                  Restore

                  Clicking the button Restore in the ribbon Country Tools opens a dialog -allowing for selecting the backup-folder as described in paragraph Backup above.[3] -Once the appropriate folder is selected, the user interface performs the restore +allowing for selecting the backup-folder as described in paragraph Backup above [3]. Once the appropriate folder is selected, the user interface performs the restore and informs about success (or failing).

                   

                  diff --git a/EM_Help/HelpFiles/EM_WW_Bookmarks.htm b/EuromodHelp/HelpFiles/EM_WW_Bookmarks.htm similarity index 91% rename from EM_Help/HelpFiles/EM_WW_Bookmarks.htm rename to EuromodHelp/HelpFiles/EM_WW_Bookmarks.htm index e594c30..36bfe13 100644 --- a/EM_Help/HelpFiles/EM_WW_Bookmarks.htm +++ b/EuromodHelp/HelpFiles/EM_WW_Bookmarks.htm @@ -14,7 +14,7 @@

                  Setting bookmarks

                  Setting a bookmark

                  Select the row of the policy, function or parameter you want -to bookmark, select the ribbon Display +to bookmark, select the ribbon Display and click the button Set Bookmark. Entering a name in the appearing dialog and confirming with OK adds the bookmark alongside the Undo/Redo buttons in the top left corner of the user interface.

                  @@ -40,7 +40,7 @@

                  Removing a

                  Note that bookmarks are personal settings, i.e. they are not reflected in the country's parameter files and therefore not shared with other -users. This implicates that saving has no effect on bookmarks and undo is not +users. This implies that saving has no effect on bookmarks and undo is not available. Use the approach described above to remove bookmarks.

                   

                  diff --git a/EM_Help/HelpFiles/EM_WW_ChangingParameters.htm b/EuromodHelp/HelpFiles/EM_WW_ChangingParameters.htm similarity index 87% rename from EM_Help/HelpFiles/EM_WW_ChangingParameters.htm rename to EuromodHelp/HelpFiles/EM_WW_ChangingParameters.htm index 409918d..a1285a0 100644 --- a/EM_Help/HelpFiles/EM_WW_ChangingParameters.htm +++ b/EuromodHelp/HelpFiles/EM_WW_ChangingParameters.htm @@ -43,8 +43,8 @@

                  Editing categorical parameters

                  Editing formula, condition and variable parameters

                  For formula parameters, i.e. -parameters, taking formulas like yem*10%+ils_ben/2, -condition parameters, i.e. parameters taking conditions like {IsDependentChild & dag<3} and +parameters taking formulas like yem*10%+ils_ben/2, +condition parameters, i.e. parameters taking conditions like IsDependentChild & dag<3 and variable/incomelist parameters, i.e. parameters taking the names of variables and incomelists, the user interface provides assistance in the form of so called "IntelliSense".

                  @@ -68,8 +68,7 @@

                  Editing formula, condition and variable parameters

                  Note that, if one types the character 'q', IntelliSense lists all EUROMOD queries and thus provides an overview over all -available queries. Moreover note that typing the character '<' lists the -operators <max>, <min> and <abs>().

                  +available queries.

                  User interface's assistance in adding and using footnote parameters

                  @@ -127,7 +126,7 @@

                  User interface's assistance in adding and using footnote parameters

                  Generating #_amount parameters: #_amount parameters are in fact just special footnote parameters, whereupon the speciality is based in the fact that the only operand they can be assigned to is the operand Amount. Accordingly -they are generate as any other footnote +they are generated as any other footnote parameter with the difference that, instead of operand#, you must type a (or am) to bring IntelliSense to list Amount#x1, Amount#x2 and Amount#x3. The rest of the procedure is as described above.

                  @@ -141,7 +140,7 @@

                  User interface's assistance in adding query parameters

                  Some EUROMOD queries provide (optional or compulsory) query parameters to specify their behaviour. These query parameters are very similar -to footnote parameters. Just like footnote parameters query parameters start +to footnote parameters. Just like footnote parameters, query parameters start with #_ (e.g. #_AgeMin, #_AgeMax) and they are assigned to the respective query by #number. To learn more about EUROMOD queries please consult EUROMOD Functions - Queries. Again this section concentrates on the user @@ -170,21 +169,19 @@

                  Replacing parameter names by their refers to parameters, which replace each other, for example Comp_perTU / Com_perElig or Output_Var / Output_Add_Var (each also vice versa). Confirming the question with OK -replaces the parameters name respectively.

                  +replaces the parameter's name respectively.

                  Changing the order of parameters

                  There are two ways to change the order of parameters: by -using (a) drag and drop or (b) key Up -/ key Down. For each of them first +using (a) drag and drop or (b) control + Up/Down keys. For each of them first select the respective parameters. A single parameter is selected by simply clicking it (more precisely, its name in the Policy column). A range of parameters is selected by selecting the first parameter (i.e. its name in the Policy column), then pressing and holding the Shift -key while selecting the last parameter. Light blue back colour shows the -selection. For a more detailed description of how to select cells see Working with EUROMOD Selecting components and +key while selecting the last parameter. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working with EUROMOD - Selecting components and values.

                  For (a) click the respective parameters with the left mouse @@ -205,10 +202,10 @@

                  Deleting (ranges of) parameter values

                  Note that this subsection describes how to delete parameter values and not how to delete parameters as a whole. For the latter please refer -to Working with EUROMOD Deleting +to Working with EUROMOD - Deleting parameters.

                  -

                  A parameters value is 'deleted' if the Delete-key is pressed while the respective cell is selected. +

                  A parameter's value is 'deleted' if the Delete-key is pressed while the respective cell is selected. 'Delete' is put in quotation marks because in fact the value is not set to empty but to n/a (not available or not applicable). Note that this does not apply to parameter values in the @@ -218,25 +215,15 @@

                  Deleting selecting the respective range before pressing the Delete-key. A range of parameter values is selected by selecting the first parameter value (i.e. the respective cell), then pressing and holding the Shift key while selecting the -last parameter value. Light blue back colour shows the selection. For a more +last parameter value. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working -with EUROMOD Selecting components and values. Note that, in order to +with EUROMOD - Selecting components and values. Note that, in order to delete parameter values, the Policy column must not be part of the selection as this instructs the interface to delete the whole parameter.

                  -

                  Automatic -commenting of incomelist components

                  - -

                  The function context menu shows an additional menu item if -opened for a ILDef function: Description as Comment. If the menu -point is selected the user interface puts a description of all components of -the concerned incomelist into the Comments -column. As an example, for the Estonian incomelist il_UAB_meanstest consisting of the components ils_origy, bmact and bcclg_s, the user interface will -describe these components as original -income, parental benefit (vanemapalk) -and large family parent allowance -(seitsme- ja enamalapselise pere vanema toetus). Note that country specific -descriptions are used where available.

                  +

                  Automatic commenting of incomelist components

                  + +

                  The context menu for a DefIl function shows an additional menu item: Description as Comment. If the user selects this item, tge Comments column will be automatically filled with the description of all the components of the concerned incomelist. As an example, if an income list contains variables yem and yse, the Comments column will be filled, respectively, with income: employment and self employment. Note that country specific descriptions are used where available.

                   

                  diff --git a/EM_Help/HelpFiles/EM_WW_ChangingPolicyView.htm b/EuromodHelp/HelpFiles/EM_WW_ChangingPolicyView.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ChangingPolicyView.htm rename to EuromodHelp/HelpFiles/EM_WW_ChangingPolicyView.htm diff --git a/EM_Help/HelpFiles/EM_WW_ChangingSettings.htm b/EuromodHelp/HelpFiles/EM_WW_ChangingSettings.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ChangingSettings.htm rename to EuromodHelp/HelpFiles/EM_WW_ChangingSettings.htm diff --git a/EM_Help/HelpFiles/EM_WW_ChangingTBS.htm b/EuromodHelp/HelpFiles/EM_WW_ChangingTBS.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ChangingTBS.htm rename to EuromodHelp/HelpFiles/EM_WW_ChangingTBS.htm diff --git a/EM_Help/HelpFiles/EM_WW_CleaningSystems.htm b/EuromodHelp/HelpFiles/EM_WW_CleaningSystems.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_CleaningSystems.htm rename to EuromodHelp/HelpFiles/EM_WW_CleaningSystems.htm diff --git a/EM_Help/HelpFiles/EM_WW_CleaningVariables.htm b/EuromodHelp/HelpFiles/EM_WW_CleaningVariables.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_CleaningVariables.htm rename to EuromodHelp/HelpFiles/EM_WW_CleaningVariables.htm diff --git a/EM_Help/HelpFiles/EM_WW_ColumnChooser.htm b/EuromodHelp/HelpFiles/EM_WW_ColumnChooser.htm similarity index 79% rename from EM_Help/HelpFiles/EM_WW_ColumnChooser.htm rename to EuromodHelp/HelpFiles/EM_WW_ColumnChooser.htm index e343bdb..47a7e98 100644 --- a/EM_Help/HelpFiles/EM_WW_ColumnChooser.htm +++ b/EuromodHelp/HelpFiles/EM_WW_ColumnChooser.htm @@ -11,7 +11,7 @@

                  The Hidden Systems Box

                  -

                  The system context menu's item Move To Hidden Systems Box ... shows a couple of sub menu itemsThe system context menu's item Move To Hidden Systems Box ... shows a couple of sub menu items [1], which provide options for hiding and unhiding systems from the main view. These options are helpful for reasons of manageability, for example if a reform @@ -33,8 +33,13 @@

                  Hiding Systems

                • Sub menu item Select Systems ...: Selecting this option provides a list of all visible systems and allows selecting them for hiding. Note that clicking OK without selecting any system, though -not having any effect on system visibility, may still (re)show the Hidden System Box (if it was closed via -its close box).
                • +not having any effect on system visibility, may still (re)show the Hidden System Box (if it was closed via its close box). + +
                • Sub menu item All Systems to the left: Selecting this option hides all other systems to the left of the selected one, while the selected system and the ones at its right remains visible.
                • +
                • Sub menu item All Systems to the right: Selecting this option hides all other systems to the right of the selected one, while the selected system and the ones at its left remains visible.
                • +
                • Sub menu item Unhide All Systems: all systems become visible again.
                • +
                • Sub menu item Show Hidden Systems Box: make the hidden system box visible, in case the user closed it.
                • +
                • Using Drag and Drop: One can also hide systems by dragging them into the Hidden System Box, i.e. clicking the respective system's header with the left mouse button, dragging the system with @@ -72,7 +77,7 @@

                  Unhiding Systems

                  [1] -These sub menu items are accessed by firstly right clicking a(ny) system's +These sub menu items are accessed by firstly right clicking any system's header to open the system context menu and then moving the mouse over the menu item Move To Hidden Systems Box ....

                  diff --git a/EM_Help/HelpFiles/EM_WW_ComparingCountryVersions.htm b/EuromodHelp/HelpFiles/EM_WW_ComparingCountryVersions.htm similarity index 64% rename from EM_Help/HelpFiles/EM_WW_ComparingCountryVersions.htm rename to EuromodHelp/HelpFiles/EM_WW_ComparingCountryVersions.htm index bb8a463..ad7fb43 100644 --- a/EM_Help/HelpFiles/EM_WW_ComparingCountryVersions.htm +++ b/EuromodHelp/HelpFiles/EM_WW_ComparingCountryVersions.htm @@ -11,80 +11,31 @@

                  Comparing versions of a country

                  -

                  It may happen that a country is concurrently adapted by two -(or more) developers - for example the country is worked on by an Essex -developer as well as the country team - which usually asks for later -consolidating of the different versions. The user interface offers support for -this task by providing an option to compare versions of a country.[1]

                  +

                  It may happen that a country is concurrently adapted by two (or more) developers - for example the country is worked on by a JRC developer as well as the country team - which usually asks for later consolidating of the different versions. The user interface offers support for this task by providing an option to compare versions of a country.[1]

                  Performing the comparison

                  -

                  Open (the user interface's version of) the country and click -the button Compare Versions in the -ribbon Country Tools. This opens a -dialog allowing for selecting the country folder to compare with.[2] -Once the comparison version is selected the user interface starts its task, -whereat it firstly searches for a system with the same unique identifier (in -the following abbreviated as UID) in both versions. If it does not find such a -system it reports that a comparison is not possible. The user interface uses -this "match system" to "symmetrise" the versions, i.e. to -take account of the fact that each of the versions may contain components -(policies, functions, parameters) which do not exist in the other version, and -thus cannot be displayed side by side with a correspondent component (that means, -amongst others, that components which do not exist in the interface's version -need to be added at an appropriate place).

                  - -

                  Further on the user interface imports all systems of the -comparison version. The names of the imported systems are prefixed if with 1_ (e.g. system BE_2010 is called 1_BE_2010)[3], unless no such system exists in the user interface's -version, in which case the name is not changed (e.g. system BE_2014, which exists only in the -comparison version is still called BE_2014). -Then the user interface compares each "pair of twin systems", where -the twins are identified as systems with the same UID in the user interface's and the comparison version. Please note, that -systems with just equal names but unequal UIDs are not recognised as twins! The -imported system is still called e.g. 1_BE_2013, however -point c) below applies instead of point b).

                  - -

                  The comparison of twin systems consists of discovering -differences in the values of policies, functions and parameters of the two -systems, where these components are again matched by their UID.

                  +

                  Open (the user interface's version of) the country and click the button Compare Versions in the ribbon Country Tools. This opens a dialog allowing for selecting the country folder to compare with [2]. Once the comparison version is selected the user interface starts its task, whereat it firstly searches for a system with the same unique identifier (in the following abbreviated as UID) in both versions. If it does not find such a system it reports that a comparison is not possible. The user interface uses this "match system" to "symmetrise" the versions, i.e. to take account of the fact that each of the versions may contain components (policies, functions, parameters) which do not exist in the other version, and thus cannot be displayed side by side with a correspondent component (that means, amongst others, that components which do not exist in the interface's version need to be added at an appropriate place).

                  + +

                  Further on the user interface imports all systems of the comparison version. The names of the imported systems are prefixed if with 1_ (e.g. system BE_2010 is called 1_BE_2010) [3], unless no such system exists in the user interface's version, in which case the name is not changed (e.g. system BE_2014, which exists only in the comparison version is still called BE_2014). Then the user interface compares each "pair of twin systems", where the twins are identified as systems with the same UID in the user interface's and the comparison version. Please note, that systems with just equal names but unequal UIDs are not recognised as twins! The imported system is still called e.g. 1_BE_2013, however point c) below applies instead of point b).

                  + +

                  The comparison of twin systems consists of discovering differences in the values of policies, functions and parameters of the two systems, where these components are again matched by their UID.

                  Results of the comparison

                  -

                  There are -three possible comparison results for each system imported from the comparison -version:

                  +

                  There are three possible comparison results for each system imported from the comparison version:

                    -
                  • No differences are found between the twin -systems: In this case the user interface removes the imported twin (e.g. system -1_BE_2010), as it does not provide -any additional information. The user is informed about the equality by an -information box displayed after the comparison.
                  • - -
                  • The twin systems show differences: In this case -the user interface highlights the concerned cells with colour and expands all -policies/functions which show differences. More precisely it implements a -"Differences to Base System Formatting" (see Working with EUROMOD - Formatting - -Conditional formatting).
                  • - -
                  • The imported system does not have a twin: In -this case the user is informed about this new system by an information box -displayed after the comparison.
                  • +
                  • No differences are found between the twin systems: In this case the user interface removes the imported twin (e.g. system 1_BE_2010), as it does not provide any additional information. The user is informed about the equality by an information box displayed after the comparison.
                  • + +
                  • The twin systems show differences: In this case the user interface highlights the concerned cells with colour and expands all policies/functions which show differences. More precisely it implements a "Differences to Base System Formatting" (see Working with EUROMOD - Formatting - Conditional formatting).
                  • + +
                  • The imported system does not have a twin: In this case the user is informed about this new system by an information box displayed after the comparison.
                  -

                  The information box displayed after the comparison may also -report the following: "For -differences which cannot be reflected in the spine move the mouse over the red -and green info markers in the group column.". The next paragraph explains what -this means.

                  +

                  The information box displayed after the comparison may also report the following: "For differences which cannot be reflected in the spine move the mouse over the red and green info markers in the group column.". The next paragraph explains what this means.

                  Differences covered by "info markers"

                  -

                  If the above mentioned information is issued, the Group column shows so called "info -markers", which are little red or green squares. Moving the mouse over a -cell with an info marker shows an information box, which tells for example:

                  +

                  If the above mentioned information is issued, the Group column shows so called "info markers", which are little red or green squares. Moving the mouse over a cell with an info marker shows an information box, which tells for example:

                  @@ -115,8 +66,8 @@
                  Possible differences indicated by info markers
                  - + @@ -151,14 +102,12 @@
                  Handling info markers

                  Together with the Compare Versions button the user interface provides three further buttons: Remove Info Markers, Store Info Markers and Load Info Markers. To understand this, one needs to know that info markers are not permanent, in the sense that, if -the interface is closed and reopened, the info markers are gone.[4] -This may be bothersome if for example one wants to continue working only the +the interface is closed and reopened, the info markers are gone [4]. This may be bothersome if for example one wants to continue working only the next day, but still not lose the info markers. Therefore the two latter buttons (Store, Load) allow storing info markers before closing and reloading them -on reopening the interface.[5] -The former button (Remove) allows for +on reopening the interface [5]. The former button (Remove) allows for removing info markers to get rid of possibly disturbing red and green squares.

                  Differences not covered by the comparison

                  diff --git a/EM_Help/HelpFiles/EM_WW_ComparingSystems.htm b/EuromodHelp/HelpFiles/EM_WW_ComparingSystems.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ComparingSystems.htm rename to EuromodHelp/HelpFiles/EM_WW_ComparingSystems.htm diff --git a/EuromodHelp/HelpFiles/EM_WW_ComponentUse.htm b/EuromodHelp/HelpFiles/EM_WW_ComponentUse.htm new file mode 100644 index 0000000..a981d2f --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_ComponentUse.htm @@ -0,0 +1,50 @@ + + + + + + +Checking component use + + + + +

                  Checking component use

                  + +

                  Selecting the ribbon Country Tools and pressing the button Component Use opens the Component Use dialog. This dialog allows for checking which "components" are used for the implementation of the country in EUROMOD. The following components can be included into the check:

                  + +

                  Included components

                  + +

                  Variables: If this option is selected all EUROMOD variables, as listed in the variables file, are included into the check. As the checking for the use of all variables may cause that the check takes quite a lot of time, the variables can be restricted to those having country specific description. For closer information see Working with EUROMOD - Administration of EUROMOD variables. Moreover, the check-boxes monetary, non-monetary, simulated and non-simulated allow for further restriction to the variables which feature the respective characteristics.

                  + +

                  Assessment Units: Selecting this option includes assessment units in the check (see EUROMOD Basic Concepts - EUROMOD terminology).

                  + +

                  Incomelists: Selecting this option includes incomelists in the check (see EUROMOD Basic Concepts - EUROMOD terminology).

                  + +

                  Queries: Selecting this option includes EUROMOD queries in the check (see EUROMOD Functions - Queries).

                  + +

                  Component named: This option allows for checking the use of a specific component, i.e. a specific variable, assessment unit, incomelist or query. Moreover, it allows for checking the use of variables and constants generated with the functions DefVar and DefConst (which are not taken into account by the option All Variables).

                  + +

                  Ignore if Switched Off: Selecting this option means that components used only in switched off policies and functions are not recognised as used.

                  + +

                  Include Systems: The list allows to restrict the check for usage to the selected systems.

                  + +

                  Listing of used components

                  + +

                  Pressing the Start button starts the check. Once the check is finished, components as selected are listed if they are used in the implementation of the country. If a component is used several times, it is listed as often as it is used, each time with the respective location of use.

                  + +

                  Jumping to a component

                  + +

                  Selecting a specific use of a component and pressing the button Goto jumps to the selected use in the country's implementation. If the dialog is reopened (by pressing the button Component Use) it still shows the content of the last check, i.e. jumping to a component does not "destroy" the results of the check. The results of the last check are in general only cleared by a new check, but not for example by closing the dialog.

                  + +

                  Storing results

                  + +

                  Pressing the Store button allows for specifying a file where the current listing of component usage is stored in tabulated text format.

                  + +

                   

                  + + + + + + diff --git a/EM_Help/HelpFiles/EM_WW_ConditionalFormatting.htm b/EuromodHelp/HelpFiles/EM_WW_ConditionalFormatting.htm similarity index 93% rename from EM_Help/HelpFiles/EM_WW_ConditionalFormatting.htm rename to EuromodHelp/HelpFiles/EM_WW_ConditionalFormatting.htm index 43ff6d7..384a29d 100644 --- a/EM_Help/HelpFiles/EM_WW_ConditionalFormatting.htm +++ b/EuromodHelp/HelpFiles/EM_WW_ConditionalFormatting.htm @@ -12,7 +12,7 @@

                  Conditional Formatting

                  To access the Conditional -Formatting dialog select the ribbon Display +Formatting dialog select the ribbon Display and click the button Conditional Formatting. The dialog supports two ways of conditional formatting:

                  @@ -44,14 +44,14 @@

                  Conditional Formatting

                  i.e. the second incorrect part is ignored (note the missing second curly bracket).

                  -

                  Systems to apply the CF on: The column Systems to Apply in the CFs row +

                  Systems to apply the CF on: The column Systems to Apply in the CF's row indicates the systems the CF should be applied on. To change this setting, click the respective cell with the left mouse button. In the appearing dialog select the respective systems and press OK to overtake them into the table.

                  The CF's text and back colour: The columns Back Color and Text Color in -the CFs row define the respective colour settings of the CF. To change them, +the CF's row define the respective colour settings of the CF. To change them, click the respective cell with the left mouse button. In the appearing colour dialog select the desired colour and press OK to overtake it into the table. To set the colour back (i.e. use no special back @@ -91,7 +91,7 @@

                  Differences to Base System Formatting

                  Automatically setting the Base System Formatting

                  You can access this -functionality from the ribbon Display +functionality from the ribbon Display by clicking the button Automatic Conditional Formatting. This function will try to match all the Systems according to their names and automatically select the appropriate Base System @@ -101,9 +101,9 @@

                  Automatically setting the Base System Formatting

                  function is only able to match standardized System names, such as "CC_YYYY" (where "CC" is the short country code and "YYYY" is the 4-digit year) or "CC_YYYY_SomethingElse" (where "SomethingElse" can be anything at -all). For the system UK_2012 the function will for example try to find Base -System UK_2011, for the system UK_2012_reform it will try to find Base System -UK_2012. If the function cannot find a match for a given System, then it will +all). For the system DK_2012 the function will for example try to find Base +System DK_2011, for the system DK_2012_reform it will try to find Base System +DK_2012. If the function cannot find a match for a given System, then it will not change anything.

                   

                  diff --git a/EM_Help/HelpFiles/EM_WW_Configuration.htm b/EuromodHelp/HelpFiles/EM_WW_Configuration.htm similarity index 83% rename from EM_Help/HelpFiles/EM_WW_Configuration.htm rename to EuromodHelp/HelpFiles/EM_WW_Configuration.htm index 4f22a86..6f6b60d 100644 --- a/EM_Help/HelpFiles/EM_WW_Configuration.htm +++ b/EuromodHelp/HelpFiles/EM_WW_Configuration.htm @@ -12,7 +12,7 @@

                  Configuration dialog

                  The -configuration dialog, which is opened by selecting the main menu's item Configuration, offers options to +configuration dialog, which is opened by selecting the main menu's item Project configuration, offers options to configure the project currently loaded by the user interface. There are four tabs, which provide the following options.

                  @@ -38,7 +38,11 @@
                  Input Folder
                  Set Standard Input/Output-Paths

                  Pressing this -button sets the Output Folder to ProjectPath\Output and the Input Folder to ProjectPath\Input.

                  +button sets the Output Folder to Project Path\Output and the Input Folder to Project Path\Input.

                  + +
                  Store View Settings
                  +

                  EUROMOD saves the view settings if this option is ticked.

                  +
                  Close User Interface with Last Country
                  @@ -49,19 +53,13 @@
                  Close User Interface with Last Country

                  Tab Version Control

                  -
                  Log In At Project Load
                  +
                  Is Version Controlled

                  If this option is checked, the user is automatically connected to version control when the project is loaded, provided that the project is version controlled. For further information see EUROMOD Version Control - Logging in and out.

                  -
                  Time-Out
                  - -

                  This field indicates the time in milliseconds any single version -control operation (essentially upload or download of a unit) may take until it -breaks with a time-out. It cannot be less than two minutes (120,000 ms). The (recommended) default is three minutes (180,000 ms).

                  -

                  Tab Auto save

                  This tab allows for defining the auto-saving interval, or to diff --git a/EM_Help/HelpFiles/EM_WW_ConfiguringDatasets.htm b/EuromodHelp/HelpFiles/EM_WW_ConfiguringDatasets.htm similarity index 87% rename from EM_Help/HelpFiles/EM_WW_ConfiguringDatasets.htm rename to EuromodHelp/HelpFiles/EM_WW_ConfiguringDatasets.htm index 669fce6..24df571 100644 --- a/EM_Help/HelpFiles/EM_WW_ConfiguringDatasets.htm +++ b/EuromodHelp/HelpFiles/EM_WW_ConfiguringDatasets.htm @@ -26,7 +26,7 @@

                  Assigning datasets to systems

                  information).

                  There are three possible settings. A cross (x) indicates -that the dataset and the system form a system-dataset combination. best also denotes a system-dataset +that the dataset and the system form a system-dataset combination. Best also denotes a system-dataset combination, however in addition this combination is a Best Match (see EUROMOD Basic Concepts - Terminology). n/a means that the system cannot be run with the dataset.

                  @@ -48,10 +48,9 @@

                  Adding removing or renaming a dataset

                  To delete a dataset, select it and click the Delete Dataset button. Note that the dataset is removed without any further warning, but you can still undo this action by closing the dialog with the Cancel -button or by using the undo functionality (see Working -with EUROMOD - Undo and redo). Of course the dataset (text file) is not +button. Of course the dataset (text file) is not deleted physically, the removal concerns only the ability to use the dataset -with the countrys systems.

                  +with the country's systems.

                  To rename a dataset, select it and click the Rename Dataset button. This opens a textbox, which allows for entering the new name.

                  @@ -67,8 +66,8 @@

                  The settings of the selected dataset

                  setting indicates the year the monetary values within the data refer to.

                  Currency: This -setting indicates in which currency data are stored. Possible values are euro or national (standing for national currencies like UK Pound, Danish -Krone, Polish Zloty, etc.).

                  +setting indicates in which currency data are stored. Possible values are euro or national (standing for national currencies like Danish +Krone, Polish Zloty, Bulgarian Lev, etc.).

                  Decimal Sign: This setting indicates whether data uses point (.) as decimal sign or comma (,).

                  @@ -92,7 +91,7 @@

                  The settings of the selected dataset

                  href="EM_FC_SetDefault.htm">SetDefault.

                  Read Expenditure-related Variables: -Checking this option will cause all expenditure-related variables to be automatically imported frorm the data. These variables can then be used within the model exactly as if they were defined one by one in the variables file.The definitions of expenditure-related variables are as follows:

                  +Checking this option will cause all expenditure-related variables to be automatically imported from the data. These variables can then be used within the model exactly as if they were defined one by one in the variables file. The definitions of expenditure-related variables are as follows:

                  • Expenditure variables: all variables whose name starts with "x" followed by numbers only; imported as monetary variables
                  • Quantity variables: all variables whose name starts with "q" followed by numbers only; imported as non-monetary variables
                  • @@ -101,16 +100,16 @@

                    The settings of the selected dataset

                    String Output Variables: This setting indicates a list of variables, separated by space, which exists in the described data and are to be transferred to output.
                    The values of the variables may be alpha-numeric (i.e. contain strings).
                    -Note that a warning is issued, if the variables are not found. Moreover, note that the name is not case-sensitive. +Note that a warning is issued if the variables are not found. Moreover, note that the name is not case-sensitive.

                    -

                    Ind.Tax Table Year: See Defining Indirect Tax Rates and Excises Prices for the usage of this value.

                    +

                    Ind. Tax Table Year: See Defining Indirect Tax Rates and Excises Prices for the usage of this value.

                    Read Expenditure-related Variables: -Checking this option means that the programme reads all expenditure-related variables, -where expenditure-related means that the name of the variable must start with x (for expenditure), p (for price), q (for quantity) or xs (for share of income). +Checking this option means that the programme reads all expenditure-related variables, +where expenditure-related means that the name of the variable must start with x (for expenditure), p (for price), q (for quantity) or xs (for share of income). All other characters must be digits (0 to 9).
                    -These variables are then disposable, independent on whether they are declared in the variables file or not. +These variables are then disposable, independent on whether they are declared in the variables file or not. That means amongst others that they are covered by using e.g. VarGroup=x* in the DefOutput function (independent on whether they are used elsewhere).

                    diff --git a/EM_Help/HelpFiles/EM_WW_CopyingFunctions.htm b/EuromodHelp/HelpFiles/EM_WW_CopyingFunctions.htm similarity index 90% rename from EM_Help/HelpFiles/EM_WW_CopyingFunctions.htm rename to EuromodHelp/HelpFiles/EM_WW_CopyingFunctions.htm index 9a67d9d..a0f0aa0 100644 --- a/EM_Help/HelpFiles/EM_WW_CopyingFunctions.htm +++ b/EuromodHelp/HelpFiles/EM_WW_CopyingFunctions.htm @@ -12,7 +12,7 @@

                    Copying functions within a country

                    To copy a single function right-click its name, which opens -the functions context menu, where you select the menu item Copy Function(s).

                    +the function's context menu, where you select the menu item Copy Function(s).

                    To copy several functions, first select the respective functions, then click within the selection to open the @@ -22,12 +22,12 @@

                    Copying functions within a country

                    note that only functions of one policy can be copied at the same time - a warning is issued if the selection does not fulfil this criterion. (For a description of how to select functions see Working with -EUROMOD Selecting components and values.)

                    +EUROMOD - Selecting components and values.)

                    To paste the copied function(s) right-click the name of the function before or after which you want to insert the copy. From the context menu select the menu item Paste Function(s) Before to place the -copied function(s) before the right clicked function or Paste Function(s) After to paste the copied function(s) after the -right clicked function.

                    +copied function(s) before the right-clicked function or Paste Function(s) After to paste the copied function(s) after the +right-clicked function.

                    Also the policy context menu (opened by a right-click on the name of a policy) provides the menu item Paste diff --git a/EM_Help/HelpFiles/EM_WW_CopyingParameterValues.htm b/EuromodHelp/HelpFiles/EM_WW_CopyingParameterValues.htm similarity index 92% rename from EM_Help/HelpFiles/EM_WW_CopyingParameterValues.htm rename to EuromodHelp/HelpFiles/EM_WW_CopyingParameterValues.htm index 733a6e0..5f44cba 100644 --- a/EM_Help/HelpFiles/EM_WW_CopyingParameterValues.htm +++ b/EuromodHelp/HelpFiles/EM_WW_CopyingParameterValues.htm @@ -15,8 +15,8 @@

                    Copying parameter values (and comments)

                    parameters to other parameters. They are summarised below. Please note that these options refer to the content of the parameter tree, i.e. they do not generate new rows. You may want to check for options to copy whole sets of parameters in -Working with EUROMOD Copying policies -and Working with EUROMOD Copying +Working with EUROMOD - Copying policies +and Working with EUROMOD - Copying functions.

                    Copying from and to @@ -28,7 +28,7 @@

                    Copying from and to

                    Please note that the mechanism works without restrictions with the system columns (displaying parameter values and policy or function -switches[1]) +switches [1]) and the Comment column (displaying comments to policies, functions or parameters). However there are certain restrictions concerning the Policy and Grp/No column. While all cells of these @@ -44,9 +44,9 @@

                    Copying from and to
                  • Selecting the copy region: Select the region you want to copy by selecting the first cell of the region, and then pressing and holding the Shift key -while selecting the last cell of the range. Light blue back colour shows the selection. +while selecting the last cell of the range. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working with EUROMOD Selecting components and +href="EM_WW_Selecting.htm">Working with EUROMOD - Selecting components and values. If no region is selected, the copy operation refers to the focused cell.
                  • Copying: Press Ctrl-C or Ctrl-Insert to copy the selected region. Alternatively use the right mouse button to click @@ -82,7 +82,7 @@

                    Spreading parameters over systems

                    mechanism: Select the parameters you want to spread as described in Working with EUROMOD - Selecting components and values. For spreading a single parameter value just focus the respective -cell.[2] Pressing +cell [2]. Pressing Alt-S spreads the selected parameter values to all other systems.

                    @@ -119,8 +119,8 @@

                    Setting whole functions / policies to n/a

                    [1] -Note that if the values pasted to policy or function switches are no switch -values (i.e. on, off, toggle, n/a) the user interface displays an empty cell, +Note that if the values pasted to policy or function switches are not switch +values (i.e. on, off, n/a) the user interface displays an empty cell, however the pasted values are actually stored in the XML parameter file, thus the executable will issue a respective error message (e.g. reporting that 'grumlmumpf' is not a valid switch). The same is true for any cell displaying a diff --git a/EM_Help/HelpFiles/EM_WW_CopyingPolicies.htm b/EuromodHelp/HelpFiles/EM_WW_CopyingPolicies.htm similarity index 90% rename from EM_Help/HelpFiles/EM_WW_CopyingPolicies.htm rename to EuromodHelp/HelpFiles/EM_WW_CopyingPolicies.htm index cc1558d..e791644 100644 --- a/EM_Help/HelpFiles/EM_WW_CopyingPolicies.htm +++ b/EuromodHelp/HelpFiles/EM_WW_CopyingPolicies.htm @@ -13,11 +13,11 @@

                    Copying policies

                    Copying policies within a country

                    -

                    To copy a policy right click its name for opening the policy +

                    To copy a policy right-click its name for opening the policy context menu and selecting the menu item Copy Policy.

                    -

                    To paste the copied policy right click the name of the +

                    To paste the copied policy right-click the name of the policy before or after which you want to insert the copy. From the policy context menu select the menu item Paste Policy Before to place the copied policy before the right clicked policy or Paste Policy After to paste the copied policy after the right @@ -38,14 +38,14 @@

                    Copying policies from one different to the approach described above, however after defining the name, a dialog appears which allows the assignment of systems. To understand this, consider a policy that is copied from a country -with three systems to a country with just one system: which systems parameter +with three systems to a country with just one system: which system's parameter values should be copied?

                    The dialog contains a table, which lists the system assignments, where assignment means that the parameters of the destination system are to be filled with the values of the source system. The left part of each row shows a system of the destination country and the right part indicates -the assigned system of the source country. If the destination countrys system +the assigned system of the source country. If the destination country's system is not assigned to any system of the source country, the right part of the table shows "Not Assigned". To choose another system of the source country, just click the respective cell, which opens a dialog that allows @@ -56,8 +56,7 @@

                    Copying policies from one Assignment removes all assignments between destination and source systems, thus the table shows "Not Assigned" for all destination systems. Note that, when it is first opened, the dialog shows a default assignment, which -tries to match systems of the same policy year, e.g. UK_2010 with BE_2010, -UK_2012 with BE_2012, etc.

                    +tries to match systems of the same policy year, e.g. SK_2021 with AT_2021, SK_2022 with AT_2022, etc.

                    Clicking OK adds the policy as specified. If a system is not assigned, parameter values are set @@ -65,8 +64,8 @@

                    Copying policies from one

                    Copying policies as a reference

                    -

                    The policy context menu also offers the menu items Paste Reference Before respectively Paste Reference After. The case is as -follows: it may be necessary, that a policy +

                    The policy context menu also offers the menu items Paste Reference Before and Paste Reference After. The case is as +follows: it may be necessary that a policy is calculated twice in the model run. For example, social insurance contributions may need to be calculated before income tax, as they are needed as an input, however income tax may as well be needed as an input for social @@ -88,7 +87,7 @@

                    Copying policies as a reference

                    Technically inserting a reference works just like copying a policy, with the difference that the menu items Paste Reference are selected instead of Paste Policy. For obvious reasons it is not possible to copy a -policy in one country and paste it to another country.

                    +policy in one country and paste a reference to it to another country.

                     

                    diff --git a/EM_Help/HelpFiles/EM_WW_CountriesNames.htm b/EuromodHelp/HelpFiles/EM_WW_CountriesNames.htm similarity index 96% rename from EM_Help/HelpFiles/EM_WW_CountriesNames.htm rename to EuromodHelp/HelpFiles/EM_WW_CountriesNames.htm index 4ed7d3f..a94d79f 100644 --- a/EM_Help/HelpFiles/EM_WW_CountriesNames.htm +++ b/EuromodHelp/HelpFiles/EM_WW_CountriesNames.htm @@ -13,8 +13,7 @@

                    Changing country settings

                    To view or change a country's settings select the ribbon Country Tools and click the button Country in the Configuration group.

                    -

                    The dialog allows for changing the Long Name of the country (e.g. Austria, Greece, -).

                    +

                    The dialog allows for changing the Long Name of the country (e.g. Austria, Greece, ...).

                    Moreover it is possible to set the country "private". For further information concerning private components see Defining Uprating Factors

                  • The user interface provides support for defining uprating factors for monetary variables based on an index table. An example illustrates -best what this means. Lets assume we have the following index table:

                    +best what this means. Let's assume we have the following index table:

                  (info created 27/11/2013 15:33:06)
                  function order:
                      1. BenCalc
                      3. ArithOp
                      2. Elig
                      3. ArithOp
                      4. BenCalc
                      5. BenCalc
                      6. Allocate
                  @@ -50,8 +50,7 @@

                  Defining Uprating Factors

                  More concretely, assume the country comes with two datasets, cc_2012_a1 and cc_2013_a1, and three systems, cc_2012, -cc_2013 and cc_2014. The user interface will define the following uprating -factors:

                  +cc_2013 and cc_2014. Assuming that the years of the data correspond to income years, the user interface will define the following uprating factors:

                  For system cc_2012:
                  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  PolicyGrp/Nocc_2012cc_2013cc_2014
                  DefConstononon
                  $Factor_CPI111.0431.102
                  const_dataset1cc_2012_a1cc_2012_a1cc_2012_a1
                  $Factor_WAGE211.03591.0598
                  const_dataset2cc_2012_a1cc_2012_a1cc_2012_a1
                  DefConstononon
                  $Factor_CPI10.958811.0566
                  const_dataset1cc_2013_a1cc_2013_a1cc_2013_a1
                  $Factor_WAGE20.965311.0231
                  const_dataset2cc_2013_a1cc_2013_a1cc_2013_a1
                  - -

                  As can be read in the description -of the function DefConst, the -parameter const_dataset effects, -that: "... constant is only defined if the respective dataset is used for -the run". In the example that means that for the system cc_2012 the constant $Factor_CPI -takes on the value 1, if run with the dataset cc_2012_a1 and 0.9588, if run with the dataset cc_2013_a1.

                  - -

                  Note that the "IntelliSense" (see Working with EUROMOD - Changing parameters, -paragraph Editing formula, condition and -variable parameters) will for the system cc_2012 show two entries for the constant $Factor_CPI (i.e. $Factor_CPI (1) and $Factor_CPI (0.9588)). As -"IntelliSense" is only typing assistance it does not matter which of -it is selected.

                  -

                   

                  - - - -
                  - -
                  - -

                  [1] The name of the policy is DefUpratingFactors_cc -and it is the very first policy in the spine.

                  - -

                  [2] The first parameter of this function -stores the Raw Indices tabel's years (in the form "201220132014"). Each further parameter contains the -information for one index, i.e. raw of the Raw -Indices table (in the form "Harmonised -CPI (index 2012=100) $Factor_CPI100104.3110.2Source: Eurostat") The information is stored in the parameters' name while the -parameters' values are all set to n/a -(to avoid unnecessary redundancies). The function is switched off and thus just -used for informing the dialog.

                  -
                  diff --git a/EM_Help/HelpFiles/EM_WW_DeletingCountries.htm b/EuromodHelp/HelpFiles/EM_WW_DeletingCountries.htm similarity index 82% rename from EM_Help/HelpFiles/EM_WW_DeletingCountries.htm rename to EuromodHelp/HelpFiles/EM_WW_DeletingCountries.htm index 2492ecb..c7073fd 100644 --- a/EM_Help/HelpFiles/EM_WW_DeletingCountries.htm +++ b/EuromodHelp/HelpFiles/EM_WW_DeletingCountries.htm @@ -22,8 +22,10 @@

                  Deleting countries

                  For information on the files, which are deleted by the process see EUROMOD Installation and Architecture.

                  -

                  Deleting add-ons

                  +
                  Adapt Global Files (HICP, Exchange Rates)
                  +

                  If the box is ticked, the deletion will affect global config files HICPCONFIG.xml and EXCHANGERATESCONFIG.xml.

                  +
                  Deleting add-ons

                  To delete one or more add-ons from EUROMOD select the ribbon Administration Tools and click the button Delete Add-On. The process is diff --git a/EM_Help/HelpFiles/EM_WW_DeletingFunctions.htm b/EuromodHelp/HelpFiles/EM_WW_DeletingFunctions.htm similarity index 73% rename from EM_Help/HelpFiles/EM_WW_DeletingFunctions.htm rename to EuromodHelp/HelpFiles/EM_WW_DeletingFunctions.htm index 3f1686c..3054aef 100644 --- a/EM_Help/HelpFiles/EM_WW_DeletingFunctions.htm +++ b/EuromodHelp/HelpFiles/EM_WW_DeletingFunctions.htm @@ -13,7 +13,7 @@

                  Deleting functions

                  Functions can be deleted by either using the context menu or via the Delete-key. In both cases -first select the function(s) you want to delete. Then press the Delete-key. Alternatively right click the +first select the function(s) you want to delete. Then press the Delete-key. Alternatively right-click the name of (one of) the function(s) for opening the context menu and selecting the menu item Delete Function(s).

                  @@ -22,21 +22,19 @@

                  Deleting functions

                  column). A range of functions is selected by selecting the first function (i.e. its name in the Policy column), then pressing and holding the Shift key -while selecting the last function. Light blue back colour shows the selection. +while selecting the last function. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working with EUROMOD Selecting components and +href="EM_WW_Selecting.htm">Working with EUROMOD - Selecting components and values.

                  Note that the selection needs to include the Policy column (i.e. the name(s) of the function(s)). If only system columns and/or the group or comment columns are -selected, the interface assumes that the respective values should be deleted see Working with EUROMOD Changing parameters +selected, the interface assumes that the respective values should be deleted - see Working with EUROMOD - Changing parameters (paragraph Deleting (ranges of) parameter -values). Moreover, if you use the context menu, you need to open it via a -function contained in the selection, otherwise not the selected functions are -deleted, but the function that belongs to the context menu. In addition note +values). Moreover, when using the context menu you need to right-click on the selection; otherwise you will be deleting the function on which you right-clicked, not the selection. In addition note that with the context menu it is only possible to delete functions belonging to -one policy use the Delete-key if +one policy - use the Delete-key if you want to delete a wider range of components.

                  A security question is issued before the functions are diff --git a/EM_Help/HelpFiles/EM_WW_DeletingParameters.htm b/EuromodHelp/HelpFiles/EM_WW_DeletingParameters.htm similarity index 71% rename from EM_Help/HelpFiles/EM_WW_DeletingParameters.htm rename to EuromodHelp/HelpFiles/EM_WW_DeletingParameters.htm index ad061ba..fee890f 100644 --- a/EM_Help/HelpFiles/EM_WW_DeletingParameters.htm +++ b/EuromodHelp/HelpFiles/EM_WW_DeletingParameters.htm @@ -22,21 +22,17 @@

                  Deleting parameters

                  column). A range of parameters is selected by selecting the first parameter (i.e. its name in the Policy column), then pressing and holding the Shift -key while selecting the last parameter. Light blue back colour shows the -selection. For a more detailed description of how to select cells see Working with EUROMOD Selecting components and +key while selecting the last parameter. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working with EUROMOD - Selecting components and values.

                  Note that the selection needs to include the Policy column (i.e. the name(s) of the parameter(s)). If only system columns and/or the group or comment columns are -selected, the interface assumes that the respective values should be deleted -see Working with EUROMOD Changing +selected, the interface assumes that the respective values should be deleted - +see Working with EUROMOD - Changing parameters (paragraph Deleting -(ranges of) parameter values). Moreover, if you use the context menu, you -need to open it via a parameter contained in the selection, otherwise not the -selected parameters are deleted, but the parameter that belongs to the context -menu. In addition note that with the context menu it is only possible to delete -parameters belonging to one function use the Delete-key if you want to delete a wider range of components.

                  +(ranges of) parameter values). Moreover, when using the context menu you need to right click on the selection; otherwise you will be deleting the parameter on which you right clicked, not the selection. In addition note that with the context menu it is only possible to delete +parameters belonging to one function - use the Delete-key if you want to delete a wider range of components.

                  A security question is issued before the parameters are finally removed. Note that you can opt to not show the security query anymore - diff --git a/EM_Help/HelpFiles/EM_WW_DeletingPolicies.htm b/EuromodHelp/HelpFiles/EM_WW_DeletingPolicies.htm similarity index 74% rename from EM_Help/HelpFiles/EM_WW_DeletingPolicies.htm rename to EuromodHelp/HelpFiles/EM_WW_DeletingPolicies.htm index 492ecd0..9e9e3ac 100644 --- a/EM_Help/HelpFiles/EM_WW_DeletingPolicies.htm +++ b/EuromodHelp/HelpFiles/EM_WW_DeletingPolicies.htm @@ -22,19 +22,17 @@

                  Deleting policies

                  column). A range of policies is selected by selecting the first policy (i.e. its name in the Policy column), then pressing and holding the Shift key -while selecting the last policy. Light blue back colour shows the selection. +while selecting the last policy. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working with EUROMOD Selecting components and +href="EM_WW_Selecting.htm">Working with EUROMOD - Selecting components and values.

                  Note that the selection needs to include the policy column (i.e. the name(s) of the policy/ies). If only system columns and/or the group -or comment columns are selected, the interface assumes that the respective values should be deleted see Working with EUROMOD Changing parameters +or comment columns are selected, the interface assumes that the respective values should be deleted - see Working with EUROMOD - Changing parameters (paragraph Deleting (ranges of) parameter -values). Moreover, if you use the context menu, you need to open it via a -policy contained in the selection, otherwise not the selected policies are -deleted, but the policy that belongs to the context menu.

                  +values). Moreover, when using the context menu you need to right click on the selection; otherwise you will be deleting the policy on which you right clicked, not the selection.

                  A security question is issued before the policies are finally removed, which hints especially to the attempt of deleting compulsory diff --git a/EM_Help/HelpFiles/EM_WW_DeletingSystems.htm b/EuromodHelp/HelpFiles/EM_WW_DeletingSystems.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_DeletingSystems.htm rename to EuromodHelp/HelpFiles/EM_WW_DeletingSystems.htm diff --git a/EM_Help/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm b/EuromodHelp/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm similarity index 96% rename from EM_Help/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm rename to EuromodHelp/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm index 5f585ee..0c0ffb0 100644 --- a/EM_Help/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm +++ b/EuromodHelp/HelpFiles/EM_WW_DisplayingFunctionSpecifiers.htm @@ -36,7 +36,7 @@

                  Displaying function specifiers

                  changed its name while key parameters were displayed).

                  Note that this change of display affects all open countries, -e.g. if key parameters are displayed for UK while Hungary is open too, key +e.g. if key parameters are displayed for Romania while Hungary is open too, key parameters are displayed for Hungary as well.

                   

                  diff --git a/EuromodHelp/HelpFiles/EM_WW_EUROMODStatistics.htm b/EuromodHelp/HelpFiles/EM_WW_EUROMODStatistics.htm new file mode 100644 index 0000000..0977c8b --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_EUROMODStatistics.htm @@ -0,0 +1,46 @@ + + + + + + +EUROMOD Statistics + + + + +

                  EUROMOD Statistics

                  + +

                  EUROMOD has two tools to obtain summary statistics from ouput microdata: Statistics Presenter and In-depth Analysis.

                  +

                  Statistics Presenter provides descriptive statistics of income and population. It generates a set of predefined tables for budgetary and distributional impact.

                  +

                  In-depth Analysis generates customised tables for budgetary and distributional impact of reforms. It is the advanced tool for analysis in EUROMOD.

                  +

                  Results of both tools are shown on screen and are also exportable to Excel.

                  + + +

                  In-depth Analysis

                  + +
                  What is the In-depth Analysis tool?
                  +

                  The in-depth analysis tool allows producing customised tables for budgetary and distributional impact of reforms in three categories: Fiscal, Distributional, and Inequality & poverty.

                  +
                    +
                  • Fiscal category includes 4 tables containing the full disaggregation of taxes and benefits: totals and taxpayers/beneficiaries for each reform.
                  • +
                  • Distributional category includes 8 tables with totals, means, taxpayers/beneficiaries and winners/losers, by selected breakdown variable(s) and target population.
                  • +
                  • Inequality and poverty category includes 6 tables with several indicators of inequality, progressivity, redistribution and AROP rates and gaps.
                  • +
                  • Results are shown on screen and are also exportable to MS Excel. The tool allows full customization of output in terms of variables, level of analysis, target population and breakdown variables.
                  • +
                  + +
                  Where can I find this?
                  +

                  You can find the in-depth analysis tool under the "Applications" toolbar ribbon.

                  +

                  More information can be found directly in the "Help" of the tool.

                  +

                   

                  + +

                  Statistics Presenter

                  + +
                  What is the Statistics Presenter?
                  +

                  The Statistics Presenter is an analysis tool that produces a fixed set of statistics based on EUROMOD output files. In particular, it offers aggregates for market incomes, taxes and benefits; distribution of income and demographic characteristics by deciles of equivalised disposable income; and inequality and at-risk-of-poverty indicators. It also provides aggregates and number of recipients/payers by decile for a variable specified by the user. The output tables are shown on screen, giving the user the possibility to save them in Excel format.

                  + +
                  Where can I find this?
                  +

                  You can find the Statistics Presenter under the "Applications" toolbar ribbon.

                  +

                   

                  + + + diff --git a/EM_Help/HelpFiles/EM_WW_ExpandCollapse.htm b/EuromodHelp/HelpFiles/EM_WW_ExpandCollapse.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ExpandCollapse.htm rename to EuromodHelp/HelpFiles/EM_WW_ExpandCollapse.htm diff --git a/EM_Help/HelpFiles/EM_WW_Extensions.htm b/EuromodHelp/HelpFiles/EM_WW_Extensions.htm similarity index 99% rename from EM_Help/HelpFiles/EM_WW_Extensions.htm rename to EuromodHelp/HelpFiles/EM_WW_Extensions.htm index 80e1385..e45ac0c 100644 --- a/EM_Help/HelpFiles/EM_WW_Extensions.htm +++ b/EuromodHelp/HelpFiles/EM_WW_Extensions.htm @@ -29,7 +29,7 @@

                  a. Creating the extension

                  There are two buttons for creating each kind: the button Admin Country in the ribbon Country Tools for country specific extensions and the button Admin Global in the ribbon Administration Tools for global extensions. Both open a dialog, which provides options for adding, deleting and changing extensions. Once the respective changes are accomplished and the dialog is closed with OK, -the information is stored in the country parameter files for country specific extensions, and in the global extensions file for global extensions[1].

                  +the information is stored in the country parameter files for country specific extensions, and in the global extensions file for global extensions [1].

                  The information required for an extension has three components:

                  • a short name (e.g. TCA)
                  • diff --git a/EuromodHelp/HelpFiles/EM_WW_FindingErrors.htm b/EuromodHelp/HelpFiles/EM_WW_FindingErrors.htm new file mode 100644 index 0000000..2d5d107 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_FindingErrors.htm @@ -0,0 +1,67 @@ + + + + + + +Finding an error + + + + +

                    Finding an error

                    + +

                    An error message of the EUROMOD executable has the following format:

                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    Error:Variable or incomelist 'borer' not defined.
                    System:at_2011
                    Policy:tin_at; row 7
                    Function:arithop; row 7.3
                    Parameter:formula; row 7.3.2
                    Value:borer
                    Identifier:b10e103f-0652-4a77-b2ec-d021636b98f4
                    + +

                    The error can be found in the user interface by either looking for the indicated row numbers or by searching the parameter or function by its identifier. The Search by Identifier +dialog serves the latter approach. To open the dialog, select the ribbon Country Tools and press the button Search by ID in the Search group. Copy the Identifier (b10e103f-0652-4a77-b2ec-d021636b98f4 in the example) from the error message to the field Identifier and press Find to jump to the component.

                    + +

                    Note that the dialog does not support finding an error produced by running a system with an add-on (see Working with EUROMOD - Running EUROMOD paragraph Running add-on systems). In the case of add-on-systems the row numbers indicated by the error message refer to the order in which components are actually processed. This order is generated at run-time and therefore not visible "from outside". Similar is true for the identifier, as it is internally generated by the user interface and not +visible from outside either.

                    + +
                    Some comments on EUROMOD's error reporting
                    + +

                    EUROMOD distinguishes two phases of error handling and two (actually three) types of errors. Phase one of error handling comprises reading and checking parameters and reading data - let's refer to it as read-time - while phase two concerns computing the necessary calculations and outputting results - let's refer to it as run-time. The two types of errors are critical and non-critical errors (the latter also referred to as warnings).

                    + +

                    During read-time the model gathers all errors, independent of type, without stopping. Once the phase is finalised it always stops if there are critical errors, to issue respective error messages. If there are only non-critical errors it only stops if the box Do not stop on non-critical errors in the Advanced Options of the Run EUROMOD dialog is unticked (see Working with EUROMOD - Running EUROMOD paragraph Advanced settings), otherwise it continues. During run-time EUROMOD always stops immediately once a critical error occurs. Whether it stops on non-critical errors again depends on ticking Do not stop on non-critical errors: if not ticked it stops immediately, if ticked it continues and issues the gathered error messages after finishing the phase or once a critical error occurs. Finally, a third type of error exists - this concerns "very critical" errors, which necessitate an immediate stop, independent of the phase.

                    + +

                    Concluding, it may be informative to learn, which errors are classified as critical or non-critical by the model. Intuitively speaking one could say that EUROMOD is very strict during read-time and classifies most errors as critical. In contrast the model is rather lenient during run-time and considers errors as non-critical, as long as it finds a way to continue its calculations (warnings inform about the respective handling in their error message). The motivation for this is found in the fact that phase two takes much longer than phase one, i.e. the model tries to immediately inform the users after the short read-time that something went wrong, while they may confidently go for a coffee during run-time and will get a summary of errors once they are back. In reality running one system of a country (with a not too big dataset) usually takes a few minutes, which is unfortunately too short for the coffee. However, one could imagine a reform that comprises a lot of countries, systems or loops. In that case the user may first get the parameters right and have time for her coffee, while running this big reform.

                    + +

                     

                    + + + + + + diff --git a/EM_Help/HelpFiles/EM_WW_Formatting.htm b/EuromodHelp/HelpFiles/EM_WW_Formatting.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_Formatting.htm rename to EuromodHelp/HelpFiles/EM_WW_Formatting.htm diff --git a/EM_Help/HelpFiles/EM_WW_FunctionOrder.htm b/EuromodHelp/HelpFiles/EM_WW_FunctionOrder.htm similarity index 88% rename from EM_Help/HelpFiles/EM_WW_FunctionOrder.htm rename to EuromodHelp/HelpFiles/EM_WW_FunctionOrder.htm index 6131533..277c510 100644 --- a/EM_Help/HelpFiles/EM_WW_FunctionOrder.htm +++ b/EuromodHelp/HelpFiles/EM_WW_FunctionOrder.htm @@ -14,15 +14,14 @@

                    Changing the order of functions

                    There are three ways to change the order of functions: by -using (a) drag and drop, (b) key Up / -key Down or (c) the function context +using (a) drag and drop, (b) Control + Up/Down keys or (c) the function context menu. For each of them first select the respective functions. A single function is selected by simply clicking it (more precisely, its name in the Policy column). A range of functions is selected by selecting the first function (i.e. its name in the Policy column), then pressing and holding the Shift key while selecting -the last function. Light blue back colour shows the selection. For a more +the last function. A darker blue colour shows the selection. For a more detailed description of how to select cells see Working -with EUROMOD Selecting components and values.

                    +with EUROMOD - Selecting components and values.

                    For (a) click the respective functions with the left mouse button, drag them with pressed mouse button to the new position and drop them @@ -34,7 +33,7 @@

                    Changing the order of as well as the Down key to move them down.

                    -

                    For (c) right click the name of (one of the) functions for +

                    For (c) right-click the name of (one of the) functions for opening the context menu and selecting the menu item Move Functions Up respectively Move Functions Down.

                    diff --git a/EM_Help/HelpFiles/EM_WW_Groups.htm b/EuromodHelp/HelpFiles/EM_WW_Groups.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_Groups.htm rename to EuromodHelp/HelpFiles/EM_WW_Groups.htm diff --git a/EM_Help/HelpFiles/EM_WW_HeaderPage.htm b/EuromodHelp/HelpFiles/EM_WW_HeaderPage.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_HeaderPage.htm rename to EuromodHelp/HelpFiles/EM_WW_HeaderPage.htm diff --git a/EM_Help/HelpFiles/EM_WW_HidingRows.htm b/EuromodHelp/HelpFiles/EM_WW_HidingRows.htm similarity index 94% rename from EM_Help/HelpFiles/EM_WW_HidingRows.htm rename to EuromodHelp/HelpFiles/EM_WW_HidingRows.htm index 469ce24..366651e 100644 --- a/EM_Help/HelpFiles/EM_WW_HidingRows.htm +++ b/EuromodHelp/HelpFiles/EM_WW_HidingRows.htm @@ -25,14 +25,14 @@

                    Hiding a single policy, function or parameter

                    spine; row number 4.2.6 for hiding the 6th parameter of the second function of the fourth policy in the spine, etc. Alternatively select the row of the policy, function or parameter and -press Alt-H.

                    +press Alt-Shift-H.

                    Hiding multiple selected policies, functions or parameters

                    First select a range of cells, then right click on any row number and select the menu item Hide Selected Rows from the row context menu. This will hide all the policy, function and parameter lines -that are currently selected. Note that if there is no current selection, then this +that are currently selected. Note that if there is no current selection, then this menu item will appear disabled.

                    Hiding all but a single policy, function or parameter

                    @@ -66,26 +66,26 @@

                    Hiding a range of policies, functions or parameters

                    Hiding policies or functions that are "n/a" in all currently visible systems

                    Right click on any row number and select the menu item Hide all "n/a" Policy/Function rows. -This will go through the whole spine and hide all policies and functions which are -set to "n/a" in all of the currently visible systems. Note that this only works for -policies and functions; it will not affect parameters even if they are set to "n/a" +This will go through the whole spine and hide all policies and functions which are +set to "n/a" in all of the currently visible systems. Note that this only works for +policies and functions; it will not affect parameters even if they are set to "n/a" for all visible systems.

                    Hiding selected policies or functions that are "n/a" in all currently visible systems

                    First select a range of cells, then right click on any row number and select the menu item Hide selected "n/a" Policy/Function rows. -This will go through the selected policies and functions and hide those which are -set to "n/a" in all of the currently visible systems. For example you may want to quickly -hide "n/a" functions within a given policy. In this case you would click on that -policy and then right click on its row number and select the Hide selected "n/a" -Policy/Function rows item. Note that this only works for policies and functions; +This will go through the selected policies and functions and hide those which are +set to "n/a" in all of the currently visible systems. For example you may want to quickly +hide "n/a" functions within a given policy. In this case you would click on that +policy and then right click on its row number and select the Hide selected "n/a" +Policy/Function rows item. Note that this only works for policies and functions; it will not affect parameters even if they are set to "n/a" for all visible systems.

                    Unhiding policies, functions or parameters

                    Right clicking any row and selecting the menu item Unhide Rows from the row context menu opens a dialog that lists any hidden ranges of rows. Check the box of the range -you want to unhide and press the button Unhide. You can also use the "Check All" checkbox at +you want to unhide and press the button Unhide. You can also use the "Check All" checkbox at the bottom to quickly check/uncheck all the available ranges. Note that nested hiding is not taken into account. For example, if you first hide functions 3.2 to 3.6 and afterwards policies 2 to 4, the dialog only lists diff --git a/EuromodHelp/HelpFiles/EM_WW_HypotheticalHouseholdTool.htm b/EuromodHelp/HelpFiles/EM_WW_HypotheticalHouseholdTool.htm new file mode 100644 index 0000000..3b2337a --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_HypotheticalHouseholdTool.htm @@ -0,0 +1,46 @@ + + + + + + +Hypothetical Household tool + + + + +

                    Hypothetical Household tool (HHoT)

                    + +

                    What is the Hypothetical Household tool (HHoT)?

                    + +

                    The Hypothetical Household Tool (HHoT) is a EUROMOD plugin for designing hypothetical households and generating data according to the chosen household characteristics. This hypothetical household data can then be used to estimate the effects of taxes and benefits on household disposable income, by normally running EUROMOD systems.

                    + +

                    Traditionally, EUROMOD is used for analysing the distributive, labour market and budgetary impact of tax-benefit policies and policy changes. To do so, detailed and representative data on persons and households are required. With the HHoT plugin users can create their own hypothetical data, which allows them to better understand how policies work for households with specific characteristics, while giving them full control over the characteristics of interest (Gasior and Recchia 2019 [1]).

                    + +

                    HHoT generates specified hypothetical household input datasets in the standard EUROMOD input data format, which can then be used with the EUROMOD software to perform tax and benefit microsimulations. The flexibility of the tool allows users to specify a broad spectrum of different hypothetical households. The specification of household composition and other characteristics is only limited by the scope of variables in EUROMOD input data. For example, three (or more) generation households can be included, as well as a variety of labour market statuses and income sources. HHoT allows users to compose, save, use and re-use their own database of hypothetical households.

                    + +

                    More information about this plugin can be found in the "HHoT user manual", available in the EUROMOD website [2].

                    + +

                    Where can I find this?

                    + +

                    You can find Hypothetical Household Tool under the "Applications" toolbar ribbon, inside the "EUROMOD plugins" group.

                    + + +

                     

                    + +
                    + +
                    + +

                    [1] Katrin Gasior & Pasquale Recchia (2020). The Use of Hypothetical Household Data for Policy Learning: Comparative Tax-Benefit Indicators Using EUROMOD HHoT, Journal of Comparative Policy Analysis: Research and Practice, 22:2, 170-189.

                    +

                    [2] https://euromod-web.jrc.ec.europa.eu/resources/model-documentation

                    + + +
                    +

                     

                    + + + + + + diff --git a/EuromodHelp/HelpFiles/EM_WW_ImportingCountries.htm b/EuromodHelp/HelpFiles/EM_WW_ImportingCountries.htm new file mode 100644 index 0000000..b41212e --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_ImportingCountries.htm @@ -0,0 +1,53 @@ + + + + + + +Importing countries + + + + +

                    Importing countries

                    + +

                    To import a country to EUROMOD select the ribbon Administration Tools and click the button Import Country. This opens a dialog which requests three pieces of information:

                    + +
                    Import Country Folder
                    + +

                    This folder is supposed to contain the country's XML-files (see EUROMOD Installation and Architecture - EUROMOD content (parameter files) - Format of country parameter files). You can type the Import Country Folder or select it with the search dialog, opened by pressing the button alongside the field.

                    + +

                    Moreover, the folder may contain the country's flag as an image file named cc.png [1]. If the folder does not contain a flag image, a default image with a question mark will be used.

                    + +
                    Short Name
                    + +

                    If the country does not already exist, the Short Name is the name of the Import Country Folder [2]. For example, if you are importing Barbados the short name would probably be BB. If the country is another version of an existing country, the Short Name indicates an alternative short name for this second version. For example, if you are using an alternative version of Belgium you may indicate B2 as Short Name.

                    + +
                    Flag (png)
                    +

                    Select a png file to import a countrys flag. The image file will be stored under the name cc.png.[1]

                    +

                     

                    + +

                    Confirming the specifications with OK imports the country [3] and instructs you to go to the country gallery (i.e. the ribbon Countries) to load the imported country.

                    + +

                     

                    + + + +
                    + +
                    + + +

                    [1] cc stands for the country's short name (e.g. FR for France, EL for Greece, ...). The flag ought to be in portable network graphic format (png) and is ideally sized 28x17 pixels.

                    + + +

                    [2] and the country's acronym as used in the names of the country's XML- and flag-files.

                    + + +

                    [3] That means the user interface copies the folder into the countries' folder. Moreover, if the Short Name is different from the name of the Import Country Folder, it does all the renaming of files and adapting of parameter files for you.

                    + +
                    + + + + diff --git a/EM_Help/HelpFiles/EM_WW_ImportingExportingAddOns.htm b/EuromodHelp/HelpFiles/EM_WW_ImportingExportingAddOns.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ImportingExportingAddOns.htm rename to EuromodHelp/HelpFiles/EM_WW_ImportingExportingAddOns.htm diff --git a/EM_Help/HelpFiles/EM_WW_ImportingExportingSystems.htm b/EuromodHelp/HelpFiles/EM_WW_ImportingExportingSystems.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_ImportingExportingSystems.htm rename to EuromodHelp/HelpFiles/EM_WW_ImportingExportingSystems.htm diff --git a/EuromodHelp/HelpFiles/EM_WW_ImportingVariables.htm b/EuromodHelp/HelpFiles/EM_WW_ImportingVariables.htm new file mode 100644 index 0000000..78e8c79 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_ImportingVariables.htm @@ -0,0 +1,73 @@ + + + + + + +Importing variables + + + + +

                    Importing variables

                    + +

                    The following operations are performed with the variable administration tool. To open this tool press the button Variables in the ribbon Administration Tools (also see Working with EUROMOD - Administration of EUROMOD variables paragraph Administrating variables and acronyms in the EUROMOD user interface).

                    + +

                    To import variables from an external variables definition file (VarConfig.xml) select the item Import Variables from the variables administration tool's menu. This firstly allows the selection of the external variables definition file. Once the file is chosen, a dialog shows the possible changes, i.e. differences between the user interface's internal variables definition file and the external one. This means, the dialog lists the variables and acronyms either existing only in the internal respectively external variables definition file or have different attributes in the two files.

                    + +

                    Note that importing variables is only possible if no changes were accomplished in the current session of the variables administration tool, otherwise the menu item is disabled. In this case close and open the tool again, saving the changes if required.

                    + +

                    Also note that, to begin with, it is assumed that the user wants to overtake all modifications from the external variables definition file. Respective changes are suggested in the Action columns. This behaviour can be changed by ticking/unticking the checkboxes in the Perform columns. This is supported by three buttons, which aim to make selecting more efficient.

                    +
                      +
                    • Clicking the button Tick selected variables ticks the checkboxes of all selected rows in the variables list. Selected rows are characterised by blue background colour. Selecting a single row is accomplished by clicking it. Selecting multiple rows is accomplished by holding the Strg key and clicking the respective rows. Selecting a range of rows is accomplished by clicking the first row pressing and holding the Shift key and selecting the last row.
                    • + +
                    • Clicking the button Untick selected variables unticks the checkboxes of all selected rows. See above for recognising and choosing selected rows.
                    • + +
                    • Clicking the button Add only unticks the checkboxes of all variables and acronyms for which the Action column is set to delete.
                    • +
                    + +

                    List of possible changes in variables

                    + +

                    The left part of the dialog shows which variables are different in the external and the internal variables definition file. There are following types of differences:

                    +
                      +
                    • A variable exists in the external variables definition file only: The column Action suggests adding this variable.
                    • + +
                    • A variable exists in the internal variables definition file only: The column Action suggests deleting this variable.
                    • + +
                    • The monetary status of a variable is different: The column Action suggests changing the monetary status and the column Info informs about the direction of the change, i.e. to overtake the status defined in the external variables definition file.
                    • + +
                    • One or more of the country specific descriptions of a variable are different: The column Action suggests changing the variable and the column Info tells that the difference is in different descriptions. The concrete differences are displayed in the Descriptions list below the Variables list.
                      Note that, one can either overtake all descriptions of this variable from the external file (checkbox Perform ticked), or keep all descriptions of the internal file (checkbox Perform not ticked), partly overtaking is not foreseen.
                      Also note, that it is possible (though not recommended) to import a variable definitions file that refers to a different set of countries (e.g. a country was added in the external version, which is not yet implemented in the internal version). In this case the importing tool issues a warning, telling that it cannot overtake country specific descriptions.
                    • +
                    +

                    List of possible changes in acronyms

                    +

                    The right part of the dialog shows which acronyms are different in the external and the internal variables definition file. There are following types of differences:

                    +
                      +
                    • A whole type of acronyms exists in the external variables definition file only: The column Action suggests adding this type (including all levels and acronyms contained).
                    • + +
                    • A whole type of acronyms exists in the internal variables definition file only: The column Action suggests deleting this type (including all levels and acronyms contained).
                    • + +
                    • The description of an acronym type is different (e.g. IN KIND changed to BENEFIT IN KIND): The column Action suggests changing the description and the column Info tells the new description. Note that a change of the shortcut of an acronym type (e.g. K for IN KIND) is treated as deleting the whole type and adding a new type with the new shortcut, as in fact all variable names using the acronyms of this type get invalid.
                    • + +
                    • A whole level of acronyms exists in the external variables definition file only: The column Action suggests adding this level (including all acronyms contained). The tool tries to add the level at the same position as in the external file, by searching for a common predecessor level.
                    • + +
                    • A whole level of acronyms exists in the internal variables definition file only: The column Action suggests deleting this level (including all acronyms contained).
                    • + +
                    • An acronym exists in the external variables definition file only: The column Action suggests adding this acronym.
                    • + +
                    • An acronym exists in the internal variables definition file only: The column Action suggests deleting this acronym.
                    • + +
                    • The description of an acronym is different: The column Action suggests changing the description and the column Info tells the new description. Note that, similar to types, a change of the acronym itself is treated as deleting the acronym and adding a new acronym, as in fact all variable names using the acronym get invalid.
                    • + +
                    • One or more of the categories of an acronym are different: The column Action suggests changing the acronym and the column Info tells that the difference is in different categories. The concrete differences are displayed in the Categories list below the Acronyms list.
                      Note that, one can either overtake all categories of this acronym from the external file (checkbox Perform ticked), or keep all categories of the internal file (checkbox Perform not ticked), partly overtaking is not foreseen.
                    • +
                    +

                    Performing the import

                    +

                    To accomplish the import, tick the checkboxes in the Perform columns as required, and press the button Import. For variables you can tick or untick several Perform boxes at once by first selecting the respective rows and then clicking the buttons Tick selected variables respectively Untick selected variables.

                    + +

                    Note that it is not possible to undo the import via the undo-functionality. However, there is no automatic saving of the variables definitions file. That means closing the variables administration tool without saving can still restore the old state.

                    + +

                     

                    + + + + + + diff --git a/EM_Help/HelpFiles/EM_WW_KeyboardShortcuts.htm b/EuromodHelp/HelpFiles/EM_WW_KeyboardShortcuts.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_KeyboardShortcuts.htm rename to EuromodHelp/HelpFiles/EM_WW_KeyboardShortcuts.htm diff --git a/EuromodHelp/HelpFiles/EM_WW_Macrovalidation.htm b/EuromodHelp/HelpFiles/EM_WW_Macrovalidation.htm new file mode 100644 index 0000000..5eb8900 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_Macrovalidation.htm @@ -0,0 +1,37 @@ + + + + + + +Macrovalidation + + + + +

                    Macrovalidation

                    + +

                    What is the Macrovalidation tool?

                    +

                    The tool computes aggregates and distributional indicators based on the EUROMOD output files the user selects, and compares them with external benchmarks. This can be done for both baselines and reform systems. Aggregated amounts are compared in terms of both number of people receiving a given income component and total yearly amounts. Market incomes, non-simulated taxes and benefits in the input dataset as well as simulated taxes and benefits are validated against external official data. External benchmark statistics are introduced in the External Statistics tables.

                    +

                    Like in the Statistics Presenter and the In-depth Plugin, the results will be shown on screen but can be exported to Excel as well. The tool is used to produce Validation Tables of EUROMOD Country Reports.

                    + +

                    Where can I find this?

                    +

                    You can find Macrovalidation tool under the "Applications" toolbar ribbon.

                    + +

                    How to run the Macrovalidation tool?

                    +

                    Select the output files you want to analyse. Note that you can select as many output files as you want, and they can be from baseline or reform systems, but they can only be from a single country at a time. As soon as you confirm your selection, the tool will compute all the aggregates and distributional indicators and compare them with SILC values and values introduced in the External Statistics tables.

                    + + +

                    How to define External Statistics for the Macrovalidation tool?

                    +

                    If you click on the External Statistics under the "Country Tools" toolbar ribbon, a dialog will open. It contains the following tables:

                    +
                      +
                    • Aggregates - Amounts. It shows all the components of all the income lists that are used to calculate disposable income (these variables are repeated in the next two tables). External statistics on revenue/expenditure have to be introduced for each concept, in millions of national currency. It also has a column for comments and another one to indicate the source of the information (these two columns are automatically copied in the next two tables).
                    • +
                    • Aggregates - Number of ben/taxpayers. External statistics on number of beneficiaries/taxpayers, which have to be introduced in thousands.
                    • +
                    • Aggregates - Level. For each concept the level of assessment of the statistics (individuals or households) should be indicated (individual is the default value).
                    • +
                    • Distributional - Inequality. External statistics on income inequality (figures from ESTAT used as default).
                    • +
                    • Distributional - Poverty. External statistics on poverty (figures from ESTAT used as default).
                    • +
                    + + + + diff --git a/EM_Help/HelpFiles/EM_WW_MatrixViewIncomelists.htm b/EuromodHelp/HelpFiles/EM_WW_MatrixViewIncomelists.htm similarity index 90% rename from EM_Help/HelpFiles/EM_WW_MatrixViewIncomelists.htm rename to EuromodHelp/HelpFiles/EM_WW_MatrixViewIncomelists.htm index 70f7464..6f8d4ff 100644 --- a/EM_Help/HelpFiles/EM_WW_MatrixViewIncomelists.htm +++ b/EuromodHelp/HelpFiles/EM_WW_MatrixViewIncomelists.htm @@ -25,7 +25,7 @@

                    Matrix view of incomelists

                    Note that the window showing the matrix view of incomelists is non-modal, that means the window can stay open while editing. Use respective -resizing, the minimise, maximise and close button to position the window where it is convenient.

                    +resizing, minimise, maximise and close button to position the window where it is convenient.

                     

                    diff --git a/EM_Help/HelpFiles/EM_WW_NewProject.htm b/EuromodHelp/HelpFiles/EM_WW_NewProject.htm similarity index 84% rename from EM_Help/HelpFiles/EM_WW_NewProject.htm rename to EuromodHelp/HelpFiles/EM_WW_NewProject.htm index 2a7c3da..6f81acf 100644 --- a/EM_Help/HelpFiles/EM_WW_NewProject.htm +++ b/EuromodHelp/HelpFiles/EM_WW_NewProject.htm @@ -12,8 +12,8 @@

                    Generate a new EUROMOD project

                    The item New Project -of the main menu[1] (which can also be found in the Version Control ribbon in the PROJECT group) +of the main menu [1] (which can also be found in the Version Control ribbon in the ADVANCED OPTIONS group) opens a dialog which allows for generating a new EUROMOD project. For a description of what a EUROMOD project is see Working with EUROMOD - Administration of EUROMOD projects.

                    @@ -22,11 +22,11 @@

                    Generate a new EUROMOD project

                    generating a EUROMOD project:

                    Project Path and Project Name

                    -

                    The Project Path is the path where the new project is to be stored. The user interface will -generate a folder using the name you provided in the Project Name field, containing the EUROMOD -file structure at the indicated path. Note that the folder named in Project Path must already -exist and that it must not contain a folder Project Name already. For more information on the -EUROMOD file structure see EUROMOD Installation and Architecture - +

                    The Project Path is the path where the new project is to be stored. The user interface will +generate a folder using the name you provided in the Project Name field, containing the EUROMOD +file structure at the indicated path. Note that the folder named in Project Path must already +exist and that it must not contain a folder Project Name already. For more information on the +EUROMOD file structure see EUROMOD Installation and Architecture - EUROMOD content (parameter files).

                    Base Project

                    @@ -37,7 +37,7 @@

                    Base Project

                    • Project on Disk: With this option selected, the dialog allows for selecting (or typing) -the name of the folder, where the base project is stored[2]. Note that this will be the default choice if you are not logged into Version Control.
                    • +the name of the folder, where the base project is stored [2]. Note that this will be the default choice if you are not logged into Version Control.
                    • Project on VC: With this option selected, the dialog allows for selecting a base @@ -47,7 +47,7 @@

                      Base Project

                      the EUROMOD version control system (in which case, it is actually the pre-selected option). Consequently, if this is not (yet) the case, clicking the option Project on VC opens the version control login dialog, asking for a user name and password -(see EUROMOD Version Control - Logging in and out). +(see EUROMOD Version Control - Logging in and out). Also note that, when first ticking the option, it may take a short while, as the available projects must be requested form the VC-system. For further information on the EUROMOD VC-system see EUROMOD @@ -77,7 +77,7 @@

                      Content of the new project

                      [1] You find the main menu above the Run -EUROMOD button. Press the little arrow to open it.

                      +EUROMOD button that can be seen when clicking on the Countries ribbon. Press the little arrow to open it.

                      [2] diff --git a/EM_Help/HelpFiles/EM_WW_NodesColour.htm b/EuromodHelp/HelpFiles/EM_WW_NodesColour.htm similarity index 77% rename from EM_Help/HelpFiles/EM_WW_NodesColour.htm rename to EuromodHelp/HelpFiles/EM_WW_NodesColour.htm index d553ad1..2d9a212 100644 --- a/EM_Help/HelpFiles/EM_WW_NodesColour.htm +++ b/EuromodHelp/HelpFiles/EM_WW_NodesColour.htm @@ -17,17 +17,15 @@

                      Marking nodes with colour

                      pressing and holding the Shift key while selecting the last row. Light blue back colour shows the selection. For a more detailed description of how to select cells see Working with EUROMOD Selecting components and -values. Then select the ribbon Display +href="EM_WW_Selecting.htm">Working with EUROMOD - Selecting components and +values. Then select the ribbon Display and choose the desired colour in the Marking group. To clear the colour of a group of policies, functions and/or parameters, select the respective rows, to then click the button Clear in the Marking group. To clear any colour, click the button Clear All in the Marking group.

                      -

                      Note that, to avoid conflicting formats, the colour is only -applied to the Policy, Grp/No and Comment columns, but not to the system columns (see Working with EUROMOD - Conditional -formatting).

                      +

                      Note that the colour is applied to the Policy, Grp/No, Comment and system columns (see Working with EUROMOD - Conditional formatting).

                       

                      diff --git a/EuromodHelp/HelpFiles/EM_WW_OpenOutputFile.htm b/EuromodHelp/HelpFiles/EM_WW_OpenOutputFile.htm new file mode 100644 index 0000000..d3a9d1d --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_OpenOutputFile.htm @@ -0,0 +1,28 @@ + + + + + + +Open Output File + + + + +

                      Open Output File

                      + +

                      What is the Open Output File tool?

                      + +

                      Open Output File is an application that opens a EUROMOD output file with MS Excel.

                      + +

                      Where can I find this?

                      + +

                      You can find Open Output File under the "Applications" toolbar ribbon.

                      + +

                      How does it work?

                      + +

                      You only have to select the output file you would like to open and it will be automatically loaded in MS Excel, outside EUROMOD.

                      + + + + diff --git a/EM_Help/HelpFiles/EM_WW_OpenProject.htm b/EuromodHelp/HelpFiles/EM_WW_OpenProject.htm similarity index 87% rename from EM_Help/HelpFiles/EM_WW_OpenProject.htm rename to EuromodHelp/HelpFiles/EM_WW_OpenProject.htm index 7f2f315..3c67641 100644 --- a/EM_Help/HelpFiles/EM_WW_OpenProject.htm +++ b/EuromodHelp/HelpFiles/EM_WW_OpenProject.htm @@ -12,7 +12,7 @@

                      Open a EUROMOD project

                      The item Open Project -of the main menu[1] opens a dialog which allows for switching the EUROMOD project to which the user interface refers to. For a description of what a EUROMOD project is see Open a EUROMOD project interface before

                    • Selecting a project that was not yet opened by -the user interface, but is stored on the user's disk[2]
                    • +the user interface, but is stored on the user's disk [2]

                    Selecting a project that was opened before

                    For this purpose, select the respective project from @@ -48,11 +48,11 @@

                    Opening the user interface for the very first time

                    There is in fact an alternative instance when a user becomes to see the open-project-dialog than via the menu-item Open Project. That is, when the EUROMOD user interface is opened for the very -first time.[3] In +first time [3]. In this case the dialog shows an additional button New ..., which allows for opening the new-project-dialog (see Working with EUROMOD - New project) and thus, -instead of opening an existing project, generating a new one. +instead of opening an existing project, generating a new one.

                    @@ -64,7 +64,7 @@

                    Opening the user interface for the very first time

                    [1] You find the main menu above the Run -EUROMOD button. Press the little arrow to open it.

                    +EUROMOD button, that can be seen when clicking on the Countries ribbon. Press the little arrow to open it.

                    [2] diff --git a/EM_Help/HelpFiles/EM_WW_ParameterPresentation.htm b/EuromodHelp/HelpFiles/EM_WW_ParameterPresentation.htm similarity index 97% rename from EM_Help/HelpFiles/EM_WW_ParameterPresentation.htm rename to EuromodHelp/HelpFiles/EM_WW_ParameterPresentation.htm index d3a767f..224584d 100644 --- a/EM_Help/HelpFiles/EM_WW_ParameterPresentation.htm +++ b/EuromodHelp/HelpFiles/EM_WW_ParameterPresentation.htm @@ -70,7 +70,7 @@

                    Group parameters

                    Footnote parameters

                    -

                    Footnote parameters are parameters, which provide further +

                    Footnote parameters are parameters that provide further information on other parameters or parts of other parameters (symbolically: they contain footnote information to something in the "text"). For example the footnote parameter #_LowLim @@ -97,7 +97,7 @@

                    Footnote parameters

                    Parameters with editable parameter name

                    -

                    Some functions comprise parameters, where the Policy column does not contain a +

                    Some functions comprise parameters where the Policy column does not contain a parameter name in the narrow sense, but information that could be seen as a parameter value, which is equal for all systems. For example, for the function DefConst the Policy column contains the name of the constant, whereas the system columns contain the value of the constant for the respective system. In diff --git a/EM_Help/HelpFiles/EM_WW_PathsAndExit.htm b/EuromodHelp/HelpFiles/EM_WW_PathsAndExit.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_PathsAndExit.htm rename to EuromodHelp/HelpFiles/EM_WW_PathsAndExit.htm diff --git a/EuromodHelp/HelpFiles/EM_WW_Plugins.htm b/EuromodHelp/HelpFiles/EM_WW_Plugins.htm new file mode 100644 index 0000000..b576048 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_Plugins.htm @@ -0,0 +1,22 @@ + + + + + + +EUROMOD PLUGINS + + + + +

                    EUROMOD PLUGINS

                    + +

                    Plug-ins are software components that extend the functionality of EUROMOD. While the core user interface concentrates on supporting the implementation, adaptation and running of countries' tax-benefit systems, plug-ins provide additional features like producing basic summary statistics, performing microvalidation, or generating hypothetical datasets. In the official release of v1.10 the only publicly available plug-in is the "Summary Statistics", but many more will be added in future releases to accommodate task-specific needs.

                    + + + + + + + + diff --git a/EM_Help/HelpFiles/EM_WW_PolicyEffects.htm b/EuromodHelp/HelpFiles/EM_WW_PolicyEffects.htm similarity index 85% rename from EM_Help/HelpFiles/EM_WW_PolicyEffects.htm rename to EuromodHelp/HelpFiles/EM_WW_PolicyEffects.htm index eaf6e41..72f2fb4 100644 --- a/EM_Help/HelpFiles/EM_WW_PolicyEffects.htm +++ b/EuromodHelp/HelpFiles/EM_WW_PolicyEffects.htm @@ -24,7 +24,7 @@

                    What is the Policy Effects

                    Where can I find this?

                    You can find the Policy Effects tool under the -"Applications" toolbar ribbon, inside the "Tools" group.

                    +"Applications" toolbar ribbon.

                    How does it work?

                    @@ -59,9 +59,9 @@

                    Results

                    of mean equivalised household disposable income in the starting year. The latter is also used to construct income decile groups. Throughout, the modified OECD equivalence scale is used. For example, a 3 -percentage point change for public pensions in the third decile group in +percent change for public pensions in the third decile group in country A, indicates that changes (increases) in -public pensions accounted for a 3 percentage point increase in average equivalised household income. In the case of taxes and SIC, +public pensions accounted for a 3 percent increase in average equivalised household income. In the case of taxes and SIC, a positive (negative) number implies that taxes/SIC have been reduced (increased). The sum of effects by income component (columns 2 to 8) equals the total (column 9).

                    @@ -75,7 +75,7 @@

                    Results

                    Methodology

                    The estimation of policy changes draws on the method -suggested by Bargain and Callan (2010, The Journal of Economic Inequality). +suggested by Bargain and Callan (2010) [1]. Consider a single household and denote its market income (and other characteristics) with y and monetary values of tax-benefit parameters as p. @@ -99,8 +99,8 @@

                    Methodology

                    src="files/policy_effects_1.png">

                    Note that this is a particular variation of decomposition -chosen for EUROMOD validation purposes. (The full decomposition framework is -described in BC2010.) Technically, instead of scaling monetary policy parameters, +chosen for EUROMOD validation purposes.; the full decomposition framework is +described in Bargain and Callan (2010) [1]. Technically, instead of scaling monetary policy parameters, the tool scales monetary input variables with the factor alpha and monetary output variables with the factor 1/alpha:

                    Methodology could be set to 1 in which case the effect of policy changes is calculated simply in nominal terms, or (ii) CPI indexation in which case the effect of policy changes is calculated in real terms. For (ii), the adjustment factor is -automatically derived on the basis of Eurostats Harmonized Index of Consumer -Prices this information needs to be defined (as $HICP) along with other series of uprating indices (in the index +automatically derived on the basis of Eurostat's Harmonized Index of Consumer +Prices - this information needs to be defined (as $HICP) along with other series of uprating indices (in the index table).

                    Note that the tool cannot @@ -131,6 +131,17 @@

                    Methodology

                    +

                     

                    + +
                    + +
                    + +

                    [1] Bargain, Olivier and Tim Callan (2010) "Analysing the Effects of Tax-Benefit Reforms on Income Distribution: a Decomposition Approach", Journal of Economic Inequality, 8, 121.

                    + +
                    +

                     

                    + diff --git a/EM_Help/HelpFiles/EM_WW_PolicyOrder.htm b/EuromodHelp/HelpFiles/EM_WW_PolicyOrder.htm similarity index 83% rename from EM_Help/HelpFiles/EM_WW_PolicyOrder.htm rename to EuromodHelp/HelpFiles/EM_WW_PolicyOrder.htm index bb4d410..2861b1b 100644 --- a/EM_Help/HelpFiles/EM_WW_PolicyOrder.htm +++ b/EuromodHelp/HelpFiles/EM_WW_PolicyOrder.htm @@ -14,15 +14,13 @@

                    Changing the order of policies

                    There are three ways to change the order of policies: by -using (a) drag and drop, (b) key Up / -key Down or (c) the policy context -menu. For each of them first select the respective polices. A single policy is +using (a) drag and drop, (b) Control + Up/Down keys or (c) the policy context +menu. For each of them first select the respective policies. A single policy is selected by simply clicking it (more precisely, its name in the Policy column). A range of policies is selected by selecting the first policy (i.e. its name in the Policy column), then pressing and holding the Shift key while selecting -the last policy. Light blue back colour -shows the selection. For a more detailed description of how to select cells see -Working with EUROMOD Selecting components and +the last policy. A darker blue colour shows the selection. For a more detailed description of how to select cells see +Working with EUROMOD - Selecting components and values.

                    For (a) click the respective policy/ies with the left mouse diff --git a/EM_Help/HelpFiles/EM_WW_PrivateComments.htm b/EuromodHelp/HelpFiles/EM_WW_PrivateComments.htm similarity index 89% rename from EM_Help/HelpFiles/EM_WW_PrivateComments.htm rename to EuromodHelp/HelpFiles/EM_WW_PrivateComments.htm index 8fe6b67..3caa42a 100644 --- a/EM_Help/HelpFiles/EM_WW_PrivateComments.htm +++ b/EuromodHelp/HelpFiles/EM_WW_PrivateComments.htm @@ -21,9 +21,8 @@

                    Recording, changing and deleting private comments

                    To record or change a private comment right-click the Comment column of the respective policy, function or parameter to open the context menu and select -the menu item Private Comment.[1] -This opens an input box for editing the comment. The private comment is deleted +the menu item Private Comment [1]. This opens an input box for editing the comment. The private comment is deleted by clearing it in the input box.

                    Display of private comments

                    diff --git a/EM_Help/HelpFiles/EM_WW_PublicVersion.htm b/EuromodHelp/HelpFiles/EM_WW_PublicVersion.htm similarity index 98% rename from EM_Help/HelpFiles/EM_WW_PublicVersion.htm rename to EuromodHelp/HelpFiles/EM_WW_PublicVersion.htm index 1399e01..5a21f2f 100644 --- a/EM_Help/HelpFiles/EM_WW_PublicVersion.htm +++ b/EuromodHelp/HelpFiles/EM_WW_PublicVersion.htm @@ -15,7 +15,7 @@

                    Generating a EUROMOD public

                    A EUROMOD public version is a version that is released for public use. Essentially, private countries/add-ons, systems, policies, -functions, parameters, datasets and comments are removed from such a version[1], i.e. parts, which are not yet ready or not foreseen to be visible to the public.

                    @@ -26,7 +26,7 @@

                    Generating a EUROMOD public open. The appearing dialog allows for specifying a path for the public version, as well as the version number. Note that both specifications are compulsory. Pressing OK -starts the process[2], which, if terminated successfully, indicates where the public version was stored. Note that the public version is not loaded. To check the result one has diff --git a/EM_Help/HelpFiles/EM_WW_RenamingSystems.htm b/EuromodHelp/HelpFiles/EM_WW_RenamingSystems.htm similarity index 90% rename from EM_Help/HelpFiles/EM_WW_RenamingSystems.htm rename to EuromodHelp/HelpFiles/EM_WW_RenamingSystems.htm index dba5d0c..04e7434 100644 --- a/EM_Help/HelpFiles/EM_WW_RenamingSystems.htm +++ b/EuromodHelp/HelpFiles/EM_WW_RenamingSystems.htm @@ -11,7 +11,7 @@

                    Renaming a system

                    -

                    To rename a system click the system's header to select the +

                    To rename a system right-click the system's header to select the menu item Rename System from the context menu. This opens a dialog where you are asked to indicate the system's new name. Note that the system's name must not contain any other characters than @@ -30,7 +30,7 @@

                    Renaming a system

                    href="EM_WW_DefiningUpratingFactors.htm">Working with EUROMOD - Defining uprating factors).

                    -

                    Finally, you are informed that " Add-Ons are not adapted to reflect the new system name. Please +

                    Finally, you are informed that "... Add-Ons are not adapted to reflect the new system name. Please change policy 'AddOn_Applic' manually where necessary. ". You can avoid this warning for the next time by ticking the option Do not reshow this diff --git a/EM_Help/HelpFiles/EM_WW_RunDialog.htm b/EuromodHelp/HelpFiles/EM_WW_RunDialog.htm similarity index 84% rename from EM_Help/HelpFiles/EM_WW_RunDialog.htm rename to EuromodHelp/HelpFiles/EM_WW_RunDialog.htm index c0bd7e9..c9f666e 100644 --- a/EM_Help/HelpFiles/EM_WW_RunDialog.htm +++ b/EuromodHelp/HelpFiles/EM_WW_RunDialog.htm @@ -19,16 +19,14 @@

                    Viewing and selecting systems to run

                    The main part of the dialog is formed by a list of systems which are ready to run. The content of this list depends on where the dialog -was opened. If the Run EUROMOD button -is pressed while no country is loaded, all systems of all countries are -displayed. Whereas, if the button is pressed in a specific +was opened. Whereas, if the button is pressed in a specific country, the systems of this country are displayed. This selection can however be changed via the ribbon bar, showing all countries. The country/ies whose systems are currently listed are marked by a -light blue background. To select a country, i.e. to list the countrys systems, +light blue background. To select a country, i.e. to list the country's systems, just click it. Vice versa click a selected country to unselect it, i.e. to not any longer list its systems.[2]

                    -

                    To select a system for running check the tick-box right of +

                    To select a system for running check the tick-box left of the system. Note that some systems may be marked with red colour. These are systems that are set as private. Before however, you may want to determine the dataset which is applied for running the system. For this purpose the system list provides a @@ -81,9 +79,9 @@

                    Running the selected system-dataset combinations

                    runs are aborted and the queued runs are taken from the queue. To hide the window, use the minimise button.

                    -

                    Also note that, apart from the output files, the model produces a header file, which contains one row of information for each run. +

                    Also note that, apart from the output files, the model produces a header file, which contains one row of information for each run. The information includes: System (e.g. es_2019); Database (es_2017_a3.txt); EUROMOD-Version (e.g. euromodfiles_i1.66); Software-Version (e.g. 3.2.3); Executable-Version (e.g. 1.6); -Start (e.g. 17 Jan 2020; 14:45:01); End (e.g. 17 Jan 2020; 14:45:29); Duration (e.g. 27.8580001s); Outputfile(s) (e.g. c:\euromod\euromodfiles\output\es_2019_std.txt); +Start (e.g. 17 Jan 2020; 14:45:01); End (e.g. 17 Jan 2020; 14:45:29); Duration (e.g. 27.8580001s); Outputfile(s) (e.g. c:\euromod\euromodfiles\output\es_2019_std.txt); Currency (e.g. euro); Exchangerate (e.g. 1).
                    In addition there is one "column" for each extension available for any of the runs. For example:
                    @@ -92,8 +90,8 @@

                    Running the selected system-dataset combinations

                      1      0     -1
                    A value of 1 means that the extension was on for the run, 0 means off. -1 means not available.[4]
                    -The name of the header file is yyyymmddhhmm_EMHeader.txt (e.g. 201110111210_EMHeader.txt).
                    -Moreover, if any warnings or errors were issued, an error-log file is generated, named yyyymmddhhmm_emerrlog.txt (e.g. 201110111210_emerrlog.txt).

                    +The name of the header file is yyyymmddhhmm_xxxxxxxxxxxxxx_EUROMOD_Log.txt (e.g. 20221212102923_d8c50fc0c66b41d6aeabce99c333c941_EUROMOD_Log.txt).
                    +The information about warnings or errors, if any, is saved in the same header file described above under the title ERROR-LOG.

                    Limiting the displayed datasets and systems

                    @@ -146,7 +144,7 @@

                    Running add-on systems

                    The section View Add-Ons in the ribbon View / Filter / Add-Ons provides a list with available EUROMOD add-ons. If one or more add-ons are selected, additional run-checkboxes are displayed in the system -list (one for each add-on[7]). Depending on whether the add-on is available for the system, these boxes are enabled for selection or not. Note that add-on-systems can be @@ -159,12 +157,7 @@

                    Running add-on systems

                    Advanced settings

                    The ribbon Advanced Settings allows for configuring -some advanced options with respect to the model run:[9]

                    - -

                    Do not stop on non-critical errors: Checking this box effects -that the model does not stop on non-critical errors. Note that it still stops -on critical errors. For more detailed information see Working with EUROMOD - Finding errors.

                    +some advanced options with respect to the model run [9]:

                    Add date to output-filename: Checking this box effects that yyyymmddhhmm @@ -177,20 +170,11 @@

                    Advanced settings

                    thus a direct link between header file and corresponding output files is generated.

                    -

                    Log runtime in detail: Checking this box advises EUROMOD to -produce a detailed run-time-log. That means, instead of only logging total -runtime, the model also logs runtime for single policies and functions and -writes this information into the header file. Please note that the durations -measured by this logging procedure are somewhat distorted as time recording -itself takes time (though not very much). As a consequence it is recommended to -switch time recording off for time critical runs.

                    -

                    Close dialog after run: Checking this box effects that the Run EUROMOD dialog is closed after -launching the programme.

                    +launching the programme. This box is checked by default.

                    Do not pool system's datasets: Checking this box forces each system-dataset -combination to be shown in a separate row.[10] -This (longer and less concise) listing has the advantage that a single system +combination to be shown in a separate row [10]. This (longer and less concise) listing has the advantage that a single system can be run with different datasets more conveniently. To avoid, that the output of a systemX-datasetA combination is overwritten by the output of a systemX-datasetB combination (as the @@ -206,35 +190,40 @@

                    Advanced settings

                    Warn about useless groups: If this box is checked, the executable generates warnings about unnecessary group-numbers in the group column.

                    -

                    Parallel runs: This field indicates how many instances of the +

                    Number of parallel runs: This field indicates how many instances of the EUROMOD executable run in parallel. For example, if parallel runs is set to three and five systems (using different datasets) are selected for running, three runs -are started immediately, while the remaining two runs are queued. By default this option is set -to "Auto" in which case the application will automatically determine the most efficient number +are started immediately, while the remaining two runs are queued. By default this option is set +to "Auto" in which case the application will automatically determine the most efficient number of parallel runs based on the number of available CPU cores.

                    +

                    Run old Executable: If this box is checked, old executable is run.

                    +

                    Run first N Households only: This option allows to select the number of households for which EUROMOD is run.

                    +

                    All Output in EURO: If this box is checked, monetary variables in output file are reported in EURO

                    +

                    Exchange Rate: Allows to select between two choices, June 30 (same as Default) or Year average. Depending on the selected option, different exchange rates are used when output in EURO is used.

                    +

                    Switching extensions on or off

                    -

                    The section Extensions in the ribbon View / Filter / Add-Ons provides a number of checkboxes, which allow for switching on or off certain parts of the EUROMOD calculations. -Checking, for example, the box Tax Compliance Adjustments extends the list of systems by a column, which provides a button for each system. +

                    The section Extensions in the ribbon View / Filter / Add-Ons provides a number of checkboxes, which allow for switching on or off certain parts of the EUROMOD calculations. +Checking, for example, the box Tax Compliance Adjustments extends the list of systems by a column, which provides a button for each system. These 'switch buttons' are captioned by either on or off.
                    An on button indicates that correction for tax compliance is part of the system's calculations. -If users want the model to omit these calculations (i.e. see what happens if everybody adheres the rules of tax legislation) they can do so by clicking the on button -this changes the caption of the button to off, indicating that the next model run will not carry out the parts of calculation, which correct for tax compliance. +If users want the model to omit these calculations (i.e. see what happens if everybody adheres the rules of tax legislation) they can do so by clicking the on button - +this changes the caption of the button to off, indicating that the next model run will not carry out the parts of calculation, which correct for tax compliance. The same applies for the other checkboxes, thus allowing e.g. taking (not) into account benefit non-take-up, etc.

                    -

                    Moreover a switch button may be captioned by on (default) or off (default). This indicates that the current setting is the default, -i.e. if the switch button for tax evasion is captioned by on (default) for a system means that usually tax evasion is part of the system's calculations. -The button Restore Defaults left of the checkboxes for viewing extension switches allows for setting all switches back to their defaults. -Alternatively a user may use the context menu (mouse right-click) in any extension switch column to change the switch for all systems to on, off or the default value of each system. +

                    Moreover a switch button may be captioned by on (default) or off (default). This indicates that the current setting is the default, +i.e. if the switch button for tax evasion is captioned by on (default) for a system means that usually tax evasion is part of the system's calculations. +The button Restore Defaults left of the checkboxes for viewing extension switches allows for setting all switches back to their defaults. +Alternatively a user may use the context menu (mouse right-click) in any extension switch column to change the switch for all systems to on, off or the default value of each system. For more information on how this is accomplished technically see Working with EUROMOD - Changing Countries' Settings - Extensions.

                    -

                    Clicking a switch button opens a context menu, which does not only allow for switching extensions on or off, but also provides the option all. +

                    Clicking a switch button opens a context menu, which does not only allow for switching extensions on or off, but also provides the option all. If this option is selected the respective system is run twice: once with the extension switched on and once with the extension switched off.
                    -To prevent overwritting the standard output-file the Auto-Rename-option is activated for this system (see description of the Auto Rename-feature below).

                    +To prevent overwriting the standard output-file the Auto-Rename-option is activated for this system (see description of the Auto Rename-feature below).

                    -

                    Furthermore a button may also show no caption. This means that the extension is not switchable, because the country (or system) may not foresee respective calculations. -For example, correction for tax compliance may not be implemented for Denmark or it may just not be implemented for the Danish 2009 system. +

                    Furthermore a button may also show no caption. This means that the extension is not switchable, because the country (or system) may not foresee respective calculations. +For example, correction for tax compliance may not be implemented for Denmark or it may just not be implemented for the Danish 2009 system. Again, for more information on how this is accomplished technically see Working with EUROMOD - Changing Countries' Settings - Extensions.

                    As the possibility to display more than one such button column suggests, it is possible to combine different settings, e.g. taking (not) into account tax compliance as well as benefit take-up.

                    @@ -242,20 +231,20 @@

                    Switching extensions on or off

                    Extension-switch-settings are not only system specific, but in fact system-dataset-combination specific. System specificity implies that the caption of the buttons may be different amongst the systems of a country. Dataset specificity means that a system's button may change if another dataset is selected.

                    -

                    The user interface remembers users' settings of switch buttons. That means if a user for example changes a switch button from on (default) to off +

                    The user interface remembers users' settings of switch buttons. That means if a user for example changes a switch button from on (default) to off and then closes the run dialog or even the whole interface, next time she opens the run dialog and displays the respective column, the button will still be set to off.

                    Extension-switches do not only apply for 'ordinary' systems, but also for add-on systems. That means one could for example calculate marginal tax rates with tax evasion switched on or off.

                    -

                    If the switch buttons for an extension are not visible (because the column is not displayed), the model always applies the default settings, -irrespective of any changes by the user. That means, to avoid misleading results by forgotten extension-switch-changes, changes by the user are only effective if she sees in the run dialog that they are set.

                    +

                    If the switch buttons for an extension are not visible (because the column is not displayed), the model always applies the default settings, +irrespective of any changes by the user. That means, to avoid misleading results by forgotten extension-switch-changes, changes by the user are only effective if she sees in the run dialog that they are set. If the extension has not been set to a default value, and if it is not visible in the run dialog, a warning will be displayed.

                    The On/Off-slider Auto Rename left of the button Restore Defaults (in the ribbon View / Filter / Add-Ons) allows for automatic renaming of the output file based on non-default extension-switch-settings. -If set to On, and if the output file name follows the default format (e.g. xx_YYYY_std), it is automatically renamed to signify which switches have been changed in the run dialog. -Specifically, for each switch that has a non-default value, an appropriate text will be appended at the end of the filename, while the _std suffix is removed +If set to On, and if the output file name follows the default format (e.g. xx_YYYY_std), it is automatically renamed to signify which switches have been changed in the run dialog. +Specifically, for each switch that has a non-default value, an appropriate text will be appended at the end of the filename, while the _std suffix is removed (e.g. ee_2010_std can become ee_2010_btaoff_fyaon).

                    -

                    Finally it may be useful to know that the user interface passes the extension switch settings to the executable via the configuration file +

                    Finally it may be useful to know that the user interface passes the extension switch settings to the executable via the configuration file (see EUROMOD Installation and Architecture - EUROMOD software (user interface and executable) - The configuration file).

                     

                    @@ -316,18 +305,5 @@

                    Switching extensions on or off

                    one for the combination of system cc_yyyy with dataset cc_yyy0_a1 and one for the combination of system cc_yyyy with dataset cc_yyy1_a1.

                    -

                    [11] -In this case, as usual, the switch in the country file is relevant. That means -the policy can be set "permanently" to on, off, toggle or n/a.

                    - -

                    [12] -More precisely it reports for all available policy switches, whether they are -turned on or off. If, for example, for a system Tax Compliance Adjustments as well as Benefit Take-up Adjustments are switchable, the header file will -report something like bta_??=on;tca_??=off, -independently of the fact whether the user has changes the switches or defaults -were applied. Whereas, if for a system only Tax -Compliance Adjustments are switchable (because Benefit Take-up Adjustments do not exist or are not switchable), -the header file will report something like tca_??=off.

                    - diff --git a/EM_Help/HelpFiles/EM_WW_SaveAsText.htm b/EuromodHelp/HelpFiles/EM_WW_SaveAsText.htm similarity index 97% rename from EM_Help/HelpFiles/EM_WW_SaveAsText.htm rename to EuromodHelp/HelpFiles/EM_WW_SaveAsText.htm index 7b84748..ac7f380 100644 --- a/EM_Help/HelpFiles/EM_WW_SaveAsText.htm +++ b/EuromodHelp/HelpFiles/EM_WW_SaveAsText.htm @@ -32,7 +32,7 @@

                    Save country XML-parameter-files include what one sees in the expanded policy spine. Information on system settings, private comments, etc. are not available. Moreover, the text files contain only (part of the) information stored in cc.xml but not information stored in cc_DataConfig.xml. Also note that the first column indicates what a -line refers to, i.e. a POLICY[1], FUNCTION or PARAMETER.

                    diff --git a/EM_Help/HelpFiles/EM_WW_Saving.htm b/EuromodHelp/HelpFiles/EM_WW_Saving.htm similarity index 88% rename from EM_Help/HelpFiles/EM_WW_Saving.htm rename to EuromodHelp/HelpFiles/EM_WW_Saving.htm index dfdfb4c..77c762d 100644 --- a/EM_Help/HelpFiles/EM_WW_Saving.htm +++ b/EuromodHelp/HelpFiles/EM_WW_Saving.htm @@ -11,27 +11,27 @@

                    Saving changes

                    -

                    To save your changes open the main menu (above the button Run EUROMOD) and select the menu item Save. +

                    To save your changes open the main menu (above the button Run EUROMOD) and select the menu item Save Country. Alternatively press Ctrl-S. For further information on file organisation and structure see EUROMOD Installation and File Structure.

                    Saving a copy of a country

                    -

                    To generate a copy of a country select the menu item Save As from the main menu (above the Run EUROMOD button). This opens a dialog +

                    To generate a copy of a country select the menu item Save Country As from the main menu (above the Run EUROMOD button). This opens a dialog allowing indicating the Long Name and the Short Name of the copied country. -The former is the countries full name (e.g. Hungary, Spain, MySpain, etc.), the latter is the country code (e.g. HU, ES, MS, etc.). +The former is the countries full name (e.g. Hungary, Spain, MySpain, etc.), the latter is the country code (e.g. HU, ES, MS, etc.). Note that the country code needs to be unique, i.e. no other country with this code exists yet.
                    Moreover, you are asked to indicate a Flag in portable network graphic format (png). Ideally the size of the image is 28x17 pixels. You can also select the image with the file search dialog opened by pressing the button alongside the Flag field. If you do not indicate a flag image, the flag of the origin country will be used.
                    -If the checkbox Advanced Adaptations is not ticked Save As simply copies the country's parameter files without any further adaptation. -Ticking the box effects also adapting the content of the files (e.g. changing system- and policy-names to reflect the short name of the copied country) -and possibly global settings (HICP, exchange rates). The user can define what is changed concretely by opening a configuration dialog (i.e. clicking the button …). +If the checkbox Advanced Adaptations is not ticked Save As simply copies the country's parameter files without any further adaptation. +Ticking the box effects also adapting the content of the files (e.g. changing system- and policy-names to reflect the short name of the copied country) +and possibly global settings (HICP, exchange rates). The user can define what is changed concretely by opening a configuration dialog (i.e. clicking the button …). The comments in the dialog also explain the changes.

                    Once the specifications are confirmed with OK the copy of the country is displayed in the country gallery (ribbon Countries) -and can be loaded and edited as any other country. Note that, after Save As, the loaded country is the copied. +and can be loaded and edited as any other country. Note that, after Save As, the loaded country is the copied. The origin country is not loaded anymore and has the status of the last saving before the Save As.

                    For information on the files, which are generated by the copy process see EUROMOD Installation and Architecture.

                    @@ -48,7 +48,7 @@

                    Auto-saving

                    country it suggests using these files if existent.

                    To configure the auto-saving interval, or to en- or disable -auto-saving, select the menu item Configuration +auto-saving, select the menu item Project Configuration from the main menu (above the Run EUROMOD button). The tab Auto Save of the appearing dialog allows for defining these settings.

                    @@ -56,9 +56,8 @@

                    Auto-saving

                    File locking

                    In order to avoid that several developers change a country -at the same time, the user interface uses a locking mechanism.[1] -That means once a developer opens a country "normally", i.e. in +at the same time, the user interface uses a locking mechanism [1]. That means once a developer opens a country "normally", i.e. in read-write modes, any further developer who opens the same country, gets an is-in-use-message, which tells who is using the country and asks whether the country should be opened in read-only modus. The user interface allows for three reactions to diff --git a/EM_Help/HelpFiles/EM_WW_SavingVariables.htm b/EuromodHelp/HelpFiles/EM_WW_SavingVariables.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_SavingVariables.htm rename to EuromodHelp/HelpFiles/EM_WW_SavingVariables.htm diff --git a/EuromodHelp/HelpFiles/EM_WW_SearchReplace.htm b/EuromodHelp/HelpFiles/EM_WW_SearchReplace.htm new file mode 100644 index 0000000..36e9267 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_SearchReplace.htm @@ -0,0 +1,91 @@ + + + + + + +Searching +and replacing + + + + +

                    Searching +and replacing

                    + +

                    Selecting the ribbon Country Tools and pressing the button Search + Replace opens the Search and Replace dialog. The dialog can also be accessed by pressing Ctrl-F to open it in the search mode and by Ctrl-H to open it in the search and replace mode.

                    + +

                    Searching

                    + +

                    To search for example for the string abc, type abc into the field Search and press either the button Search Next or the button Search Previous. This finds the cell nearest to the currently focused cell, which contains the string abc. Search Next finds the nearest cell after and Search Previous finds the nearest cell before the focused cell. "Finding" means that the respective cell is focused (red-dotted border) and made visible by expanding the parent nodes, if necessary, and scrolling to the position of the cell.

                    + +

                    It is possible to use search patterns. That means ? can be used for symbolising one arbitrary character and * for symbolising any number of arbitrary characters. bch??_s, for example, finds bch00_s, bch01_s, bchba_s, ..., bchyc_s, while bch*_s finds the listed strings as well as bch_s, bchba01_s, ..., bchucrg_s.

                    + +

                    Note that any searched string or pattern is stored by the dialog, in the sense that one can pick it from the list, which is displayed by clicking the arrow button right of the Search field.

                    + +

                    Specifying the search

                    + +

                    The Search and Replace +dialog offers several options to specify the search:

                    + +
                    Search in ... Cells
                    + + +
                    Search in ... Columns
                    +
                      +
                    • As a default the search refers to all columns, except those moved to the Hidden Systems Box (compare above).
                    • + +
                    • When the option System Columns is selected, the search only takes system columns into account.
                    • + +
                    • When the option Policy Columns is selected, the search only takes Policy columns into account.
                    • + +
                    • When the option Comment Columns is selected, the search only takes the Comment column into account.
                    • +
                    + +
                    Search by ...
                    +

                    As a default (option Search by Columns) the search first finds all occurrences of the searched string or pattern in the first (affected) column, to then find all occurrences in the second column, etc. Selecting the option Search by Rows effects that the search first finds all occurrences in the first (affected) row, to then find all occurrences in the second row, etc.

                    + +
                    Match Case
                    +

                    As a default the search is not case sensitive. Ticking the box Match Case enforces case sensitivity.

                    + +
                    Match Entire Cell Content
                    +

                    As a default the searched string or pattern does not need to be the only content of the found cells. For example yem finds a cell containing yem as well as a cell containing yem*10%. By ticking the box Match Entire Cell Content, the cells containing exclusively the searched string or pattern are found (i.e. the first match in the example).

                    + +
                    Include Private Comments
                    +

                    As a default the search does not include private comments (see Working with EUROMOD - Private comments). Ticking the box extends the search to jump to the respective cell in the Comment column, if the private comment matches the search criteria. Note that the box is not available in replace mode.

                    + +

                    Replacing

                    + +

                    Pressing the button Replace ... displays the field Replace by and the button Replace All. The field Replace by allows to indicate a string by which the string in the field Search has been replaced. To start (single) replacing, press Search Next to find the first match [1]. Then press Replace to replace the content in the found cell. This moves the focus automatically to the next matching cell (where Replace can be pressed again).

                    + +

                    Pressing the button Replace All replaces all occurrences of the string in Search by the string in Replace by, taking into account the following restrictions (which also apply to single replacement).

                    +
                      +
                    • Replacing does not allow for search patterns, i.e. ? and * cannot be used.
                    • + +
                    • Matches in the Policy and Grp/No columns can only be replaced if the respective cell is editable, otherwise an error message is displayed. Please refer to Working with EUROMOD - Copying parameter values (and comments) paragraph Copying from and to the clipboard for restrictions on replacing values in the Policy and Grp/No column.
                    • + +
                    • The search options as described above, in paragraph Specifying the search are valid for replacing as well.
                    • +
                    +

                    The Search and Replace dialog does not provide a Search All option, however a similar functionality is provided by the Component Use dialog with the option Component named (see Working with EUROMOD - Checking component use).

                    + +

                     

                    + + + +
                    + +
                    + +

                    [1] Note that you need to start the replacing by focusing a cell that matches Search - otherwise an error message is issued.

                    + +
                    + + + + diff --git a/EM_Help/HelpFiles/EM_WW_Searching.htm b/EuromodHelp/HelpFiles/EM_WW_Searching.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_Searching.htm rename to EuromodHelp/HelpFiles/EM_WW_Searching.htm diff --git a/EM_Help/HelpFiles/EM_WW_Selecting.htm b/EuromodHelp/HelpFiles/EM_WW_Selecting.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_Selecting.htm rename to EuromodHelp/HelpFiles/EM_WW_Selecting.htm diff --git a/EM_Help/HelpFiles/EM_WW_SetPolicyPrivate.htm b/EuromodHelp/HelpFiles/EM_WW_SetPolicyPrivate.htm similarity index 66% rename from EM_Help/HelpFiles/EM_WW_SetPolicyPrivate.htm rename to EuromodHelp/HelpFiles/EM_WW_SetPolicyPrivate.htm index 444d382..2d01465 100644 --- a/EM_Help/HelpFiles/EM_WW_SetPolicyPrivate.htm +++ b/EuromodHelp/HelpFiles/EM_WW_SetPolicyPrivate.htm @@ -12,13 +12,13 @@

                    Setting policies, functions and parameters private

                    To set a policy, function or parameter private, respectively -to remove this setting, right click its name for opening the context menu and +to remove this setting, right-click its name for opening the context menu and selecting the menu item Set/Unset Private. If the policy/function/parameter currently is set private, the menu item shows -a red symbol. In this case clicking the menu item removes the private setting +a red dot (for policies and parameters) and fx letters in red (for functions). In this case clicking the menu item removes the private setting and the symbol takes on its usual colour. Vice versa, if a policy/function/parameter -is not private, the symbol shows its usual colour. In this case clicking the -menu item installs the private setting and changes the symbol's colour to red.

                    +is not private, the symbols show their usual colour. In this case clicking the +on Set/Unset Private installs the private setting and changes the symbol's colour to red.

                    For further information concerning private components see Working with EUROMOD - Generating a EUROMOD diff --git a/EM_Help/HelpFiles/EM_WW_SummaryStatistics.htm b/EuromodHelp/HelpFiles/EM_WW_SummaryStatistics.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_SummaryStatistics.htm rename to EuromodHelp/HelpFiles/EM_WW_SummaryStatistics.htm diff --git a/EM_Help/HelpFiles/EM_WW_SystemOrder.htm b/EuromodHelp/HelpFiles/EM_WW_SystemOrder.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_SystemOrder.htm rename to EuromodHelp/HelpFiles/EM_WW_SystemOrder.htm diff --git a/EM_Help/HelpFiles/EM_WW_SystemSettings.htm b/EuromodHelp/HelpFiles/EM_WW_SystemSettings.htm similarity index 94% rename from EM_Help/HelpFiles/EM_WW_SystemSettings.htm rename to EuromodHelp/HelpFiles/EM_WW_SystemSettings.htm index 182da96..3472ec3 100644 --- a/EM_Help/HelpFiles/EM_WW_SystemSettings.htm +++ b/EuromodHelp/HelpFiles/EM_WW_SystemSettings.htm @@ -29,8 +29,8 @@

                    Changing system settings

                    to 1.

                    Currency Parameters: This setting indicates -the currency used for monetary parameter values. Possible values are euro or national (standing for national currencies like UK Pound, Danish -Krone, Polish Zloty, etc.). For more information on EUROMOD parameters see euro or national (standing for national currencies like Danish +Krone, Polish Zloty, Bulgarian Lev, etc.). For more information on EUROMOD parameters see EUROMOD Basic Concepts - Presentation of countries' tax-benefit systems.

                    @@ -48,7 +48,7 @@

                    Changing system settings

                    indicates which income concept is used as a default for determining which member of an assessment unit is the "head". A combo box provides all incomelists available for the system, to allow for selecting an appropriate income concept. The default setting is ils_OrigY. For -further information consult the description of the function DefTU in EUROMOD +further information consult the description of the function DefTU in EUROMOD Functions - The system functions DefTU and UpdateTU.

                    Click OK to confirm any changes or Cancel diff --git a/EM_Help/HelpFiles/EM_WW_TextSize.htm b/EuromodHelp/HelpFiles/EM_WW_TextSize.htm similarity index 100% rename from EM_Help/HelpFiles/EM_WW_TextSize.htm rename to EuromodHelp/HelpFiles/EM_WW_TextSize.htm diff --git a/EM_Help/HelpFiles/EM_WW_Undo.htm b/EuromodHelp/HelpFiles/EM_WW_Undo.htm similarity index 88% rename from EM_Help/HelpFiles/EM_WW_Undo.htm rename to EuromodHelp/HelpFiles/EM_WW_Undo.htm index 17ba4eb..152fa2a 100644 --- a/EM_Help/HelpFiles/EM_WW_Undo.htm +++ b/EuromodHelp/HelpFiles/EM_WW_Undo.htm @@ -13,8 +13,7 @@

                    Undo and redo

                    To undo the last change click the blue arrow pointing to the left in the top left corner of the user -interface or press Ctrl-Z. This -procedure can be repeated until there is no change left to be undone.

                    +interface or press Ctrl-Z. This procedure can be repeated until there is no undone change left to be redone.

                    To redo the last undone change click the blue arrow pointing to the right in the top left corner of the user interface or press Ctrl-Y. This procedure can be repeated diff --git a/EM_Help/HelpFiles/EM_WW_UpdatingProgress.htm b/EuromodHelp/HelpFiles/EM_WW_UpdatingProgress.htm similarity index 90% rename from EM_Help/HelpFiles/EM_WW_UpdatingProgress.htm rename to EuromodHelp/HelpFiles/EM_WW_UpdatingProgress.htm index 9212ff2..39b6450 100644 --- a/EM_Help/HelpFiles/EM_WW_UpdatingProgress.htm +++ b/EuromodHelp/HelpFiles/EM_WW_UpdatingProgress.htm @@ -16,7 +16,7 @@

                    Obtaining information upon updating

                    The ribbon Administration Tools provides a button Updating Progress, which allows for opening a dialog that provides options to obtain -information upon the models "updating progress". That means EUROMOD +information upon the model's "updating progress". That means EUROMOD developers (and users) can assess which policy years are implemented for each country and which datasets are available to run the respective systems.

                    @@ -24,6 +24,20 @@

                    Obtaining information upon updating first tab allows for controlling the information which is to be provided, while the latter three display the respective information:

                    +

                    Tab Settings: As mentioned above, this tab serves controlling +the information which is displayed in the other tabs. The list on the left hand +side allows for selecting the countries which are included, which buttons to +select All or No country. Clicking the +button Generate produces respectively +refreshes the information as described above for the selected countries. The +checkboxes on its left allow for including/excluding parts of the information. The box Export to text +files provides options for outputting the current content of the three +information tabs into text files. The field Folder +must indicate an output path where to store the resulting text files. The +folder can be selected with the button right of the field. The three fields below +must indicate the file names for storing the information. The checkboxes left +of them allow for including/excluding the respective tab.

                    +

                    Tab Systems: displays a table which lists the policy years (columns) which are implemented for each country (rows). The crossing cell indicates whether the respective @@ -38,8 +52,6 @@

                    Obtaining information upon updating provides information on the available datasets for each country. The columns display data years, which are extracted from the dataset name, i.e. if the dataset's name is cc_yyyy_xxx (e.g. be_2007_a3, uk_2009_lpc1, etc.) the dataset is listed in the respective column. -There are three additional columns: The column hypo lists hypo data, the column training lists training data and the column other lists other datasets which do not follow the naming -convention (i.e. essentially sl_demo_v4). The rest of the columns indicate the datasets' properties: i.e. their collection and income year and whether they are private or not.

                    @@ -52,22 +64,8 @@

                    Obtaining information upon updating href="EM_WW_ConfiguringDatasets.htm">Working with EUROMOD - Configuring datasets) and just allows getting information on several countries at once.

                    -

                    Tab Settings: As mentioned above, this tab serves controlling -the information which is displayed in the other tabs. The list on the left hand -side allows for selecting the countries which are included, which buttons to -select All or No country. Clicking the -button Generate produces respectively -refreshes the information as described above for the selected countries. The -checkboxes on its left allow for including/excluding parts of the information. The box Export to text -files provides options for outputting the current content of the three -information tabs into text files. The field Folder -must indicate an output path where to store the resulting text files. The -folder can be selected with the button right of the field. The three fields below -must indicate the file names for storing the information. The checkboxes left -of them allow for including/excluding the respective tab.

                    -

                    Note that the information to generate the tables is taken -from the indications as provided in the countries configuration dialogs (see Working with EUROMOD - Changing system settings and Working with EUROMOD - Configuring datasets) and is as accurate and up-to-date as this base.

                    diff --git a/EM_Help/HelpFiles/EM_WW_UsingHelp.htm b/EuromodHelp/HelpFiles/EM_WW_UsingHelp.htm similarity index 78% rename from EM_Help/HelpFiles/EM_WW_UsingHelp.htm rename to EuromodHelp/HelpFiles/EM_WW_UsingHelp.htm index b26db01..771b876 100644 --- a/EM_Help/HelpFiles/EM_WW_UsingHelp.htm +++ b/EuromodHelp/HelpFiles/EM_WW_UsingHelp.htm @@ -29,6 +29,11 @@

                    Getting info on User with can be obtained by clicking the button Version in the ribbon Help & Info.

                    +

                    Getting the End-user Licence

                    +

                    The details of the End-User Licence Agreement for the use of EUROMOD (compiled version including plugins) can be obtained by clicking the button Licence. It includes an annex (Annex A) with the technical specifications of the software and Third-Parties' Libraries used in EUROMOD.

                    + + +

                     

                    diff --git a/EuromodHelp/HelpFiles/EM_WW_Variables.htm b/EuromodHelp/HelpFiles/EM_WW_Variables.htm new file mode 100644 index 0000000..c048659 --- /dev/null +++ b/EuromodHelp/HelpFiles/EM_WW_Variables.htm @@ -0,0 +1,56 @@ + + + + + + +Administration of EUROMOD variables + + + + +

                    Administration of EUROMOD variables

                    + +

                    EUROMOD variables in a nutshell

                    + +

                    All countries implemented in EUROMOD use the same set of variables to store information taken from input data as well as generated by the model. For example, a variable called yem is used by each county to store employment income (taken from input data). As another example, a variable called bch_s stores child benefits calculated by the model. This approach does not only care for high comparability over countries but also supports exchangeability in facilitating task like, for example, taking some policy measure from one country and implementing it in another.

                    + +

                    At first view the names of EUROMOD variables may seem rather none intuitive (e.g. dag for age). In fact, the names follow an elaborated naming scheme, which is described in detail in the Data Requirement Document (DRD). This brief description confines itself to mentioning some features, which are useful in identifying the meaning of a variable:

                    + +
                      +
                    • Variables generated by the model end with _s for simulated, whereas variables taken from input data do not have such an ending. For example bch is a child benefit taken from data, whereas bch_s is a simulated child benefit.
                    • + +
                    • The first character of a variable's name indicates its type, where b stands for benefit (e.g. bch: b=benefit, ch=child), t stands for tax (e.g. tin: t=tax, in=income), p stands for pension (e.g. poa: p=pension, oa=old age), d stands for demographic (e.g. dag: d=demographic, ag=age), l stands for labour market (e.g. les: l=labour market, es=economic status), y stands for income (e.g. yem: y=income, em=employment), a stands for assets (e.g. afc: a=assets, fc=financial capital), x stands for expenditure (e.g. xcc: x=expenditure, cc=child care), k stands for in kind (e.g. ked: k=in kind, ed=education) and s stands for system (e.g. stm01: s=system, tm=temporary variable).
                    • + +
                    • The rest of the name is composed of two-character acronyms. Take for example the variable tsceehl_s: t stands for tax, sc stands for social insurance contributions, ee stands for employee, hl stands for health and _s stands for simulated. Thus the variable stores employee's health social insurance contributions as calculated by the model.
                    • +
                    EUROMOD variables are stored in a special EUROMOD parameter file, the variable description file VarConfig.xml (see EUROMOD Installation and Architecture - EUROMOD content (parameter files) - Organisation of files for the storage place and EUROMOD Installation and Architecture - EUROMOD content (parameter files) - Format of the variables file for the content of this file). The file contains the names of the available variables together with their properties. Some of the properties serve the model to distinguish if certain routines should be applied on the variable, for example only monetary variables are up-rated. Others are mere information, for example, there is a verbal description of each variable (Automatic Label), and a special description for each country. Moreover, the variable description file stores the acronyms of which the variable names are composed.

                    + +

                    Note that in addition to these standardised variables, there are variables which are defined during the model run using the functions DefVar and DefConst (see EUROMOD Basic Concepts - EUROMOD terminology paragraph EUROMOD variables).

                    + +

                    Administrating variables and acronyms in the EUROMOD user interface

                    + +

                    The EUROMOD user interface provides a tool, which allows administrating the information stored in the variable description file. To assess this tool press the button Variables in the ribbon Administration Tools.

                    + +

                    The left part of the tool's surface shows the list of all available EUROMOD variables. For each variable there is a checkbox indicating whether the variable is monetary (checked) or not (not checked) and a verbal description. This description is called Automatic Label, indicating that it is automatically generated out of the acronyms building the variable's name, thus the user cannot edit it. Moreover, if a variable is selected, country specific descriptions are listed below the list of variables. These descriptions are editable.

                    + +

                    The right part of the tool's surface shows all available acronyms organised in a tree in three levels. The first level exhibits the type as described above (benefit, tax, income, ...). The second level subdivides types into so called "levels". The levels mainly serve a better overview [1]. Finally, the third level shows the acronyms themselves together with a verbal description, which is used to generate the Automatic Labels of the variables using the respective acronym. If an acronym is categorical (e.g. gender has two categories: male and female), selecting the acronym lists the respective categories below the list of acronyms.

                    + +

                    Note the possibilities of adapting the size of the window, and therewith the lists, according to your requirements. In particular note that the window is vertically tiled, i.e. if you move the mouse between the upper (Variables, Acronyms) and lower lists (Descriptions, Categories) a cursor appears, which allows to resize the upper and lower window part.

                    + +

                     

                    + + + +
                    + +
                    + +

                    [1] The level also plays a role in the naming rules of variables. For more information see Working with EUROMOD - Administrating variables.

                    + +
                    + + + + diff --git a/EuromodHelp/HelpFiles/EUROMODHelp.hhc b/EuromodHelp/HelpFiles/EUROMODHelp.hhc new file mode 100644 index 0000000..518bd16 --- /dev/null +++ b/EuromodHelp/HelpFiles/EUROMODHelp.hhc @@ -0,0 +1,844 @@ + + + + + +
                      +
                    • + + +
                    • +
                        +
                      • + + +
                      • +
                      • + + +
                      • +
                      • + + +
                      • +
                      • + + +
                      • +
                      +
                    • + + +
                    • +
                        +
                      • + + +
                      • +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + "" + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                      • + + +
                      • +
                      • + + +
                      • +
                      • + + +
                      • +
                      +
                    • + + +
                    • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + "" + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                      • + + +
                      • +
                      • + + +
                      • +
                      +
                    • + + +
                    • +
                        +
                      • + + +
                      • +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      +
                    • + + +
                    • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      • + + +
                      • +
                          +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        • + + +
                        • +
                        +
                      +
                    + diff --git a/EM_Help/HelpFiles/EUROMODHelp.hhp b/EuromodHelp/HelpFiles/EUROMODHelp.hhp similarity index 96% rename from EM_Help/HelpFiles/EUROMODHelp.hhp rename to EuromodHelp/HelpFiles/EUROMODHelp.hhp index 4534ea8..39e2e9a 100644 --- a/EM_Help/HelpFiles/EUROMODHelp.hhp +++ b/EuromodHelp/HelpFiles/EUROMODHelp.hhp @@ -1,6 +1,6 @@ [Options] Compatibility = 1.1 Or later -Compiled file=H:\work\Development\EM_DEVELOPMENT_JRC\EM_Private\EM_UI\bin\Help\EUROMODHelp.chm +Compiled file=C:\Users\palmabi\EUROMOD\EM_UI\bin\Help\EUROMODHelp.chm Contents file = EUROMODHelp.hhc Display compile progress=No Full-text search=Yes @@ -86,9 +86,11 @@ EM_WW_SavingVariables.htm EM_WW_ImportingVariables.htm EM_WW_CleaningVariables.htm EM_WW_Applications.htm +EM_WW_OpenOutputFile.htm EM_WW_PolicyEffects.htm -EM_WW_Plugins.htm -EM_WW_SummaryStatistics.htm +EM_WW_Macrovalidation.htm +EM_WW_HypotheticalHouseholdTool.htm +EM_WW_EUROMODStatistics.htm EM_WW_Configuration.htm EM_WW_OpenProject.htm EM_WW_UsingHelp.htm diff --git a/EM_Help/HelpFiles/files/policy_effects_1.png b/EuromodHelp/HelpFiles/files/policy_effects_1.png similarity index 100% rename from EM_Help/HelpFiles/files/policy_effects_1.png rename to EuromodHelp/HelpFiles/files/policy_effects_1.png diff --git a/EM_Help/HelpFiles/files/policy_effects_2.png b/EuromodHelp/HelpFiles/files/policy_effects_2.png similarity index 100% rename from EM_Help/HelpFiles/files/policy_effects_2.png rename to EuromodHelp/HelpFiles/files/policy_effects_2.png diff --git a/EM_Help/HelpFiles/files/style.css b/EuromodHelp/HelpFiles/files/style.css similarity index 100% rename from EM_Help/HelpFiles/files/style.css rename to EuromodHelp/HelpFiles/files/style.css diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/style.css b/EuromodHelp/HelpFiles/files/style_orig.css similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/style.css rename to EuromodHelp/HelpFiles/files/style_orig.css diff --git a/EM_Help/HelpFiles/files/style_pdf.css b/EuromodHelp/HelpFiles/files/style_pdf.css similarity index 98% rename from EM_Help/HelpFiles/files/style_pdf.css rename to EuromodHelp/HelpFiles/files/style_pdf.css index c759bb0..3a52ccd 100644 --- a/EM_Help/HelpFiles/files/style_pdf.css +++ b/EuromodHelp/HelpFiles/files/style_pdf.css @@ -4,6 +4,11 @@ body, p, div, span, td, tr, th, li, a, h1, h2, h3, h4, h5, h6 font-size: 10pt; } +.code +{ + font-family: "Courier New"; +} + p, div, span, td, tr, th, li, a, h1, h2, h3, h4, h5, h6 { margin-top: 0cm; diff --git a/EM_Help/HelpStructure/AutoRunHelpMaker.xlsm b/EuromodHelp/HelpStructure/AutoRunHelpMaker.xlsm similarity index 100% rename from EM_Help/HelpStructure/AutoRunHelpMaker.xlsm rename to EuromodHelp/HelpStructure/AutoRunHelpMaker.xlsm diff --git a/EM_Help/HelpStructure/EM_HelpSystem_Structure.xls b/EuromodHelp/HelpStructure/EM_HelpSystem_Structure.xls similarity index 59% rename from EM_Help/HelpStructure/EM_HelpSystem_Structure.xls rename to EuromodHelp/HelpStructure/EM_HelpSystem_Structure.xls index a3a669c8964bdbf8108bd39e5416c7f080f57790..97aa0b31100b7c5c87b538307305871810129ff2 100644 GIT binary patch delta 15199 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 diff --git a/EuromodHelp/HelpStructure/Gaensefuesschen/Gaensefuesschen.exe b/EuromodHelp/HelpStructure/Gaensefuesschen/Gaensefuesschen.exe new file mode 100644 index 0000000000000000000000000000000000000000..847d73e7573db5a9969930d27e57aebaa87e4cc7 GIT binary patch literal 8808 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 + + + Exe + netcoreapp3.1 + + + + + + + diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Program.cs b/EuromodHelp/InDepthHelpMaker/Program.cs similarity index 83% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Program.cs rename to EuromodHelp/InDepthHelpMaker/Program.cs index 57fd605..10775f7 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Program.cs +++ b/EuromodHelp/InDepthHelpMaker/Program.cs @@ -11,7 +11,10 @@ static void Main() { string hhcExe = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramW6432%"), "HTML Help Workshop", "hhc.exe"); string hhcExeX86 = Path.Combine(Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%"), "HTML Help Workshop", "hhc.exe"); - + string projectFolder = "InDepthHelpMaker"; + string filename = "In-depthAnalysisHelp.hhp"; + + if (!File.Exists(hhcExe)) { if (File.Exists(hhcExeX86)) hhcExe = hhcExeX86; @@ -24,12 +27,12 @@ static void Main() } string hhpFile = null; - int i = Assembly.GetExecutingAssembly().Location.IndexOf("InDepthHelpMaker"); - if (i >= 0) hhpFile = Path.Combine(Assembly.GetExecutingAssembly().Location.Substring(0, i + "InDepthHelpMaker".Length), "Help.hhp"); + int i = Assembly.GetExecutingAssembly().Location.IndexOf(projectFolder); + if (i >= 0) hhpFile = Path.Combine(Assembly.GetExecutingAssembly().Location.Substring(0, i + projectFolder.Length), filename); if (hhpFile == null) { Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("???\\InDepthHelpMaker\\Help.hhp not found!"); + Console.WriteLine($"???\\{projectFolder}\\{filename} not found!"); Console.ReadLine(); return; } diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_BaselinesReforms.htm b/EuromodHelp/InDepthHelpMaker/Settings_BaselinesReforms.htm similarity index 74% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_BaselinesReforms.htm rename to EuromodHelp/InDepthHelpMaker/Settings_BaselinesReforms.htm index 20925ed..b6e015e 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_BaselinesReforms.htm +++ b/EuromodHelp/InDepthHelpMaker/Settings_BaselinesReforms.htm @@ -13,5 +13,8 @@

                    Selecting baselines and reforms

                    There should be one and only one baseline per country, and at least one reform. If the files are not properly matching, an error message is displayed when clicking OK and the dialogue is not closed.

                    +

                    + Note: The paths for selecting the baseline and reform folders, also support file filtering with the use of the "*" and "?" characters. The ".txt" part is automatically added to the filter. +

                    \ No newline at end of file diff --git a/EuromodHelp/InDepthHelpMaker/Settings_Breakdowns.htm b/EuromodHelp/InDepthHelpMaker/Settings_Breakdowns.htm new file mode 100644 index 0000000..e5bfebc --- /dev/null +++ b/EuromodHelp/InDepthHelpMaker/Settings_Breakdowns.htm @@ -0,0 +1,98 @@ + + + + + + + + + +

                    Default Breakdowns

                    + +

                    The default breakdowns

                    + +

                    + There are five default breakdowns: Standard_Labour_Categories, + Standard_HH_Categories, Standard_Gender_Categories, + Standard_Age_Categories and Disposable_Income_Deciles. +

                    +

                    + The first four are pre-loaded in both the "Inequality and Poverty" and the "Distributional" advanced settings, while the last one (Disposable_Income_Deciles) is only pre-loaded in the "Distributional" advanced settings. +

                    + +

                    The Standard_Labour_Categories breakdown

                    +

                    + The Standard_Labour_Categories breakdown splits the population into the following groups: +

                      +
                    • Pre-school
                    • +
                    • Farmer
                    • +
                    • Employer or self-employed
                    • +
                    • Employee
                    • +
                    • Pensioner
                    • +
                    • Unemployed
                    • +
                    • Student
                    • +
                    • Inactive
                    • +
                    • Sick or Disabled
                    • +
                    • Other
                    • +
                    +

                    + +

                    The Standard_HH_Categories breakdown

                    +

                    + The Standard_HH_Categories breakdown splits the population into the following groups: +

                      +
                    • One adult <65, no children
                    • +
                    •    Female adult
                    • +
                    •    Male adult
                    • +
                    • One adult ≥65, no children
                    • +
                    •    Female adult
                    • +
                    •    Male adult
                    • +
                    • One adult with children
                    • +
                    •    Female adult
                    • +
                    •    Male adult
                    • +
                    • Two adults, <65, no children
                    • +
                    • Two adults, at least one ≥65, no children
                    • +
                    • Two adults with one child
                    • +
                    • Two adults with two children
                    • +
                    • Two adults with three or more children
                    • +
                    • Three or more adults, no children
                    • +
                    • Three or more adults with children
                    • +
                    +

                    + +

                    The Standard_Gender_Categories breakdown

                    +

                    + The Standard_Gender_Categories breakdown splits the population into the following groups: +

                      +
                    • Female
                    • +
                    • Male
                    • +
                    +

                    + +

                    The Standard_Age_Categories breakdown

                    +

                    + The Standard_Age_Categories breakdown splits the population into the following groups: +

                      +
                    • 0 - 14
                    • +
                    • 15 - 24
                    • +
                    • 25 - 49
                    • +
                    • 50 - 64
                    • +
                    • 65 - 79
                    • +
                    • 80+
                    • +
                    +

                    + +

                    The Disposable_Income_Deciles breakdown

                    +

                    + The Disposable_Income_Deciles breakdown splits the population into deciles based on the equivalised disposable income. +

                    + + + +

                    Usage

                    +

                    + The user can chose to remove the default breakdowns. In order to bring them back, all they have to do is type their name in the variable column when adding a new breakdown in the advanced settings form. Once the variable name matches a default breakdown name, the rest of the fields are automatically filled. +

                    + + + \ No newline at end of file diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Categories.htm b/EuromodHelp/InDepthHelpMaker/Settings_Categories.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Categories.htm rename to EuromodHelp/InDepthHelpMaker/Settings_Categories.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Distributional.htm b/EuromodHelp/InDepthHelpMaker/Settings_Distributional.htm similarity index 94% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Distributional.htm rename to EuromodHelp/InDepthHelpMaker/Settings_Distributional.htm index aad5fa8..5b8dadd 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Distributional.htm +++ b/EuromodHelp/InDepthHelpMaker/Settings_Distributional.htm @@ -62,7 +62,8 @@

                    Changing population breakdown

                    - For further description and examples see Distributional Tables. + There are five default breakdowns: Disposable_Income_Deciles, Standard_Labour_Categories, Standard_HH_Categories, Standard_Gender_Categories, Standard_Age_Categories. + For more details on the default breakdowns see the Default Breakdowns page.

                    Specifying Variables/Formulas for which to generate Tables

                    diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Fiscal.htm b/EuromodHelp/InDepthHelpMaker/Settings_Fiscal.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Fiscal.htm rename to EuromodHelp/InDepthHelpMaker/Settings_Fiscal.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_InequalityPoverty.htm b/EuromodHelp/InDepthHelpMaker/Settings_InequalityPoverty.htm similarity index 85% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_InequalityPoverty.htm rename to EuromodHelp/InDepthHelpMaker/Settings_InequalityPoverty.htm index 15e3e7f..e98ac8c 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_InequalityPoverty.htm +++ b/EuromodHelp/InDepthHelpMaker/Settings_InequalityPoverty.htm @@ -51,13 +51,19 @@

                    Changing the poverty line

                    See Tables 3.5. AROP rates by type and/or 3.6. AROP gap by type.

                    -

                    Changing the list of household types

                    +

                    Changing the Breakdowns

                    The buttons alongside the Breakdown-list allow for adding, removing and ordering breakdown specifications.
                    Defining more than one breakdown specification multiplies the number of instances of the respective Table.
                    - Thus, if the list specifies two breakdown specifications, for example for the default variable (Standard_HH_Categories) + Thus, if the list specifies two breakdown specifications, for example for the default breakdown Standard_HH_Categories and for a user-defined household breakdown variable, the tool will generate two instances for each of the Tables 3.5. and 3.6.: one showing AROP rates/gaps for Standard_HH_Categories and the other showing AROP rates/gaps for the user-defined variable.
                    + There are four default breakdowns: Standard_Labour_Categories,Standard_HH_Categories,Standard_Gender_Categories,Standard_Age_Categories. + For more details on the default breakdowns see the Default Breakdowns page. +

                    + +

                    + The user can remove the default breakdowns and/or add as many new ones they want. To add back a default breakdown, just use its name instead of a variable. The order of appearance of the generated Tables in the Inequality and poverty Page will correspond to the order in the Breakdown-list.

                    diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Main.htm b/EuromodHelp/InDepthHelpMaker/Settings_Main.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Settings_Main.htm rename to EuromodHelp/InDepthHelpMaker/Settings_Main.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables.htm b/EuromodHelp/InDepthHelpMaker/Tables.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables.htm rename to EuromodHelp/InDepthHelpMaker/Tables.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional.htm similarity index 66% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional.htm index d403f9b..469002e 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional.htm +++ b/EuromodHelp/InDepthHelpMaker/Tables_Distributional.htm @@ -41,6 +41,20 @@

                    Breakdown

                  + +

                  Note that the breakdown always refers to variables of the baseline. + There are five default breakdowns: Disposable_Income_Deciles, Standard_Labour_Categories, Standard_HH_Categories, Standard_Gender_Categories, Standard_Age_Categories. + For more details on the default breakdowns see the Default Breakdowns page.

                  Also note that, if there are no units taking a certain value of a variable, no row is displayed for this value. diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_21.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_21.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_21.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_21.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_22.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_22.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_22.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_22.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_23.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_23.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_23.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_23.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_24.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_24.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_24.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_24.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_25.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_25.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_25.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_25.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_26.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_26.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_26.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_26.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_278.htm b/EuromodHelp/InDepthHelpMaker/Tables_Distributional_278.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Distributional_278.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Distributional_278.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal.htm b/EuromodHelp/InDepthHelpMaker/Tables_Fiscal.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Fiscal.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_11.htm b/EuromodHelp/InDepthHelpMaker/Tables_Fiscal_11.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_11.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Fiscal_11.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_12.htm b/EuromodHelp/InDepthHelpMaker/Tables_Fiscal_12.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_12.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Fiscal_12.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_13.htm b/EuromodHelp/InDepthHelpMaker/Tables_Fiscal_13.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_13.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Fiscal_13.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_14.htm b/EuromodHelp/InDepthHelpMaker/Tables_Fiscal_14.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_Fiscal_14.htm rename to EuromodHelp/InDepthHelpMaker/Tables_Fiscal_14.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty.htm similarity index 85% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty.htm index 9ef8bfb..54c2939 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty.htm +++ b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty.htm @@ -56,21 +56,11 @@

                  Household type breakdown
                  Note that the variable must not be monetary, because monetary variables are summed over household members.

                  - By default a special template generated variable, Standard_HH_Categories, - is used for the breakdown. This variable splits households into the following groups: -

                    -
                  • One adult <65, no children
                  • -
                  • One adult ≥65, no children
                  • -
                  • One adult with children
                  • -
                  • Two adults, <65, no children
                  • -
                  • Two adults, at least one ≥65, no children
                  • -
                  • Two adults with one child
                  • -
                  • Two adults with two children
                  • -
                  • Two adults with three or more children
                  • -
                  • Three or more adults, no children
                  • -
                  • Three or more adults with children
                  • -
                  • No adults (only persons <18)
                  • -
                  + By default there are four breakdowns: Standard_Labour_Categories,Standard_HH_Categories,Standard_Gender_Categories,Standard_Age_Categories. + For more details on the default breakdowns see the Default Breakdowns page. +

                  +

                  + The user can remove the default breakdowns and/or add as many new ones they want. To add back a default breakdown, just use its name instead of a variable.

                  Income definitions
                  diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_31.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_31.htm similarity index 66% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_31.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_31.htm index 1523b4c..10bfccb 100644 --- a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_31.htm +++ b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_31.htm @@ -14,20 +14,23 @@

                  3.1. Inequality

                  Description

                  The Table shows the following indices: -

                    +
                    1. Gini coefficients for a list of income definitions
                    2. -
                    3. Redistribution index (original income / disposable income)
                    4. -
                    5. Social welfare index (of mean equivalised disposable income)
                    6. +
                    7. Redistribution index: Gini of the first component of the list(default: original income) minus Gini of the last component of the list (default: disposable income)
                    8. +
                    9. Social welfare index computed with the last component in the list (default: equivalised disposable income)
                    10. Income quantile share ratio
                    11. Inter-decile ratio
                    12. Atkinson inequality index
                    13. Mean log deviation
                    - Note that (a), (b) and (c) refer to incomes as defined by the income definitions list (see arguments), - whereas (d), (e), (f) and (g) refer to disposable income as defined by the income list ils_dispy - (and are thus consistent with Table 3.5. and 3.6.).

                    - Note also that all the indicators are calculated within each scenario, with no connection to the other scenarios. This means, for example, that the income quantiles of (d) are computed independently for each scenario and do not necessarily include the same observations as the baseline or other reform scenarios.

                    - By default ils_dispy and the respective definition in the list coincide. + Note that (1), (2) and (3) refer to incomes as defined by the income definitions list (see arguments), + whereas (4), (5), (6) and (7) refer to the last component of the list (default: disposable income, as defined by the income list ils_dispy, + and are thus consistent with Table 3.5. and 3.6.).

                    + Note also that negative incomes are recoded to zeros for the calculations of (1), (2) and (3), to keep consistency with the Statistics Presenter.

                    + Note finally that all the indicators are calculated within each scenario, with no connection to the other scenarios. This means, for example, + that the income quantiles of (4) are computed independently for each scenario and do not necessarily include the same observations as the + baseline or other reform scenarios.

                    +

                    diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_32.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_32.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_32.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_32.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_33.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_33.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_33.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_33.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_34.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_34.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_34.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_34.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_35.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_35.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_35.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_35.htm diff --git a/EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_36.htm b/EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_36.htm similarity index 100% rename from EM_Plugins/InDepthAnalysis/InDepthHelpMaker/Tables_InequalityPoverty_36.htm rename to EuromodHelp/InDepthHelpMaker/Tables_InequalityPoverty_36.htm diff --git a/EM_Help/HelpFiles/files/style_orig.css b/EuromodHelp/InDepthHelpMaker/style.css similarity index 98% rename from EM_Help/HelpFiles/files/style_orig.css rename to EuromodHelp/InDepthHelpMaker/style.css index 987d9e6..2c10b02 100644 --- a/EM_Help/HelpFiles/files/style_orig.css +++ b/EuromodHelp/InDepthHelpMaker/style.css @@ -4,6 +4,11 @@ body, p, div, span, td, tr, th, li, a, h1, h2, h3, h4, h5, h6 font-size: 10pt; } +.code +{ + font-family: "Courier New"; +} + p, div, span, td, tr, th, li, a, h1, h2, h3, h4, h5, h6 { margin-top: 0cm; diff --git a/Notice.txt b/Notice.txt index 5dd7b6c..919ab5b 100644 --- a/Notice.txt +++ b/Notice.txt @@ -1,4 +1,4 @@ -EUROMOD version 3.4.10 +EUROMOD version 3.6.2 European Union, Institute for Social and Economic Research, University of Essex diff --git a/Supporting Material/EM Templates/UserSelectable/EUROMOD_1default.xml b/Supporting Material/EM Templates/UserSelectable/EUROMOD_1default.xml index bb62495..7924a23 100644 --- a/Supporting Material/EM Templates/UserSelectable/EUROMOD_1default.xml +++ b/Supporting Material/EM Templates/UserSelectable/EUROMOD_1default.xml @@ -18,15 +18,15 @@ concepts:

                    Market/Original incomes -are the sum of income from employment and self-employment plus income from +are the sum of (gross) income from employment and self-employment plus income from other sources. Other sources include income from investment, property, private pensions, private transfers, children younger than 16, minus private transfers paid to other households. See income list ils_origy in the country models.

                    Disposable incomes are -the sum of market incomes and benefits (incl. pensions) minus taxes and social +the sum of market incomes and benefits (incl. pensions) minus direct taxes and social insurance contributions. See income list ils_dispy in the country models. -Equivalised disposable income is the total +Equivalised disposable income in the next row is the total disposable household income divided by the modified OECD scale to take differences in household composition into account. The modified OECD scale attributes a weight of 1 to the head of the household, a weight of 0.5 to @@ -51,7 +51,7 @@ gap is the difference between the poverty line and the median income of people at-risk-of poverty divided by the poverty line. The median income of people at-risk-of poverty is based on equivalised disposable income.

                    -

                    NOTE: negative equivalised +

                    NOTE: negative disposable household incomes are recoded to 0 for all poverty related results.

                    Inequality @@ -66,29 +66,9 @@ referred to as the income quintile share ratio – is the ratio of the total income received by the 20% of the population with the highest income to that received by the bottom 20%.

                    -

                    NOTE: negative incomes are +

                    NOTE: negative household incomes are recoded to 0 for results on Gini and S80/20 indicators.

                    - -

                    Definition -of age-groups:

                    - -

                    Sub-population groups are defined as follows:

                    - -

                    ·    Children are persons -younger than 18

                    - -

                    ·    Working Age are -persons aged 18 up to the age of 64

                    - -

                    ·    Someone is economically -active if he/she has income from employment or self-employment

                    - -

                    ·    Elderly are persons -aged 65 or older

                    ]]> +]]> Default @@ -104,6 +84,14 @@ aged 65 or older

                    ]]> idperson idperson + + dgn + dgn + + + les + les + age dag @@ -177,58 +165,169 @@ aged 65 or older

                    ]]> ilsSicCt ils_sicct - 0 ilsSicOt ils_sicot - 0 ilsB1Bun ils_b1_bun - 0 ilsB2BfaEd ils_b2_bfaed - 0 ilsB2BsaHo ils_b2_bsaho - 0 ilsB2PenHl ils_b2_penhl - 0 - + ilSF il_sf - 0 + true FilterPerson + + true FilterChildren + true FilterElderly = 65]]> + true + FilterElderlyFemale + = 65 && DATA_VAR[@dgn] == 0]]> + + + true + FilterElderlyMale + = 65 && DATA_VAR[@dgn] == 1]]> + + + true FilterWorkingAge = 18 && DATA_VAR[@age] < 65]]> + + true + FilterWorkingAgeFemale + = 18 && DATA_VAR[@age] < 65 && DATA_VAR[@dgn] == 0]]> + + + true + FilterWorkingAgeMale + = 18 && DATA_VAR[@age] < 65 && DATA_VAR[@dgn] == 1]]> + + + + true + FilterMale + 0]]> + + + true + FilterFemale + + + + + true + Filter0_14 + = 0 && DATA_VAR[@age] <= 14]]> + + + true + Filter15_24 + = 15 && DATA_VAR[@age] <= 24]]> + + + true + Filter25_49 + = 25 && DATA_VAR[@age] <= 49]]> + + + true + Filter50_64 + = 50 && DATA_VAR[@age] <= 64]]> + + + true + Filter65_79 + = 65 && DATA_VAR[@age] <= 79]]> + + + true + Filter80plus + = 80]]> + + + + true + FilterStatusPreschool + + + + true + FilterStatusFarmer + + + + true + FilterStatusSelfEmployed + + + + true + FilterStatusEmployee + + + + true + FilterStatusPensioner + + + + true + FilterStatusUnemployed + + + + true + FilterStatusStudent + + + + true + FilterStatusInactive + + + + true + FilterStatusDisabled + + + + true + FilterStatusOther + + FilterWorkingAgeActive = 18 && DATA_VAR[@age] < 65 && (DATA_VAR[@yem] + DATA_VAR[@yse]) > 0]]> @@ -244,238 +343,527 @@ aged 65 or older

                    ]]> CreateFlag - FilterChildren + FilterWorkingAgeActive - FilterChildren + FilterWorkingAgeActive + CreateFlag - FilterElderly + FilterStatusPreschool - FilterElderly + FilterStatusPreschool CreateFlag - FilterWorkingAge + FilterStatusFarmer - FilterWorkingAge + FilterStatusFarmer CreateFlag - FilterWorkingAgeActive + FilterStatusSelfEmployed - FilterWorkingAgeActive + FilterStatusSelfEmployed - CreateOECDScale - OECDscale + CreateFlag + FilterStatusEmployee + + FilterStatusEmployee + - CreateEquivalized - eqDispy - - - ilsDispy - - - EquivalenceScale - OECDscale - - + CreateFlag + FilterStatusPensioner + + FilterStatusPensioner + - CreateArithmetic - OtherMarketIncome - + CreateFlag + FilterStatusUnemployed + + FilterStatusUnemployed + - CreateArithmetic - Sic - + CreateFlag + FilterStatusStudent + + FilterStatusStudent + - CreateArithmetic - GovRevenue - + CreateFlag + FilterStatusInactive + + FilterStatusInactive + - CreateDeciles - deciles_eqDispy - - - IncomeVar - eqDispy - - - GroupingVar - idhh - - + CreateFlag + FilterStatusDisabled + + FilterStatusDisabled + - CalculateArithmetic - - povLine + CreateFlag + FilterStatusOther + + FilterStatusOther + - CalculatePovertyGap - povGap - - - IncomeVar - eqDispy - - - PovertyLine - povLine - - + CalculateSumWeighted + + totalPreschool + + + CalculateSumWeighted + + totalFarmer + + + CalculateSumWeighted + + totalSelfEmployed + + + CalculateSumWeighted + + totalEmployee + + + CalculateSumWeighted + + totalPensioner + + + CalculateSumWeighted + + totalUnemployed + + + CalculateSumWeighted + + totalStudent + + + CalculateSumWeighted + + totalInactive + + + CalculateSumWeighted + + totalDisabled + + CalculateSumWeighted + + totalOther + + CreateFlag - IsPoor + Filter0_14 - FilterPoor - + Filter0_14 - CreateArithmetic - incomeAT - + CreateFlag + Filter15_24 + + Filter15_24 + - CreateArithmetic - incomeATPP - + CreateFlag + Filter25_49 + + Filter25_49 + - CreateEquivalized - eqIncomeAT + CreateFlag + Filter50_64 + + Filter50_64 + + + + CreateFlag + Filter65_79 + + Filter65_79 + + + + CreateFlag + Filter80plus + + Filter80plus + + + + CalculateSumWeighted + + total0_14 + + + CalculateSumWeighted + + total15_24 + + + CalculateSumWeighted + + total25_49 + + + CalculateSumWeighted + + total50_64 + + + CalculateSumWeighted + + total65_79 + + + CalculateSumWeighted + + total80plus + + + + CreateFlag + FilterChildren + + FilterChildren + + + + CreateFlag + FilterElderly + + FilterElderly + + + + CreateFlag + FilterElderlyFemale + + FilterElderlyFemale + + + + CreateFlag + FilterElderlyMale + + FilterElderlyMale + + + + CreateFlag + FilterWorkingAge + + FilterWorkingAge + + + + CreateFlag + FilterWorkingAgeFemale + + FilterWorkingAgeFemale + + + + CreateFlag + FilterWorkingAgeMale + + FilterWorkingAgeMale + + + + CreateFlag + FilterFemale + + FilterFemale + + + + CreateFlag + FilterMale + + FilterMale + + + + CreateGroupValue + Household + NumberOfAdults - incomeAT + SumVar + FilterWorkingAge - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqIncomeATPP + CreateGroupValue + Household + NumberOfAdultFemales - incomeATPP + SumVar + FilterWorkingAgeFemale - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqOrigy + CreateGroupValue + Household + NumberOfAdultMales - ilsOrigy + SumVar + FilterWorkingAgeMale - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqDispy + CreateGroupValue + Household + NumberOfFemales - ilsDispy + SumVar + FilterFemale - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqOrigy + CreateGroupValue + Household + NumberOfMales - ilsOrigy + SumVar + FilterMale - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqEarns + CreateGroupValue + Household + NumberOfChildren - ilsEarns + SumVar + FilterChildren - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqBen + CreateGroupValue + Household + NumberOfElderly - ilsBen + SumVar + FilterElderly - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqTax + CreateGroupValue + Household + NumberOfElderlyFemales - ilsTax + SumVar + FilterElderlyFemale - EquivalenceScale - OECDscale + CopyToIndividuals + True - CreateEquivalized - eqSic + CreateGroupValue + Household + NumberOfElderlyMales - Sic + SumVar + FilterElderlyMale - EquivalenceScale - OECDscale + CopyToIndividuals + True + + CreateFlag + OneAdultNoChildren + + + + + + CreateFlag + OneAdultFemaleNoChildren + + + + + + CreateFlag + OneAdultMaleNoChildren + + + + + + CreateFlag + OneElderlyNoChildren + + + + + + CreateFlag + OneElderlyFemaleNoChildren + + + + + + CreateFlag + OneElderlyMaleNoChildren + + + + + + CreateFlag + OneAdultOrElderlyWithChildren + + 0) || (DATA_VAR[@NumberOfAdults] + DATA_VAR[@NumberOfElderly] == 0 && DATA_VAR[@NumberOfChildren] > 1)]]> + + + + CreateFlag + OneAdultOrElderlyFemaleWithChildren + + 0]]> + + + + CreateFlag + OneAdultOrElderlyMaleWithChildren + + 0]]> + + + + CreateFlag + TwoAdultsNoChildren + + + + + + CreateFlag + TwoElderlyNoChildren + + 0 && DATA_VAR[@NumberOfChildren] == 0]]> + + + + CreateFlag + TwoAdultsOrElderlyOneChild + + + + + + CreateFlag + TwoAdultsOrElderlyTwoChildren + + + + + + CreateFlag + TwoAdultsOrElderlyThreePlusChildren + + = 3]]> + + + + CreateFlag + ThreePlusAdultsOrElderlyNoChildren + + = 3 && DATA_VAR[@NumberOfChildren] == 0) || (DATA_VAR[@NumberOfAdults] + DATA_VAR[@NumberOfElderly] == 0 && DATA_VAR[@NumberOfChildren] >= 3)]]> + + + + CreateFlag + ThreePlusAdultsOrElderlyWithChildren + + = 3 && DATA_VAR[@NumberOfChildren] > 0]]> + + + + + CreateOECDScale + OECDscale + CreateEquivalized - eqBenSim + eqDispy - ilsBenSim + ilsDispy EquivalenceScale @@ -484,86 +872,282 @@ aged 65 or older

                    ]]>
                    - CreateEquivalized - eqTaxSim + CreateArithmetic + OtherMarketIncome + + + + CreateArithmetic + Sic + + + + CreateArithmetic + GovRevenue + + + + CreateDeciles + deciles_eqDispy - ilsTaxSim + IncomeVar + eqDispy - EquivalenceScale - OECDscale + GroupingVar + idhh - CalculateSumWeighted - - totalDispy + CalculateArithmetic + + povLine - CalculateSumWeighted - - totalOrigy + CalculatePovertyGap + povGap + + + IncomeVar + eqDispy + + + PovertyLine + povLine + + - CalculateSumWeighted - - totalEarns + CreateFlag + IsPoor + + FilterPoor + + - CalculateSumWeighted - - totalBen + CreateArithmetic + incomeAT + - CalculateSumWeighted - - totalTax + CreateArithmetic + incomeATPP + - CalculateSumWeighted - - totalSic + CreateEquivalized + eqIncomeAT + + + incomeAT + + + EquivalenceScale + OECDscale + + - CalculateSumWeighted - - totalPerson + CreateEquivalized + eqIncomeATPP + + + incomeATPP + + + EquivalenceScale + OECDscale + + - CalculateSumWeighted - - totalChildren + CreateEquivalized + eqOrigy + + + ilsOrigy + + + EquivalenceScale + OECDscale + + - CalculateSumWeighted - - totalWorkingAge + CreateEquivalized + eqDispy + + + ilsDispy + + + EquivalenceScale + OECDscale + + - CalculateSumWeighted - - totalElderly + CreateEquivalized + eqOrigy + + + ilsOrigy + + + EquivalenceScale + OECDscale + + - CalculateSumWeighted - - totalWorkingAgeActive - - - CreateArithmetic - ilsBenilSF - - - -
                    - f - + CreateEquivalized + eqEarns + + + ilsEarns + + + EquivalenceScale + OECDscale + + + + + CreateEquivalized + eqBen + + + ilsBen + + + EquivalenceScale + OECDscale + + + + + CreateEquivalized + eqTax + + + ilsTax + + + EquivalenceScale + OECDscale + + + + + CreateEquivalized + eqSic + + + Sic + + + EquivalenceScale + OECDscale + + + + + CreateEquivalized + eqBenSim + + + ilsBenSim + + + EquivalenceScale + OECDscale + + + + + CreateEquivalized + eqTaxSim + + + ilsTaxSim + + + EquivalenceScale + OECDscale + + + + + CalculateSumWeighted + + totalDispy + + + CalculateSumWeighted + + totalOrigy + + + CalculateSumWeighted + + totalEarns + + + CalculateSumWeighted + + totalBen + + + CalculateSumWeighted + + totalTax + + + CalculateSumWeighted + + totalSic + + + CalculateSumWeighted + + totalPerson + + + CalculateSumWeighted + + totalChildren + + + CalculateSumWeighted + + totalWorkingAge + + + CalculateSumWeighted + + totalElderly + + + CalculateSumWeighted + + totalWorkingAgeActive + + + CreateArithmetic + ilsBenilSF + + + + + + FiscalOverview <![CDATA[Market Incomes and Government Revenue && Expenditure]]> Yearly, mill., currency as defined in EM output - + The table shows total annual amounts of the specified @@ -595,7 +1179,7 @@ insurance contributions” in all EM versions released before 2018.

                  1. Social assistance and housing benefits: ils_b2_bsaho
                  2. Pensions, health and disability benefits: ils_b2_penhl
                - As well as the sum of: +
                As well as the sum of:
                • Means-tested non-pension benefits: ils_benmt
                • Non-means-tested non-pension benefits: ils_bennt
                • @@ -620,266 +1204,2058 @@ insurance contributions” in all EM versions released before 2018.

                  - Total market incomes - true + Total market incomes + true + + + + SumVar + ilsOrigy + + + + true + + + ... income from (self) employment + + + + SumVar + ilsEarns + + + + + + ... other sources + + + + SumVar + OtherMarketIncome + + + + + + Government revenue through taxes and social insurance contributions + true + true + true + + + + SumVar + GovRevenue + + + + + + ... direct taxes + + + + SumVar + ilsTax + + + + + + ... employee social insurance contributions + + + + SumVar + ilsSicEe + + + + + + ... self-employed social insurance contributions + + + + SumVar + ilsSicSe + + + + + + ... other social insurance contributions + + + + SumVar + ilsSicOt + + + + + + ... employer social insurance contributions (not part of disposable income) + + + + SumVar + ilsSicEr + + + + + + Credited social insurance contributions (not part of disposable income) + true + true + + + + SumVar + ilsSicCt + + + + + + Government expenditure on social transfers + true + true + true + + + + SumVar + ilsBenilSF + + + + + + by target group + + Empty + + + + ... unemployment benefits + + + + SumVar + ilsB1Bun + + + + + + ... family and education benefits + + + + SumVar + ilsB2BfaEd + + + + + + ... social assistance and housing benefits + + + + SumVar + ilsB2BsaHo + + + + + + ... pensions, health and disability benefits + + + + SumVar + ilsB2PenHl + + + + + + ... firms + + + + SumVar + ilSF + + + + + + by benefit design + + Empty + + + + ... means-tested non-pension benefits + + + + SumVar + ilsBenMt + + + + + + ... non-means-tested non-pension benefits + + + + SumVar + ilsBenNt + + + + + + ... pensions + + + + SumVar + ilsPen + + + + + + ... firms subsidies + + + + SumVar + ilSF + + + + + + + + + + Distributional + 2. Distributional + + + + 2.1.a Mean household income by decile groups and income components + + The table shows the mean household income disaggregated by decile groups +and income components. The last two columns show to what extent benefits +and taxes are simulated in Euromod (rather than taken from the +inputdata), expressed as the share of simulated benefits/taxes of all +benefits/taxes. The last two rows show the mean income of the total +population (All) and the population at-risk-of-poverty (Poor).

                  + +

                  While the calculation of the +decile groups is based on equivalised income, the reported mean incomes refer +to non-equivalised household results.

                  +]]> +
                  + + CalculateWeightedAverage + + Household + + #,0.00 + + + Income]]> + Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. + + + + AverageVar + ilsDispy + + + + + + Income]]> + Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. + + + + AverageVar + ilsOrigy + + + + + + earnings]]> + + + + AverageVar + ilsEarns + + + + + + Pub. Pen.]]> + Family, education, pensions, disability, health, social assistance, housing and unemployment benefits. + + + + AverageVar + ilsBen + + + + + + Taxes + + + + AverageVar + ilsTax + + + + + + Contrib.]]> + + + + AverageVar + Sic + + + + + + Benefits]]> + true + + CalculateSumWeighted + + + P2 + + + Taxes]]> + + CalculateSumWeighted + + + P2 + + + + + Decile + deciles_eqDispy + + + All + true + true + + + Poor + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + +
                  + + 2.1.b Mean household income by household type and income components + + The table shows the mean household income disaggregated by household type +and income components. The last two columns show to what extent benefits +and taxes are simulated in Euromod (rather than taken from the +inputdata), expressed as the share of simulated benefits/taxes of all +benefits/taxes. The last row shows the mean income of the total +population (All).

                  + +

                  The calculation of the mean incomes is based on +non-equivalised household results.

                  +]]> +
                  + + CalculateWeightedAverage + + Household + + #,0.00 + + + Income]]> + Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. + + + + AverageVar + ilsDispy + + + + + + Income]]> + Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. + + + + AverageVar + ilsOrigy + + + + + + earnings]]> + + + + AverageVar + ilsEarns + + + + + + Pub. Pen.]]> + Family, education, pensions, disability, health, social assistance, housing and unemployment benefits. + + + + AverageVar + ilsBen + + + + + + Taxes + + + + AverageVar + ilsTax + + + + + + Contrib.]]> + + + + AverageVar + Sic + + + + + + Benefits]]> + true + + CalculateSumWeighted + + + P2 + + + Taxes]]> + + CalculateSumWeighted + + + P2 + + + + + OneAdultNoChildren + <![CDATA[ One adult < 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ One adult >= 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ One adult with children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Two adults < 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Two adults, at least one >= 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Two adults with one child]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Two adults with two children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Two adults with three or more children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Three or more adults, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ Three or more adults, with children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + All + true + true + + +
                  + + 2.2.a Mean equivalised income by decile groups and income components + + The table shows the mean (individual) equivalised income disaggregated by decile groups +and income components. The last two columns show to what +extent benefits and taxes are simulated in Euromod (rather than +taken from the inputdata), expressed as the share of simulated benefits/taxes +of all benefits/taxes. The last two rows show the mean income of the +total population (All) and the population at-risk-of-poverty (Poor).

                  + +

                  The calculation of the decile +groups and the reported mean incomes is based on equivalised income.

                  +]]> +
                  + + CalculateWeightedAverage + + + #,0.00 + + + Disposable Income + + + + AverageVar + eqDispy + + + + + + Original Income + + + + AverageVar + eqOrigy + + + + + + ...of which earnings + + + + AverageVar + eqEarns + + + + + + incl. pub. Pen.]]> + + + + AverageVar + eqBen + + + + + + Taxes + + + + AverageVar + eqTax + + + + + + Ins. Contrib.]]> + + + + AverageVar + eqSic + + + + + + Simulated Benefits + true + + CalculateSumWeighted + + + P2 + + + Simulated Taxes + + CalculateSumWeighted + + + P2 + + + + + Decile + deciles_eqDispy + + + All + true + true + + + Poor + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + +
                  + + 2.2.b Mean equivalised income by household type and income components + + The table shows the mean (individual) equivalised income disaggregated by household type and +income components. The last two columns show to what +extent benefits and taxes are simulated in Euromod (rather than +taken from the inputdata), expressed as the share of simulated benefits/taxes +of all benefits/taxes. The last row shows the mean income of the +total population (All).

                  + +

                  The calculation of the reported mean incomes is +based on equivalised income.

                  +]]> +
                  + + CalculateWeightedAverage + + + #,0.00 + + + Disposable Income + + + + AverageVar + eqDispy + + + + + + Original Income + + + + AverageVar + eqOrigy + + + + + + ...of which earnings + + + + AverageVar + eqEarns + + + + + + incl. pub. Pen.]]> + + + + AverageVar + eqBen + + + + + + Taxes + + + + AverageVar + eqTax + + + + + + Ins. Contrib.]]> + + + + AverageVar + eqSic + + + + + + Simulated Benefits + true + + CalculateSumWeighted + + + P2 + + + Simulated Taxes + + CalculateSumWeighted + + + P2 + + + + + OneAdultNoChildren + <![CDATA[ One adult < 65, no children]]> + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + + + 0]]> + + + + + <![CDATA[ One adult >= 65, no children]]> + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + + + 0]]> + + + + + <![CDATA[ One adult with children]]> + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + + + 0]]> + + + + + <![CDATA[ Two adults < 65, no children]]> + + + 0]]> + + + + + <![CDATA[ Two adults, at least one >= 65, no children]]> + + + 0]]> + + + + + <![CDATA[ Two adults with one child]]> + + + 0]]> + + + + + <![CDATA[ Two adults with two children]]> + + + 0]]> + + + + + <![CDATA[ Two adults with three or more children]]> + + + 0]]> + + + + + <![CDATA[ Three or more adults, no children]]> + + + 0]]> + + + + + <![CDATA[ Three or more adults, with children]]> + + + 0]]> + + + + + All + true + true + + +
                  + + 2.2.c Mean equivalised income by labour status and income components + + The table shows the mean (individual) equivalised income disaggregated by labour status +and income components. The last two columns show to what +extent benefits and taxes are simulated in Euromod (rather than +taken from the inputdata), expressed as the share of simulated benefits/taxes +of all benefits/taxes. The last row shows the mean income of the +total population (All).

                  + +

                  The calculation of the reported mean incomes is +based on equivalised income.

                  +]]> +
                  + + CalculateWeightedAverage + + + #,0.00 + + + Disposable Income + + + + AverageVar + eqDispy + + + + + + Original Income + + + + AverageVar + eqOrigy + + + + + + ...of which earnings + + + + AverageVar + eqEarns + + + + + + incl. pub. Pen.]]> + + + + AverageVar + eqBen + + + + + + Taxes + + + + AverageVar + eqTax + + + + + + Ins. Contrib.]]> + + + + AverageVar + eqSic + + + + + + Simulated Benefits + true + + CalculateSumWeighted + + + P2 + + + Simulated Taxes + + CalculateSumWeighted + + + P2 + + + + + + + + FilterStatusPreschool + + + + + + + + FilterStatusFarmer + + + + + + + + FilterStatusSelfEmployed + + + + + + + + FilterStatusEmployee + + + + + + + + FilterStatusPensioner + + + + + + + + FilterStatusUnemployed + + + + + + + + FilterStatusStudent + + + + + + + + FilterStatusInactive + + + + + + + + FilterStatusDisabled + + + + + + + + FilterStatusOther + + + + + All + true + true + + +
                  + + 2.2.d Mean equivalised income by gender and income components + + The table shows the mean (individual) equivalised income disaggregated by gender +and income components. The last two columns show to what +extent benefits and taxes are simulated in Euromod (rather than +taken from the inputdata), expressed as the share of simulated benefits/taxes +of all benefits/taxes. The last two rows show the mean income of the +total population (All) and the population at-risk-of-poverty (Poor).

                  + +

                  The calculation of the reported mean incomes is +based on equivalised income.

                  +]]> +
                  + + CalculateWeightedAverage + + + #,0.00 + + + Disposable Income + + + + AverageVar + eqDispy + + + + + + Original Income + + + + AverageVar + eqOrigy + + + + + + ...of which earnings + + + + AverageVar + eqEarns + + + + + + incl. pub. Pen.]]> + + + + AverageVar + eqBen + + + + + + Taxes + + + + AverageVar + eqTax + + + + + + Ins. Contrib.]]> + + + + AverageVar + eqSic + + + + + + Simulated Benefits + true + + CalculateSumWeighted + + + P2 + + + Simulated Taxes + + CalculateSumWeighted + + + P2 + + + + + + + + FilterFemale + + + + + + + + FilterMale + + + + + All + true + true + + +
                  + + 2.2.e Mean equivalised income by age groups and income components + + The table shows the mean (individual) equivalised income disaggregated by age groups +and income components. The last two columns show to what +extent benefits and taxes are simulated in Euromod (rather than +taken from the inputdata), expressed as the share of simulated benefits/taxes +of all benefits/taxes. The last two rows show the mean income of the +total population (All) and the population at-risk-of-poverty (Poor).

                  + +

                  The calculation of the reported mean incomes is +based on equivalised income.

                  +]]> +
                  + + CalculateWeightedAverage + + + #,0.00 + + + Disposable Income + + + + AverageVar + eqDispy + + + + + + Original Income + + + + AverageVar + eqOrigy + + + + + + ...of which earnings + + + + AverageVar + eqEarns + + + + + + incl. pub. Pen.]]> + + + + AverageVar + eqBen + + + + + + Taxes + + + + AverageVar + eqTax + + + + + + Ins. Contrib.]]> + + + + AverageVar + eqSic + + + + + + Simulated Benefits + true + + CalculateSumWeighted + + + P2 + + + Simulated Taxes + + CalculateSumWeighted + + + P2 + + + + + + + + Filter0_14 + + + + + + + + Filter15_24 + + + + + + + + Filter25_49 + + + + + + + + Filter50_64 + + + + + + + + Filter65_79 + + + + + + + + Filter80plus + + + + + All + true + true + + +
                  +
                  +
                  + + Poverty + + 3. Inequality and Poverty + + + 3.1 Basic Inequality Indices + + The table shows the Gini index and S80/20 indicator for +selected income concepts:

                  + +

                  ·         +The comparison of the original income with the original income +after taxes shows to what extent taxes contribute to redistribution.

                  + +

                  ·         +The comparison of the original income +plus public pensions after taxes with the original income after taxes shows the +role of public pensions for redistribution.

                  + +

                  ·         +The comparison of the original income with the disposable income +shows the extent of income redistribution performed by the tax-benefit system +as a whole (incl. social insurance contributions and benefits beyond public +pensions).

                  + +

                  The calculated indexes are +income-concept-specific. However, the definition of the top and bottom 20% is +always based on disposable income.

                  ]]> +
                  + + + Gini + Measures the distribution of income within a country where 0 means perfect income equality and 1 means perfect income inequality. + + CalculateGini + + + GroupingVar + idhh + + + + 0.0000 + + + S80/S20 + Ratio of total income received top quintile to that received by bottom quintile. + + CalculateS8020 + + + DecileVar + deciles_eqDispy + + + + 0.0000 + + + + + Original Income + Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. + + + + RecodeNegatives + true + + + GiniVar + eqOrigy + + + S8020Var + eqOrigy + + + + + + Original Income after Taxes/SIC + Original income – Taxes – Social Insurance Contributions. + + + + RecodeNegatives + true + + + GiniVar + eqIncomeAT + + + S8020Var + eqIncomeAT + + + + + + Original Income incl. Public Pensions after Taxes/SIC + Original income + Public Pensions – Taxes – Social Insurance Contributions. + + + + RecodeNegatives + true + + + GiniVar + eqIncomeATPP + + + S8020Var + eqIncomeATPP + + + + + + Disposable Income + Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. + + + + RecodeNegatives + true + + + GiniVar + eqDispy + + + S8020Var + eqDispy + + + + + +
                  + + 3.2.a Basic Poverty Indices + + The table shows the + poverty rate, the + poverty gap and the + poverty line for the whole population.

                  ]]> +
                  + + + Value + Equivalised disposable household income lower than 60% of the country specific median income. + + CalculatePopulationCount + + + + CountVar + IsPoor + + + + P2 + + + + + At-risk-of-poverty rate + Equivalised disposable household income lower than 60% of the country specific median income. + + + Median at-risk-of-poverty gap + Difference between the median equivalised disposable income of people at-risk-of-poverty and poverty line, as a percentage of poverty line. + + false + CalculateArithmetic + + + + + Poverty line (monthly) + 60% of the country specific median equivalised disposable household income. + + false + CalculateArithmetic + + + true + #,0.00 + + +
                  + + 3.2.b At-risk-of-poverty rates by household type + + The table shows the poverty risk disaggregated by household type.

                  ]]> +
                  + + + Rate + Equivalised disposable household income lower than 60% of the country specific median income. + + CalculatePopulationCount + + + + CountVar + IsPoor + + + + P2 + + + + + OneAdultNoChildren + <![CDATA[ One adult < 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ One adult >= 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Female adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + <![CDATA[ - Male adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsOrigy - - + + 0]]> + - true - ... income from (self) employment + <![CDATA[ One adult with children]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsEarns - - + + 0]]> + - ... other sources + <![CDATA[ - Female adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - OtherMarketIncome - - + + 0]]> + - Government revenue through taxes and social insurance contributions - true - true - true + <![CDATA[ - Male adult]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - GovRevenue - - + + 0]]> + - ... direct taxes + <![CDATA[ Two adults < 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsTax - - + + 0]]> + - ... employee social insurance contributions + <![CDATA[ Two adults, at least one >= 65, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsSicEe - - + + 0]]> + - ... self-employed social insurance contributions + <![CDATA[ Two adults with one child]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsSicSe - - + + 0]]> + - ... other social insurance contributions + <![CDATA[ Two adults with two children]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsSicOt - - + + 0]]> + - ... employer social insurance contributions (not part of disposable income) + <![CDATA[ Two adults with three or more children]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsSicEr - - + + 0]]> + - Credited social insurance contributions (not part of disposable income) - true - true + <![CDATA[ Three or more adults, no children]]> + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsSicCt - - + + 0]]> + - Government expenditure on social transfers - true + <![CDATA[ Three or more adults, with children]]> + Equivalised disposable household income lower than 60% of the country specific median income. + + + 0]]> + + + + + All true - true + true + + +
                  + + 3.2.c At-risk-of-poverty rates by labour status + + The table shows the poverty risk disaggregated by labour status.

                  ]]> +
                  + + + Poverty Risk + Equivalised disposable household income lower than 60% of the country specific median income. + CalculatePopulationCount + - SumVar - ilsBenilSF + CountVar + IsPoor + P2 + + + + + + Equivalised disposable household income lower than 60% of the country specific median income. + + + FilterStatusPreschool + + - by target group + + Equivalised disposable household income lower than 60% of the country specific median income. - Empty + + FilterStatusFarmer + - ... unemployment benefits + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsB1Bun - - + + FilterStatusSelfEmployed + - ... family and education benefits + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsB2BfaEd - - + + FilterStatusEmployee + - ... social assistance and housing benefits + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsB2BsaHo - - + + FilterStatusPensioner + - ... pensions, health and disability benefits + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsB2PenHl - - + + FilterStatusUnemployed + - - ... firms + + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilSF - - + + FilterStatusStudent + - by benefit design + + Equivalised disposable household income lower than 60% of the country specific median income. - Empty + + FilterStatusInactive + - ... means-tested non-pension benefits + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsBenMt - - + + FilterStatusDisabled + - ... non-means-tested non-pension benefits + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilsBenNt - - + + FilterStatusOther + - ... pensions + All + true + true + + +
                  + + 3.2.d At-risk-of-poverty rates bygender + + The table shows the poverty risk disaggregated by gender.

                  ]]> +
                  + + + Rate + Equivalised disposable household income lower than 60% of the country specific median income. + CalculatePopulationCount + - SumVar - ilsPen + CountVar + IsPoor + P2 + + + + + + Equivalised disposable household income lower than 60% of the country specific median income. + + + FilterFemale + + - ... firms subsidies + + Equivalised disposable household income lower than 60% of the country specific median income. - - - SumVar - ilSF - - + + FilterMale + + + All + true + true +
                  -
                  -
                  - - Poverty - - Basic Poverty Indices - - The table shows the poverty risk of the total population -and different sub-population groups as well as the poverty line and -the poverty gap.

                  ]]> -
                  - + 3.2.e At-risk-of-poverty rates by age groups + + The table shows the poverty risk disaggregated by age groups.

                  ]]> +
                  - Poverty Risk + Rate Equivalised disposable household income lower than 60% of the country specific median income. CalculatePopulationCount @@ -896,331 +3272,338 @@ the poverty gap.

                  ]]>
                  - Population + Equivalised disposable household income lower than 60% of the country specific median income. + + + Filter0_14 + + - Children + Equivalised disposable household income lower than 60% of the country specific median income. - FilterChildren + Filter15_24 - Working Age + Equivalised disposable household income lower than 60% of the country specific median income. - FilterWorkingAge + Filter25_49 - + Equivalised disposable household income lower than 60% of the country specific median income. - FilterWorkingAgeActive + Filter50_64 - Elderly + Equivalised disposable household income lower than 60% of the country specific median income. - FilterElderly + Filter65_79 - Poverty Line - 60% of the country specific median equivalised disposable household income. + + Equivalised disposable household income lower than 60% of the country specific median income. - false - CalculateArithmetic - + + Filter80plus + - true - #,0.00 - Poverty Gap - Difference between the median equivalised disposable income of people at-risk-of-poverty and poverty line, as a percentage of poverty line. - - false - CalculateArithmetic - - + All + true + true
                  - Inequality - Basic Inequality Indices - - - The table shows the Gini index and S80/20 indicator for -selected income concepts:

                  - -

                  ·         -The comparison of the original income with the original income -after taxes shows to what extent taxes contribute to redistribution.

                  - -

                  ·         -The comparison of the original income -plus public pensions after taxes with the original income after taxes shows the -role of public pensions for redistribution.

                  - -

                  ·         -The comparison of the original income with the disposable income -shows the extent of income redistribution performed by the tax-benefit system -as a whole (incl. social insurance contributions and benefits beyond public -pensions).

                  - -

                  The calculated indexes are -income-concept-specific. However, the definition of the top and bottom 20% is -always based on disposable income.

                  ]]> -
                  + DescriptiveStatistics + 4. Other statistics + + 4.1 Shares of Income and Income-Components + received/paid by each decile group + + The table shows the shares of unequivalised household income and each income +component received or paid by each income decile. It answers the +question of how much income is concentrated in each income decile and shows who +receives the highest share of income support and who pays the highest taxes and +social insurance contributions to the welfare state. The last row shows +how much income is concentrated at the population at-risk-of-poverty.

                  ]]> +
                  + + CalculateSumWeighted + + + P2 - Gini - Measures the distribution of income within a country where 0 means perfect income equality and 1 means perfect income inequality. + Disposable Income + Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. - CalculateGini - GroupingVar - idhh + VarDecSum + ilsDispy + + + VarTotSum + totalDispy - 0.0000 - S80/S20 - Ratio of total income received top quintile to that received by bottom quintile. + Original Income + Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. - CalculateS8020 - DecileVar - deciles_eqDispy + VarDecSum + ilsOrigy + + + VarTotSum + totalOrigy - 0.0000 - - - - Original Income - Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. + + Cur. Earned Inc.]]> - RecodeNegatives - true - - - GiniVar - eqOrigy + VarDecSum + ilsEarns - S8020Var - eqOrigy + VarTotSum + totalEarns - - - Original Income after Taxes/SIC - Original income – Taxes – Social Insurance Contributions. + + + incl. Pub. Pen.]]> + Family, education, pensions, disability, health, social assistance, housing and unemployment benefits. - RecodeNegatives - true - - - GiniVar - eqIncomeAT + VarDecSum + ilsBen - S8020Var - eqIncomeAT + VarTotSum + totalBen - - - Original Income incl. Public Pensions after Taxes/SIC - Original income + Public Pensions – Taxes – Social Insurance Contributions. + + + Taxes - RecodeNegatives - true - - - GiniVar - eqIncomeATPP + VarDecSum + ilsTax - S8020Var - eqIncomeATPP + VarTotSum + totalTax - - - Disposable Income - Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. + + + Ins. Contrib.]]> - RecodeNegatives - true - - - GiniVar - eqDispy + VarDecSum + Sic - S8020Var - eqDispy + VarTotSum + totalSic + + + + + Decile + deciles_eqDispy + + + Poor + Equivalised disposable household income lower than 60% of the country specific median income. + true + + + 0]]> + +
                  -
                  -
                  - - MeanIncome - Mean household income by decile groups and income components - - - The table shows the mean household income of decile groups disaggregated -by its income components. The last two columns show to what extent benefits -and taxes are simulated in Euromod (rather than taken from the -inputdata), expressed as the share of simulated benefits/taxes of all -benefits/taxes. The last two rows show the mean income of the total -population (All) and the population at-risk-of-poverty (Poor).

                  - -

                  While the calculation of the -decile groups is based on equivalised income, the reported mean incomes refer -to non-equivalised household results.

                  -]]> -
                  - + 4.2.a Household composition - Average Number of individuals by labour status + + The table gives background +information on the household composition by presenting the average household size of different decile groups +and the average number of individuals by labour status. The last +row gives the same information for the population at-risk-of-poverty.

                  ]]> +
                  + Household CalculateWeightedAverage - Household - #,0.00 + 0.00 - Income]]> - Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. + Total + + + + AverageVar + FilterPerson + + + + + + Pre-school + + + + AverageVar + FilterStatusPreschool + + + + + + Farmer AverageVar - ilsDispy + FilterStatusFarmer - Income]]> - Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. + self-employed]]> AverageVar - ilsOrigy + FilterStatusSelfEmployed - earnings]]> + Employee AverageVar - ilsEarns + FilterStatusEmployee - Pub. Pen.]]> - Family, education, pensions, disability, health, social assistance, housing and unemployment benefits. + Pensioner AverageVar - ilsBen + FilterStatusPensioner - Taxes + Unemployed AverageVar - ilsTax + FilterStatusUnemployed - Contrib.]]> + Student AverageVar - Sic + FilterStatusStudent - Benefits]]> - true + Inactive - CalculateSumWeighted - + + + AverageVar + FilterStatusInactive + + - P2 - Taxes]]> + Sick or Disabled - CalculateSumWeighted - + + + AverageVar + FilterStatusDisabled + + + + + + Other + + + + AverageVar + FilterStatusOther + + - P2 @@ -1244,115 +3627,98 @@ to non-equivalised household results.

                  -
                  -
                  - - MeanEqIncome - Mean equivalised income by decile groups and income components - - - The table shows the mean equivalised income of decile groups disaggregated by -its income components. The last two columns show to what -extent benefits and taxes are simulated in Euromod (rather than -taken from the inputdata), expressed as the share of simulated benefits/taxes -of all benefits/taxes. The last two rows show the mean income of the -total population (All) and the population at-risk-of-poverty (Poor).

                  - -

                  The calculation of the decile -groups and the reported mean incomes is based on equivalised income.

                  -]]> -
                  - + 4.2.b Household composition - Average Number of individuals by age groups + + The table gives background +information on the household composition by presenting the average household size of different decile groups +and the average number of individuals by age groups. The last +row gives the same information for the population at-risk-of-poverty.

                  ]]> +
                  + Household CalculateWeightedAverage - #,0.00 + 0.00 - Disposable Income + Total AverageVar - eqDispy + FilterPerson - Original Income + AverageVar - eqOrigy + Filter0_14 - ...of which earnings + AverageVar - eqEarns + Filter15_24 - incl. pub. Pen.]]> + AverageVar - eqBen + Filter25_49 - Taxes + AverageVar - eqTax + Filter50_64 - Ins. Contrib.]]> + AverageVar - eqSic + Filter65_79 - Simulated Benefits - true - - CalculateSumWeighted - - - P2 - - - Simulated Taxes + - CalculateSumWeighted - + + + AverageVar + Filter80plus + + - P2 @@ -1376,214 +3742,180 @@ groups and the reported mean incomes is based on equivalised income.

                  -
                  -
                  - - SharesIncome - Shares of Income and Income-Components - received/paid by each Decile Group - - - The table shows the shares of unequivalised household income and each income -component received or paid by each income decile. It answers the -question of how much income is concentrated in each income decile and shows who -receives the highest share of income support and who pays the highest taxes and -social insurance contributions to the welfare state. The last row shows -how much income is concentrated at the population at-risk-of-poverty.

                  ]]> -
                  - + 4.3.a Share of population groups in each decile, by labour status + + The table gives background +information on the share of individuals by labour status in +different decile groups.

                  ]]> +
                  CalculateSumWeighted - + P2 - Disposable Income - Original income + Benefits (incl. Public Pensions) – Taxes – Social Insurance Contributions. + Total VarDecSum - ilsDispy + FilterPerson VarTotSum - totalDispy + totalPerson - Original Income - Earnings from employment and self-employment plus other market incomes (from investment, property, private pensions, private transfers, children younger than 16) minus private transfers paid to other households. + Pre-school VarDecSum - ilsOrigy + FilterStatusPreschool VarTotSum - totalOrigy + totalPreschool - Cur. Earned Inc.]]> + Farmer VarDecSum - ilsEarns + FilterStatusFarmer VarTotSum - totalEarns + totalFarmer - incl. Pub. Pen.]]> - Family, education, pensions, disability, health, social assistance, housing and unemployment benefits. + self-employed]]> VarDecSum - ilsBen + FilterStatusSelfEmployed VarTotSum - totalBen + totalSelfEmployed - Taxes + Employee VarDecSum - ilsTax + FilterStatusEmployee VarTotSum - totalTax + totalEmployee - Ins. Contrib.]]> + Pensioner VarDecSum - Sic + FilterStatusPensioner VarTotSum - totalSic + totalPensioner - - - - Decile - deciles_eqDispy - - - Poor - Equivalised disposable household income lower than 60% of the country specific median income. - true - - - 0]]> - - - - -
                  -
                  -
                  - - HHComposition - Household composition - Average Number of... - - - The table gives background -information on the household composition by presenting the average household size of different decile groups -and the average number of children, working-age adults and elderlies. The last -row gives the same information for the population at-risk-of-poverty.

                  ]]> -
                  - - - - Household - CalculateWeightedAverage - - - 0.00 - - Total + Unemployed - AverageVar - FilterPerson + VarDecSum + FilterStatusUnemployed + + + VarTotSum + totalUnemployed - Children + Student - AverageVar - FilterChildren + VarDecSum + FilterStatusStudent + + + VarTotSum + totalStudent - Working Age (WA) + Inactive - AverageVar - FilterWorkingAge + VarDecSum + FilterStatusInactive + + + VarTotSum + totalChildren - WA Econ.Act. + Sick or Disabled - AverageVar - FilterWorkingAgeActive + VarDecSum + FilterStatusDisabled + + + VarTotSum + totalDisabled - Elderly + Other - AverageVar - FilterElderly + VarDecSum + FilterStatusOther + + + VarTotSum + totalOther @@ -1594,35 +3926,15 @@ row gives the same information for the population at-risk-of-poverty.

                  ]]> Decile deciles_eqDispy - - All - true - true - - - Poor - Equivalised disposable household income lower than 60% of the country specific median income. - - - 0]]> - - -
                  -
                  -
                  - - SharesDecile - Share of population groups in each decile - - - The table gives background -information on the share of age-groups in -different decile groups.

                  ]]> -
                  - + 4.3.b Share of population groups in each decile by age groups + + The table gives background +information on the share of individuals by age groups in +different decile groups.

                  ]]> +
                  CalculateSumWeighted @@ -1645,61 +3957,91 @@ different decile groups.

                  ]]>
                  - Children + 0 - 14 VarDecSum - FilterChildren + Filter0_14 VarTotSum - totalChildren + total0_14 + + + + + + 15 - 24 + + + + VarDecSum + Filter15_24 + + + VarTotSum + total15_24 + + + + + + 25 - 49 + + + + VarDecSum + Filter25_49 + + + VarTotSum + total25_49 - Working Age (WA) + 50 - 64 VarDecSum - FilterWorkingAge + Filter50_64 VarTotSum - totalWorkingAge + total50_64 - WA Econ.Act. + 65 - 79 VarDecSum - FilterWorkingAgeActive + Filter65_79 VarTotSum - totalWorkingAgeActive + total65_79 - Elderly + 80+ VarDecSum - FilterElderly + Filter80plus VarTotSum - totalElderly + total80plus @@ -1712,19 +4054,13 @@ different decile groups.

                  ]]>
                  -
                  -
                  - - Deciles - Decile and Poverty Cut Offs - - - The table shows the + 4.4 Decile and Poverty Cut Offs + + The table shows the cut-off points of equivalised disposable household income for each decile group as well as the poverty line.

                  ]]> -
                  - - + #,0.00 diff --git a/Supporting Material/EM Templates/UserSelectable/EUROMOD_2reform.xml b/Supporting Material/EM Templates/UserSelectable/EUROMOD_2reform.xml index 4c1b27c..beec376 100644 --- a/Supporting Material/EM Templates/UserSelectable/EUROMOD_2reform.xml +++ b/Supporting Material/EM Templates/UserSelectable/EUROMOD_2reform.xml @@ -1,30 +1,32 @@ 
  • {LSNtHo~r)Wqg*v*uY@D$O6}&K&R6hdmI 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%0AK|t_~Rl*ih1S#pFP)8 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%0Dx!k!O6d=)R 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 z zG6;v@!M-~}X5i0nPDSX1d?*nrz+qB4Ay0Q&;9?v%#llAYO>{36*kd2QXTAbwH`Xkn zT?Z_E;3Q(NmO=dEeXwB2`3zCPegI%C)iE^$fm7WsdL{kW3O^lO${4X!-^*F5_HwZ6 z^uBx*`|{Jt>eCaid2rFkD`k(aDljIW2~){Ar$CsTp(7MC#D}why)DRZJL~(i|66_E zJ#62@sgE_E*86^0jlN%2-S^9e_Wd&M`)+!z+4rB}zW$r)u{r|1Al@hCoXK|7dulBAH- z51v@G#Y`r!tTHxj{ZNXPvDAG5IXx+f|CF9O|4r`vH$Oi8f0O&(E>-nCdUP7Dw^t;| z_Hg&?<(4Oh*vkQE=k{`f1VAa|m=VNe7}Ze>yiduHFpl@(IKHWk;|d(d6-rN3%P?-a zrw-Z5{kQew_up3TzY(P>-EdO+Cm@?-Z*Len^ED-qi_Sa+^*E{0PIrolzZ)5djHi9# zjov=-KS2;LL;Rdr>1f9bQewu{+r|i+X&6pMl;<{X6LHfeob`s&3Lx0IBM|wD6s1l9 zS&KHtoIKp5)D)0gVz}=t7TCZSP!9>Y%Zi~DXuH7!9$dR6;ppXG%co@)OL19JbYnZjxb{A?{9 z`vcgQZ)tt`S?tTtD%$D!1wvgQ^x50oXKz!V;kn3!p;fqxT-*+IVpl5FP<0YU_2^O5 zrgZnt@Z&VbkJGp>PSYnwo8k0&6GOK5ci7&ywf3Hd?LAGO7pJLt0q#6bCsqs3zX>Y2 zzjzFkk!DW;nk{%xlj8KlFSxKE_+v&tL@SP?G=-RZ`ZjeGrkS#!gG`wmMNMy4cbrH+ z8kA`<7|L`-kp&5WP|wjju>o|FEi*Tip%aN6=`O4CFDS(fQp8Og^m=FJ<}T;DMyaj^ zJdTGI(&B-m5B-Q9XNo-aRLNX}2gO_uxw5PrT+#wF>1ZyV0~bAXMv~7#k$vfdKAj
    (XQ|9z@$o+WW*W=M=itn?xAx_R61CWk(s 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

    }BGENa%#YZd8uZ7Sb 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 DV~xrssIar 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�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