Jerry 2010年CFCA POC源代码
发布日期:2021-06-30 14:06:42 浏览次数:2 分类:技术文章

本文共 12118 字,大约阅读时间需要 40 分钟。

*&---------------------------------------------------------------------**& Report  /SF0A0001/CFCA_EN_DE_TEST*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT  /SF0A0001/CFCA_EN_DE_TEST.PARAMETERS: file TYPE localfile OBLIGATORY DEFAULT 'C:and Settingsf_435.xml',            passwd TYPE /sf0a0001/cfca_string DEFAULT 'i042416' OBLIGATORY.TYPES ty_content_line TYPE x LENGTH 1024.DATA: lv_client_file_content TYPE xstring,      lv_origin_file_content TYPE xstring,      lv_final_content TYPE xstring,      lv_client_private_content TYPE xstring,      lv_subject TYPE /sf0a0001/cfca_string,      lv_issuer TYPE /sf0a0001/cfca_string,      lv_serial TYPE /sf0a0001/cfca_string,      lv_rc TYPE i,      lv_origin_file_path TYPE string,      lv_decry TYPE xstring,      lv_date_valid TYPE i,      lv_file_length TYPE i,      lt_doc_download            TYPE STANDARD TABLE OF sdok_sdatx,      l_table_wa                 TYPE REF TO data,      lv_signature TYPE i,      lt_content TYPE STANDARD TABLE OF ty_content_line .FIELD-SYMBOLS:                
TYPE any,
TYPE any.DATA: RFCDEST like rfcdes-rfcdest VALUE 'JCO'. "corresponds to the destination namedefined in the SM59START-OF-SELECTION.cl_gui_frontend_services=>gui_upload( EXPORTING filename = 'C:and Settings.cer' filetype = 'BIN' IMPORTING filelength = lv_file_length CHANGING data_tab = lt_content EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ). IF sy-subrc = 1. WRITE:/ 'Please make sure Client1.cer is stored in desktop!'. RETURN. ELSE. ASSERT sy-subrc = 0. ENDIF. ASSERT lt_content IS NOT INITIAL. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_file_length IMPORTING buffer = lv_client_file_content TABLES binary_tab = lt_content EXCEPTIONS failed = 1 OTHERS = 2. ASSERT sy-subrc = 0. "********************** Upload Original file **************************** CLEAR: lt_content. lv_origin_file_path = file. cl_gui_frontend_services=>gui_upload( EXPORTING filename = lv_origin_file_path filetype = 'BIN' IMPORTING filelength = lv_file_length CHANGING data_tab = lt_content EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ). IF sy-subrc = 1. WRITE:/ 'Can not open file:' , lv_origin_file_path. RETURN. ELSE. ASSERT sy-subrc = 0. ENDIF. ASSERT lt_content IS NOT INITIAL. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_file_length IMPORTING buffer = lv_origin_file_content TABLES binary_tab = lt_content EXCEPTIONS failed = 1 OTHERS = 2. ASSERT sy-subrc = 0. CALL FUNCTION '/SF0A0001/ENCRY_FILE' DESTINATION RFCDEST EXPORTING IN_CLIENT_FILE_CONTENT = lv_client_file_content IN_ORIGINAL_FILE_CONTENT = lv_origin_file_content IMPORTING OUT_ENCRIED_FILE_CONTENT = lv_decry out_rc = lv_rc. WRITE:/ lv_rc. ASSERT lv_decry IS NOT INITIAL. "download lv_file_length = xstrlen( lv_decry ). CREATE DATA l_table_wa LIKE LINE OF lt_doc_download. ASSIGN l_table_wa->* TO
. ASSIGN l_table_wa->* TO
CASTING TYPE x. DATA l_length TYPE i. l_length = 0. WHILE lv_file_length > l_length.
= lv_decry+l_length. l_length = l_length + 1022. "1022 = table width APPEND
TO lt_doc_download[]. ENDWHILE. lv_origin_file_path = lv_origin_file_path && '.enc'. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = lv_file_length filename = lv_origin_file_path filetype = 'BIN' TABLES data_tab = lt_doc_download* FIELDNAMES = EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. IF sy-subrc = 0. WRITE: / '***************** ENCry Senario *************'. WRITE: / 'Encryied File Generate successfully!'. "#EC NOTEXT ENDIF. WRITE:/ 'Encry Return Code:' , lv_rc. " test with decry now " upload private key CLEAR: lt_content. cl_gui_frontend_services=>gui_upload( EXPORTING filename = 'C:and Settings.pfx' filetype = 'BIN' IMPORTING filelength = lv_file_length CHANGING data_tab = lt_content EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ). IF sy-subrc = 1. WRITE:/ 'Please make sure client Private Key file is stored in desktop!'. RETURN. ELSE. ASSERT sy-subrc = 0. ENDIF. ASSERT lt_content IS NOT INITIAL. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_file_length IMPORTING buffer = lv_client_private_content TABLES binary_tab = lt_content EXCEPTIONS failed = 1 OTHERS = 2. ASSERT sy-subrc = 0. CALL FUNCTION '/SF0A0001/DECRY_FILE' DESTINATION RFCDEST EXPORTING IN_ENCRY_FILE = lv_decry IN_PRIVATE_KEY_FILE = lv_client_private_content IN_PASSWD = passwd IMPORTING OUT_DECRY_FILE = lv_final_content out_rc = lv_rc. BREAK-POINT.*&---------------------------------------------------------------------**& Report /SF0A0001/CFCA_VERIFY_SIGN*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT /SF0A0001/CFCA_VERIFY_SIGN.TYPES ty_content_line TYPE x LENGTH 1024.DATA: lv_client_file_content TYPE xstring, lv_ca_file_content TYPE xstring, lv_subject TYPE /sf0a0001/cfca_string, lv_issuer TYPE /sf0a0001/cfca_string, lv_serial TYPE /sf0a0001/cfca_string, lv_rc TYPE i, lv_date_valid TYPE i, lv_file_length TYPE i, lv_signature TYPE i, lv_client_d TYPE /sf0a0001/cfca_c, lt_content TYPE STANDARD TABLE OF ty_content_line .DATA: RFCDEST like rfcdes-rfcdest VALUE 'JCO'. "corresponds to the destination namedefined in the SM59START-OF-SELECTION.cl_gui_frontend_services=>gui_upload( EXPORTING filename = 'C:and Settings.cer' filetype = 'BIN' IMPORTING filelength = lv_file_length CHANGING data_tab = lt_content EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ). IF sy-subrc = 1. WRITE:/ 'Please make sure Client1.cer is stored in desktop!'. RETURN. ELSE. ASSERT sy-subrc = 0. ENDIF. ASSERT lt_content IS NOT INITIAL. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_file_length IMPORTING buffer = lv_client_file_content TABLES binary_tab = lt_content EXCEPTIONS failed = 1 OTHERS = 2. ASSERT sy-subrc = 0.SELECT SINGLE * INTO lv_client_d FROM /sf0a0001/cfca_c.ASSERT sy-subrc = 0.CALL FUNCTION '/SF0A0001/CERT_VERIFY'DESTINATION RFCDEST EXPORTING IN_CLIENT_FILE_CONTENT = lv_client_file_content IN_CA_FILE_CONTENT = lv_client_d-file_content IMPORTING OUT_SUBJECT = lv_subject OUT_issuer = lv_issuer out_serial_number = lv_serial out_rc = lv_rc OUT_DATE_VALID = lv_date_valid OUT_SIGNATURE_CHECK = lv_signature.ASSERT sy-subrc = 0.WRITE:/ lv_rc.WRITE:/ 'Subject:' ,lv_subject.WRITE:/ lv_issuer.WRITE:/ lv_serial.WRITE:/ lv_date_valid.*&---------------------------------------------------------------------**& Report /SF0A0001/MAINTAIN_CA*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT /SF0A0001/MAINTAIN_CA.CONSTANTS: CA_FILE_NAME TYPE STRING VALUE 'CA_FILE'.PARAMETERS: cafile TYPE localfile OBLIGATORY.DATA: ls_ca TYPE /SF0A0001/CFCA_C, lv_file TYPE xstring.START-OF-SELECTION. SELECT SINGLE * INTO ls_ca FROM /SF0A0001/CFCA_C WHERE FILE_NAME = CA_FILE_NAME. IF sy-subrc = 0. DELETE /SF0A0001/CFCA_C FROM ls_ca. ASSERT sy-subrc = 0. CLEAR: ls_ca. ENDIF. PERFORM upload CHANGING lv_file. ls_ca-file_name = ca_file_name. ls_ca-file_content = lv_file. INSERT /SF0A0001/CFCA_C FROM ls_ca. COMMIT WORK AND WAIT. ASSERT sy-subrc = 0. WRITE:/ 'CA Uploaded Successful!'.********************************************************************AT SELECTION-SCREEN ON VALUE-REQUEST FOR cafile. DATA: file_table TYPE filetable, action TYPE i, rc TYPE sysubrc. FIELD-SYMBOLS:
TYPE file_table. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING default_extension = 'cer' "file_filter = cl_gui_frontend_services=>filetype_xml CHANGING file_table = file_table rc = rc user_action = action EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CHECK action = cl_gui_frontend_services=>action_ok. READ TABLE file_table INDEX 1 ASSIGNING
. cafile =
. FORM upload CHANGING content TYPE xstring. TYPES ty_content_line TYPE x LENGTH 1024. DATA: lv_file_length TYPE i, file TYPE string, lt_content TYPE STANDARD TABLE OF ty_content_line . file = cafile. cl_gui_frontend_services=>gui_upload( EXPORTING filename = file filetype = 'BIN' IMPORTING filelength = lv_file_length CHANGING data_tab = lt_content EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ). ASSERT sy-subrc = 0. ASSERT lt_content IS NOT INITIAL. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_file_length IMPORTING buffer = content TABLES binary_tab = lt_content EXCEPTIONS failed = 1 OTHERS = 2. ASSERT sy-subrc = 0. ENDFORM.

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

转载地址:https://jerry.blog.csdn.net/article/details/104034334 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:打印某个ABAP事务码使用到的所有Authorization object
下一篇:ABAP面试题系列:只用位操作实现两个整数的加法运算

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月23日 21时20分47秒