Ver Fonte

PDFTool(Android) - 1.生成证书新增配置

liuxiaolong há 1 ano atrás
pai
commit
174135f160

BIN
ComPDFKit_Repo/compdfkit/ComPDFKit.aar


+ 2 - 3
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/CertificateDigitalDatas.java

@@ -45,10 +45,9 @@ public class CertificateDigitalDatas {
      * @param fileName  Certificate file name
      * @return Whether a certificate was generated
      */
-    public static boolean generatePKCS12Cert(CPDFOwnerInfo ownerInfo, String password, String saveDir, String fileName, boolean rsa2048) {
-        CPDFSignature.CertUsage flag = CPDFSignature.CertUsage.PDFDigSig;
+    public static boolean generatePKCS12Cert(CPDFOwnerInfo ownerInfo, String password, String saveDir, String fileName, CPDFSignature.CertUsage certUsage) {
         String pfxPath = new File(saveDir, fileName).getAbsolutePath();
-        return CPDFSignature.generatePKCS12Cert(ownerInfo, password, pfxPath, flag, rsa2048);
+        return CPDFSignature.generatePKCS12Cert(ownerInfo, password, pfxPath, certUsage);
     }
 
     /**

+ 27 - 19
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/importcert/create/CreateCertificateDigitalDialog.java

@@ -30,6 +30,7 @@ import androidx.appcompat.widget.AppCompatSpinner;
 import androidx.appcompat.widget.AppCompatTextView;
 
 import com.compdfkit.core.signature.CPDFOwnerInfo;
+import com.compdfkit.core.signature.CPDFSignature;
 import com.compdfkit.tools.R;
 import com.compdfkit.tools.common.basic.fragment.CBasicBottomSheetDialogFragment;
 import com.compdfkit.tools.common.utils.CFileUtils;
@@ -38,6 +39,8 @@ import com.compdfkit.tools.common.utils.threadpools.CThreadPoolUtils;
 import com.compdfkit.tools.common.utils.view.CEditText;
 import com.compdfkit.tools.common.views.directory.CFileDirectoryDialog;
 import com.compdfkit.tools.signature.CertificateDigitalDatas;
+import com.compdfkit.tools.signature.importcert.create.adapter.CountryReginSpinnerAdapter;
+import com.compdfkit.tools.signature.importcert.create.adapter.PurposeSpinnerAdapter;
 import com.compdfkit.tools.signature.interfaces.COnSelectCertFileListener;
 
 import java.io.File;
@@ -61,7 +64,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
 
     private AppCompatSpinner spinnerCountry;
 
-    private AppCompatSpinner spinnerAlgorithm;
+    private AppCompatSpinner spinnerPurpose;
 
     private Switch swSaveToFile;
 
@@ -89,7 +92,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
 
     private CountryReginSpinnerAdapter countryReginSpinnerAdapter;
 
-    private AlgorithmSpinnerAdapter algorithmSpinnerAdapter;
+    private PurposeSpinnerAdapter purposeSpinnerAdapter;
 
     private String fileName = "";
 
@@ -150,10 +153,9 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
         etName = view.findViewById(R.id.et_name);
         etOrganizationUnit = view.findViewById(R.id.et_organization_unit);
         etOrganizationName = view.findViewById(R.id.et_organization_name);
-        ScrollView scrollView = view.findViewById(R.id.scroll_view);
         etEmailAddress = view.findViewById(R.id.et_email_address);
         spinnerCountry = view.findViewById(R.id.spinner_country_regin);
-        spinnerAlgorithm = view.findViewById(R.id.spinner_algorithm);
+        spinnerPurpose = view.findViewById(R.id.spinner_purpose);
         swSaveToFile = view.findViewById(R.id.sw_save_to_file);
         btnOk = view.findViewById(R.id.btn_ok);
         switcher = view.findViewById(R.id.view_switcher);
@@ -175,7 +177,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
         fileName = "new_cert_" + uuid.substring(uuid.length() - 4, uuid.length()) + ".pfx";
         tvTitle.setText(R.string.tools_create_a_self_signed_digital_id);
         initCountryReginData();
-        initAlgorithm();
+        initPurpose();
         etName.addTextChangedListener((s, start, before, count) -> {
             enableConfirmButton();
         });
@@ -221,7 +223,8 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
             String sectoral = etOrganizationName.getText();
             String email = etEmailAddress.getText();
             String countryArea = countryReginSpinnerAdapter.getSelectCountryRegin();
-            boolean rsa2048 = algorithmSpinnerAdapter.getSelectAlgorithm() == AlgorithmSpinnerAdapter.Algorithm.ALGORITHM_2048_RSA;
+            CPDFSignature.CertUsage certUsage = purposeSpinnerAdapter.getSelectUsage();
+
             String password = etPassword.getText();
             String verifyPassword = etConfirmPassword.getText();
 
@@ -246,8 +249,12 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
             if (certFile.getParentFile() != null) {
                 certFile.getParentFile().mkdirs();
             }
-            boolean success = CertificateDigitalDatas.generatePKCS12Cert(ownerInfo, etPassword.getText(),
-                    saveDir, fileName, rsa2048);
+            boolean success = CertificateDigitalDatas.generatePKCS12Cert(
+                    ownerInfo,
+                    etPassword.getText(),
+                    saveDir,
+                    fileName,
+                    certUsage);
             boolean exists = certFile.exists();
             if (success && exists) {
                 if (selectCertFileListener != null) {
@@ -289,18 +296,19 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
         });
     }
 
-    private void initAlgorithm(){
-        List<AlgorithmSpinnerAdapter.Algorithm> algorithms = new ArrayList<>();
-        algorithms.add(AlgorithmSpinnerAdapter.Algorithm.ALGORITHM_2048_RSA);
-        algorithms.add(AlgorithmSpinnerAdapter.Algorithm.ALGORITHM_1024_RSA);
-        algorithmSpinnerAdapter = new AlgorithmSpinnerAdapter(getContext(), algorithms);
-        spinnerAlgorithm.setAdapter(algorithmSpinnerAdapter);
-        spinnerAlgorithm.setSelection(algorithmSpinnerAdapter.getSelectPosition());
-        spinnerAlgorithm.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+    private void initPurpose() {
+        List<CPDFSignature.CertUsage> certUsages = new ArrayList<>();
+        certUsages.add(CPDFSignature.CertUsage.PDFDigSig);
+        certUsages.add(CPDFSignature.CertUsage.PDFDataEnc);
+        certUsages.add(CPDFSignature.CertUsage.PDFAll);
+        purposeSpinnerAdapter = new PurposeSpinnerAdapter(getContext(), certUsages);
+        spinnerPurpose.setAdapter(purposeSpinnerAdapter);
+        spinnerPurpose.setSelection(purposeSpinnerAdapter.getSelectPosition());
+        spinnerPurpose.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
             @Override
             public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
-                if (algorithmSpinnerAdapter != null){
-                    algorithmSpinnerAdapter.setSelectAlgorithm(algorithmSpinnerAdapter.list.get(position));
+                if (purposeSpinnerAdapter != null) {
+                    purposeSpinnerAdapter.setSelectUseAge(purposeSpinnerAdapter.list.get(position));
                 }
             }
 
@@ -314,7 +322,7 @@ public class CreateCertificateDigitalDialog extends CBasicBottomSheetDialogFragm
     private void enableConfirmButton() {
         String name = etName.getText();
         String email = etEmailAddress.getText();
-        boolean enable = !TextUtils.isEmpty(name)  && !TextUtils.isEmpty(email);
+        boolean enable = !TextUtils.isEmpty(name) && !TextUtils.isEmpty(email);
         btnOk.setEnabled(enable);
     }
 

+ 1 - 1
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/importcert/create/CountryReginSpinnerAdapter.java

@@ -7,7 +7,7 @@
  * This notice may not be removed from this file.
  */
 
-package com.compdfkit.tools.signature.importcert.create;
+package com.compdfkit.tools.signature.importcert.create.adapter;
 
 import android.content.Context;
 import android.graphics.Typeface;

+ 28 - 31
ComPDFKit_Tools/src/main/java/com/compdfkit/tools/signature/importcert/create/AlgorithmSpinnerAdapter.java

@@ -7,7 +7,7 @@
  * This notice may not be removed from this file.
  */
 
-package com.compdfkit.tools.signature.importcert.create;
+package com.compdfkit.tools.signature.importcert.create.adapter;
 
 import android.content.Context;
 import android.graphics.Typeface;
@@ -19,43 +19,34 @@ import android.widget.BaseAdapter;
 import androidx.annotation.NonNull;
 import androidx.appcompat.widget.AppCompatTextView;
 
+import com.compdfkit.core.signature.CPDFSignature;
 import com.compdfkit.tools.R;
 
-import java.util.ArrayList;
 import java.util.List;
 
 
-public class AlgorithmSpinnerAdapter extends BaseAdapter {
+public class PurposeSpinnerAdapter extends BaseAdapter {
 
-    enum Algorithm{
-
-        ALGORITHM_1024_RSA,
-
-        ALGORITHM_2048_RSA
-
-    }
-
-    public List<Algorithm> list;
+    public List<CPDFSignature.CertUsage> list;
 
     private Context mContext;
 
-    private Algorithm selectAlgorithm;
+    private CPDFSignature.CertUsage selectCertUsage;
 
-    public AlgorithmSpinnerAdapter(@NonNull Context context, List<Algorithm> data) {
-//        selectAlgorithm = Algorithm.ALGORITHM_2048_RSA;
+    public PurposeSpinnerAdapter(@NonNull Context context, List<CPDFSignature.CertUsage> data) {
         this.list = data;
         mContext = context;
     }
 
-    public void setSelectAlgorithm(Algorithm algorithm) {
-        this.selectAlgorithm = algorithm;
+    public void setSelectUseAge(CPDFSignature.CertUsage certUsage) {
+        this.selectCertUsage = certUsage;
     }
 
     public int getSelectPosition(){
-        if (selectAlgorithm != null){
+        if (selectCertUsage != null){
             for (int i = 0; i < list.size(); i++) {
-                Algorithm item = list.get(i);
-                if (selectAlgorithm.equals(item)) {
+                CPDFSignature.CertUsage item = list.get(i);
+                if (selectCertUsage.equals(item)) {
                     return i;
                 }
             }
@@ -63,11 +54,11 @@ public class AlgorithmSpinnerAdapter extends BaseAdapter {
         return 0;
     }
 
-    public Algorithm getSelectAlgorithm(){
-        if (selectAlgorithm != null){
-            return selectAlgorithm;
+    public CPDFSignature.CertUsage getSelectUsage(){
+        if (selectCertUsage != null){
+            return selectCertUsage;
         }
-        return Algorithm.ALGORITHM_2048_RSA;
+        return CPDFSignature.CertUsage.PDFDigSig;
     }
 
     @Override
@@ -91,14 +82,20 @@ public class AlgorithmSpinnerAdapter extends BaseAdapter {
         convertView = inflater.inflate(R.layout.tools_spinner_list_item, null);
         if (convertView != null){
             AppCompatTextView textView = convertView.findViewById(R.id.tv_menu_title);
-            Algorithm algorithm = list.get(position);
-            if (algorithm == Algorithm.ALGORITHM_1024_RSA){
-                textView.setText("1024-bit RSA");
-            }else {
-                textView.setText("2048-bit RSA");
+            CPDFSignature.CertUsage certUsage = list.get(position);
+            switch (certUsage){
+                case PDFDigSig:
+                    textView.setText(mContext.getString(R.string.tools_digital_signatures));
+                    break;
+                case PDFDataEnc:
+                    textView.setText(mContext.getString(R.string.tools_data_encryption));
+                    break;
+                default:
+                    textView.setText(mContext.getString(R.string.tools_digital_signatures_and_data_encryption));
+                    break;
             }
-            textView.setTypeface(selectAlgorithm != null && selectAlgorithm == algorithm ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
-            convertView.setBackgroundResource(algorithm == selectAlgorithm ? R.drawable.tools_annotation_font_bold_bg : 0);
+            textView.setTypeface(selectCertUsage != null && selectCertUsage == certUsage ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
+            convertView.setBackgroundResource(certUsage == selectCertUsage ? R.drawable.tools_annotation_font_bold_bg : 0);
         }
         return convertView;
     }

+ 13 - 19
ComPDFKit_Tools/src/main/res/layout/tools_sign_create_cert_digital_id_fragment.xml

@@ -9,33 +9,27 @@
         android:id="@+id/tool_bar"
         layout="@layout/tools_dialog_tool_bar" />
 
-    <ScrollView
-        android:id="@+id/scroll_view"
+
+    <ViewSwitcher
+        android:id="@+id/view_switcher"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        android:fillViewport="true"
+        android:inAnimation="@anim/tools_slide_in_right"
+        android:outAnimation="@anim/tools_slide_out_left"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/tool_bar">
 
-        <ViewSwitcher
-            android:id="@+id/view_switcher"
+        <include
+            layout="@layout/tools_sign_create_cert_digital_id_info_layout"
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:inAnimation="@anim/tools_slide_in_right"
-            android:outAnimation="@anim/tools_slide_out_left">
-
-            <include
-                layout="@layout/tools_sign_create_cert_digital_id_info_layout"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent" />
+            android:layout_height="match_parent" />
 
-            <include
-                layout="@layout/tools_sign_create_cert_digital_id_save_layout"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent" />
-        </ViewSwitcher>
-    </ScrollView>
+        <include
+            layout="@layout/tools_sign_create_cert_digital_id_save_layout"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </ViewSwitcher>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 171 - 166
ComPDFKit_Tools/src/main/res/layout/tools_sign_create_cert_digital_id_info_layout.xml

@@ -1,172 +1,177 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
-    xmlns:app="http://schemas.android.com/apk/res-auto"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_import_desc"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="16dp"
-        android:background="@color/tools_reader_setting_head_bg_color"
-        android:lineSpacingMultiplier="1.25"
-        android:padding="16dp"
-        android:text="@string/tools_create_certificate_digital_id_desc"
-        android:textColor="@color/tools_text_color_primary"
-        android:textSize="12sp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        app:layout_constraintTop_toBottomOf="@id/tv_import_desc"
-        android:id="@+id/ll_content"
-        >
-
-
+    android:layout_height="match_parent"
+    android:fillViewport="true">
 
-    <com.compdfkit.tools.common.utils.view.CEditText
-        android:id="@+id/et_name"
+    <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/tools_please_enter_your_name"
-        app:showKeyTag="true"
-        android:imeOptions="actionNext"
-        android:title="@string/tools_field_name" />
-
-    <com.compdfkit.tools.common.utils.view.CEditText
-        android:id="@+id/et_organization_unit"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/tools_enter_the_name_of_the_organization_unit"
-        android:imeOptions="actionNext"
-        android:title="@string/tools_organization_unit" />
-
-    <com.compdfkit.tools.common.utils.view.CEditText
-        android:id="@+id/et_organization_name"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/tools_enter_the_name_of_the_organization"
-        android:imeOptions="actionNext"
-        android:title="@string/tools_organization_name" />
+        android:layout_height="wrap_content">
+
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_import_desc"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginTop="16dp"
+            android:background="@color/tools_reader_setting_head_bg_color"
+            android:lineSpacingMultiplier="1.25"
+            android:padding="16dp"
+            android:text="@string/tools_create_certificate_digital_id_desc"
+            android:textColor="@color/tools_text_color_primary"
+            android:textSize="12sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+        <LinearLayout
+            android:id="@+id/ll_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            app:layout_constraintTop_toBottomOf="@id/tv_import_desc">
+
+
+            <com.compdfkit.tools.common.utils.view.CEditText
+                android:id="@+id/et_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/tools_please_enter_your_name"
+                android:imeOptions="actionNext"
+                android:title="@string/tools_field_name"
+                app:showKeyTag="true" />
+
+            <com.compdfkit.tools.common.utils.view.CEditText
+                android:id="@+id/et_organization_unit"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/tools_enter_the_name_of_the_organization_unit"
+                android:imeOptions="actionNext"
+                android:title="@string/tools_organization_unit" />
+
+            <com.compdfkit.tools.common.utils.view.CEditText
+                android:id="@+id/et_organization_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/tools_enter_the_name_of_the_organization"
+                android:imeOptions="actionNext"
+                android:title="@string/tools_organization_name" />
+
+            <com.compdfkit.tools.common.utils.view.CEditText
+                android:id="@+id/et_email_address"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="@string/tools_email_address_hint"
+                android:imeOptions="actionDone"
+                android:title="@string/tools_email_address"
+                app:showKeyTag="true" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_country_regin_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="16dp"
+                android:paddingTop="16dp"
+                android:text="@string/tools_country_region"
+                android:textColor="@color/tools_text_color_disable"
+                app:layout_constraintEnd_toEndOf="parent"
+
+                app:layout_constraintHorizontal_bias="0"
+                app:layout_constraintStart_toStartOf="parent" />
+
+
+            <androidx.appcompat.widget.AppCompatSpinner
+                android:id="@+id/spinner_country_regin"
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginTop="8dp"
+                android:background="@drawable/tools_bg_import_certificate_digital_id_item"
+                android:dropDownSelector="@color/tools_color_primary"
+                android:foreground="@drawable/tools_common_btn_rectangle_ripple"
+                android:paddingHorizontal="16dp"
+                android:paddingStart="0dp"
+                android:paddingEnd="0dp"
+                android:popupBackground="@drawable/tools_common_window_bg"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/tv_country_regin_title" />
+
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_purpose_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="16dp"
+                android:paddingTop="16dp"
+                android:text="@string/tools_purpose"
+                android:textColor="@color/tools_text_color_disable"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintHorizontal_bias="0"
+                app:layout_constraintStart_toStartOf="parent" />
+
+
+            <androidx.appcompat.widget.AppCompatSpinner
+                android:id="@+id/spinner_purpose"
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginTop="8dp"
+                android:background="@drawable/tools_bg_import_certificate_digital_id_item"
+                android:dropDownSelector="@color/tools_color_primary"
+                android:foreground="@drawable/tools_common_btn_rectangle_ripple"
+                android:paddingHorizontal="16dp"
+                android:paddingStart="0dp"
+                android:paddingEnd="0dp"
+                android:popupBackground="@drawable/tools_common_window_bg"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/tv_purpose_title" />
+
+        </LinearLayout>
+
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_save_to_file"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="16dp"
+            android:layout_marginTop="24dp"
+            android:text="@string/tools_save_to_file"
+            android:textColor="@color/tools_text_color_disable"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/ll_content" />
+
+        <Switch
+            android:id="@+id/sw_save_to_file"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="16dp"
+            android:checked="true"
+            app:layout_constraintBottom_toBottomOf="@id/tv_save_to_file"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="@id/tv_save_to_file" />
+
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btn_ok"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginTop="14dp"
+            android:layout_marginBottom="32dp"
+            android:background="@drawable/tools_verify_pwd_confirm_btn_bg"
+            android:elevation="0dp"
+            android:text="@string/tools_okay"
+            android:textColor="@android:color/white"
+            android:textSize="16sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_save_to_file"
+            app:layout_constraintVertical_bias="1" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</ScrollView>
 
-    <com.compdfkit.tools.common.utils.view.CEditText
-        android:id="@+id/et_email_address"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:hint="@string/tools_email_address_hint"
-        android:imeOptions="actionDone"
-        app:showKeyTag="true"
-        android:title="@string/tools_email_address" />
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_country_regin_title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:paddingTop="16dp"
-        android:text="@string/tools_country_region"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0"
-
-        android:textColor="@color/tools_text_color_disable"
-        app:layout_constraintStart_toStartOf="parent" />
-
-
-    <androidx.appcompat.widget.AppCompatSpinner
-        android:id="@+id/spinner_country_regin"
-        android:layout_width="match_parent"
-        android:layout_height="40dp"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="8dp"
-        android:background="@drawable/tools_bg_import_certificate_digital_id_item"
-        android:dropDownSelector="@color/tools_color_primary"
-        android:foreground="@drawable/tools_common_btn_rectangle_ripple"
-        android:paddingHorizontal="16dp"
-        android:paddingStart="0dp"
-        android:paddingEnd="0dp"
-        android:popupBackground="@drawable/tools_common_window_bg"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/tv_country_regin_title" />
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_algorithm_title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:paddingTop="16dp"
-        android:text="@string/tools_algorithm"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0"
-        android:textColor="@color/tools_text_color_disable"
-        app:layout_constraintStart_toStartOf="parent" />
-
-
-    <androidx.appcompat.widget.AppCompatSpinner
-        android:id="@+id/spinner_algorithm"
-        android:layout_width="match_parent"
-        android:layout_height="40dp"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="8dp"
-        android:background="@drawable/tools_bg_import_certificate_digital_id_item"
-        android:dropDownSelector="@color/tools_color_primary"
-        android:foreground="@drawable/tools_common_btn_rectangle_ripple"
-        android:paddingHorizontal="16dp"
-        android:paddingStart="0dp"
-        android:paddingEnd="0dp"
-        android:popupBackground="@drawable/tools_common_window_bg"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/tv_algorithm_title" />
-
-    </LinearLayout>
-
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_save_to_file"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginTop="24dp"
-        android:text="@string/tools_save_to_file"
-        android:textColor="@color/tools_text_color_disable"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/ll_content" />
-
-    <Switch
-        android:id="@+id/sw_save_to_file"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginEnd="16dp"
-        android:checked="true"
-        app:layout_constraintBottom_toBottomOf="@id/tv_save_to_file"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="@id/tv_save_to_file" />
-
-    <androidx.appcompat.widget.AppCompatButton
-        android:id="@+id/btn_ok"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="14dp"
-        android:layout_marginBottom="32dp"
-        android:background="@drawable/tools_verify_pwd_confirm_btn_bg"
-        android:elevation="0dp"
-        android:text="@string/tools_okay"
-        android:textColor="@android:color/white"
-        android:textSize="16sp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/tv_save_to_file"
-        app:layout_constraintVertical_bias="1" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
 

+ 119 - 112
ComPDFKit_Tools/src/main/res/layout/tools_sign_create_cert_digital_id_save_layout.xml

@@ -1,130 +1,137 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:fillViewport="true">
 
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_save_desc"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="16dp"
-        android:background="@color/tools_reader_setting_head_bg_color"
-        android:lineSpacingMultiplier="1.25"
-        android:padding="16dp"
-        android:text="@string/tools_certificate_digital_id_save_info"
-        android:textColor="@color/tools_text_color_primary"
-        android:textSize="12sp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <androidx.constraintlayout.helper.widget.Flow
+    <androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
+        xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="16dp"
-        android:orientation="vertical"
-        app:constraint_referenced_ids="ll_save_address,et_password,et_confirm_password"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/tv_save_desc" />
-
-
-    <LinearLayout
-        android:id="@+id/ll_save_address"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:orientation="vertical"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent">
+        android:layout_height="match_parent">
+
 
         <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_save_address_title"
-            android:layout_width="wrap_content"
+            android:id="@+id/tv_save_desc"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginTop="16dp"
+            android:background="@color/tools_reader_setting_head_bg_color"
+            android:lineSpacingMultiplier="1.25"
+            android:padding="16dp"
+            android:text="@string/tools_certificate_digital_id_save_info"
+            android:textColor="@color/tools_text_color_primary"
+            android:textSize="12sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.constraintlayout.helper.widget.Flow
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:text="@string/tools_save_location"
-            android:textColor="@color/tools_text_color_disable"
-            app:layout_constraintStart_toStartOf="@id/tv_save_desc" />
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginTop="16dp"
+            android:orientation="vertical"
+            app:constraint_referenced_ids="ll_save_address,et_password,et_confirm_password"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_save_desc" />
 
 
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_save_address"
+        <LinearLayout
+            android:id="@+id/ll_save_address"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp"
+            android:orientation="vertical"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent">
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_save_address_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/tools_save_location"
+                android:textColor="@color/tools_text_color_disable"
+                app:layout_constraintStart_toStartOf="@id/tv_save_desc" />
+
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_save_address"
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginTop="8dp"
+                android:background="@drawable/tools_bg_import_certificate_digital_id_item"
+                android:ellipsize="start"
+                android:foreground="@drawable/tools_common_btn_rectangle_ripple"
+                android:gravity="center_vertical"
+                android:paddingHorizontal="8dp"
+                android:singleLine="true"
+                android:textColor="@color/tools_text_color_primary"
+                android:textSize="14sp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                tools:text="Document/compdfkit" />
+
+        </LinearLayout>
+
+
+        <com.compdfkit.tools.common.utils.view.CEditText
+            android:id="@+id/et_password"
             android:layout_width="match_parent"
-            android:layout_height="40dp"
+            android:layout_height="wrap_content"
+            android:hint="@string/tools_please_enter_your_password"
+            android:imeOptions="actionNext"
+            android:inputType="textPassword"
+            android:title="@string/tools_set_a_password" />
+
+        <com.compdfkit.tools.common.utils.view.CEditText
+            android:id="@+id/et_confirm_password"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="@string/tools_enter_the_password_again"
+            android:imeOptions="actionDone"
+            android:inputType="textPassword"
+            android:title="@string/tools_confirm_password" />
+
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_password_error"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="16dp"
             android:layout_marginTop="8dp"
-            android:background="@drawable/tools_bg_import_certificate_digital_id_item"
-            android:ellipsize="start"
-            android:foreground="@drawable/tools_common_btn_rectangle_ripple"
-            android:gravity="center_vertical"
-            android:paddingHorizontal="8dp"
-            android:singleLine="true"
-            android:textColor="@color/tools_text_color_primary"
-            android:textSize="14sp"
+            android:text="@string/tools_confirm_password_error"
+            android:textColor="@color/tools_error"
+            android:visibility="gone"
+            app:layout_constrainedWidth="true"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            tools:text="Document/compdfkit" />
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintStart_toStartOf="@id/et_confirm_password"
+            app:layout_constraintTop_toBottomOf="@id/et_confirm_password"
+            tools:visibility="visible" />
 
-    </LinearLayout>
 
+        <androidx.appcompat.widget.AppCompatButton
+            android:id="@+id/btn_save"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="16dp"
+            android:layout_marginTop="32dp"
+            android:layout_marginBottom="32dp"
+            android:background="@drawable/tools_verify_pwd_confirm_btn_bg"
+            android:elevation="0dp"
+            android:text="@string/tools_okay"
+            android:textColor="@android:color/white"
+            android:textSize="16sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_password_error"
+            app:layout_constraintVertical_bias="1" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</ScrollView>
 
-    <com.compdfkit.tools.common.utils.view.CEditText
-        android:id="@+id/et_password"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:imeOptions="actionNext"
-        android:inputType="textPassword"
-        android:hint="@string/tools_please_enter_your_password"
-        android:title="@string/tools_set_a_password" />
-
-    <com.compdfkit.tools.common.utils.view.CEditText
-        android:id="@+id/et_confirm_password"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:imeOptions="actionDone"
-        android:inputType="textPassword"
-        android:hint="@string/tools_enter_the_password_again"
-        android:title="@string/tools_confirm_password" />
-
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_password_error"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="8dp"
-        android:text="@string/tools_confirm_password_error"
-        android:textColor="@color/tools_error"
-        android:visibility="gone"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0"
-        app:layout_constrainedWidth="true"
-        android:layout_marginStart="16dp"
-        app:layout_constraintStart_toStartOf="@id/et_confirm_password"
-        app:layout_constraintTop_toBottomOf="@id/et_confirm_password"
-        tools:visibility="visible" />
-
-
-    <androidx.appcompat.widget.AppCompatButton
-        android:id="@+id/btn_save"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginHorizontal="16dp"
-        android:layout_marginTop="32dp"
-        android:layout_marginBottom="32dp"
-        android:background="@drawable/tools_verify_pwd_confirm_btn_bg"
-        android:elevation="0dp"
-        android:text="@string/tools_okay"
-        android:textColor="@android:color/white"
-        android:textSize="16sp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/tv_password_error"
-        app:layout_constraintVertical_bias="1" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>
 
 
 

+ 4 - 1
ComPDFKit_Tools/src/main/res/values/tools_strings.xml

@@ -389,6 +389,7 @@
     <string name="tools_details">Details</string>
     <string name="tools_version">Version</string>
     <string name="tools_algorithm">Algorithm</string>
+    <string name="tools_purpose">Purpose</string>
     <string name="tools_subject">Subject</string>
     <string name="tools_serial_number">Serial Number</string>
     <string name="tools_certificate_policy">Certificate Policy</string>
@@ -419,5 +420,7 @@
     <string name="tools_add_to_trusted_cert">Add to Trusted Certificates</string>
     <string name="tools_select_folder">Select folder</string>
     <string name="tools_save_to_this_directory">Save to this directory</string>
-
+    <string name="tools_digital_signatures">Digital Signatures</string>
+    <string name="tools_data_encryption">Data Encryption</string>
+    <string name="tools_digital_signatures_and_data_encryption">Digital Signatures and Data Encryption</string>
 </resources>

+ 2 - 2
Samples/src/main/java/com/compdfkit/samples/samples/DigitalSignaturesTest.java

@@ -101,10 +101,10 @@ public class DigitalSignaturesTest extends PDFSamples {
         ownerInfo.setEmail("xxxx@example.com");
         ownerInfo.setCountry("SG");
         CPDFSignature.CertUsage flag = CPDFSignature.CertUsage.PDFAll;
-        File certFile = new File(outputDir(), "certificate/Certificate.pfx");
+        File certFile = new File(outputDir(), "certificate/Certificate_2048.pfx");
         certFile.getParentFile().mkdirs();
+        boolean result = CPDFSignature.generatePKCS12Cert(ownerInfo, password, certFile.getAbsolutePath(), flag);
 
-        boolean result = CPDFSignature.generatePKCS12Cert(ownerInfo, password, certFile.getAbsolutePath(), flag, true);
         if (result) {
             outputListener.println("Done. File saved in Certificate.pfx");
             outputListener.println("Generate PKCS12 certificate done");