Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
# abapGit-ssh
testing test
# open-abap-ssh
SSH client implemented in ABAP, over TCP/IP with 1 byte frame sizes = slow.

https://datatracker.ietf.org/doc/html/rfc4251 - The Secure Shell (SSH) Protocol Architecture
https://datatracker.ietf.org/doc/html/rfc4252 - The Secure Shell (SSH) Authentication Protocol
https://datatracker.ietf.org/doc/html/rfc4253 - The Secure Shell (SSH) Transport Layer Protocol
https://datatracker.ietf.org/doc/html/rfc4254 - The Secure Shell (SSH) Connection Protocol
108 changes: 21 additions & 87 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
},
"homepage": "https://github.com/open-abap/open-abap-ssh#readme",
"dependencies": {
"@abaplint/cli": "^2.85.32",
"@abaplint/runtime": "^1.8.11",
"@abaplint/transpiler-cli": "^1.8.11"
"@abaplint/cli": "^2.89.0",
"@abaplint/runtime": "^2.0.9",
"@abaplint/transpiler-cli": "^2.0.9"
}
}
53 changes: 30 additions & 23 deletions src/zcl_oassh.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@ CLASS zcl_oassh DEFINITION
key_exchange TYPE i VALUE 2,
END OF gc_state .
DATA mi_client TYPE REF TO if_apc_wsp_client .
DATA mv_buffer TYPE xstring .
DATA mo_stream TYPE REF TO zcl_oassh_stream .
DATA mv_state TYPE i .

METHODS handle .
METHODS handle
RAISING
cx_apc_error .
METHODS send
IMPORTING
!iv_message TYPE xstring
Expand All @@ -34,7 +36,7 @@ ENDCLASS.



CLASS zcl_oassh IMPLEMENTATION.
CLASS ZCL_OASSH IMPLEMENTATION.


METHOD connect.
Expand All @@ -44,6 +46,8 @@ CLASS zcl_oassh IMPLEMENTATION.

CREATE OBJECT lo_ssh.

CREATE OBJECT lo_ssh->mo_stream.

ls_frame-frame_type = if_apc_tcp_frame_types=>co_frame_type_fixed_length.
ls_frame-fixed_length = 1.

Expand All @@ -61,30 +65,31 @@ CLASS zcl_oassh IMPLEMENTATION.
METHOD handle.

DATA lv_remote_version TYPE string.
DATA lo_stream TYPE REF TO zcl_oassh_stream.
DATA lv_padding_length TYPE i.
DATA lv_length TYPE i.
DATA ls_kexinit TYPE zcl_oassh_message_20=>ty_data.

CASE mv_state.
WHEN gc_state-protocol_version_exchange.
IF mv_buffer CP |*{ cl_abap_codepage=>convert_to( |{ cl_abap_char_utilities=>cr_lf }| ) }|.
lv_remote_version = cl_abap_codepage=>convert_from( mv_buffer ).
CLEAR mv_buffer.
IF mo_stream->get( ) CP |*{ cl_abap_codepage=>convert_to( |{ cl_abap_char_utilities=>cr_lf }| ) }|.
lv_remote_version = cl_abap_codepage=>convert_from( mo_stream->get( ) ).
mo_stream->clear( ).
mv_state = gc_state-key_exchange.
ENDIF.
WHEN gc_state-key_exchange.
* todo, check buffer contains a full packet, and return the packet payload
* https://datatracker.ietf.org/doc/html/rfc4253#section-7

IF xstrlen( mv_buffer ) > 4.
CREATE OBJECT lo_stream EXPORTING iv_hex = mv_buffer.
lv_length = lo_stream->uint32_decode( ).
IF lo_stream->get_length( ) = lv_length.
IF mo_stream->get_length( ) > 4.
lv_length = mo_stream->uint32_decode_peek( ).
IF mo_stream->get_length( ) = lv_length.
mo_stream->uint32_decode( ).
* there is no MAC negotiated at this point in time
lv_padding_length = lo_stream->take( 1 ).
ls_kexinit = zcl_oassh_message_20=>parse( lo_stream ).
lo_stream->take( lv_padding_length ).
lv_padding_length = mo_stream->take( 1 ).
ls_kexinit = zcl_oassh_message_20=>parse( mo_stream ).
mo_stream->take( lv_padding_length / 2 ).

ls_kexinit-cookie = '11223344556677881122334455667788'. " todo, this should value should be random
send( zcl_oassh_message_20=>serialize( ls_kexinit )->get( ) ).
ENDIF.
ENDIF.

Expand All @@ -94,11 +99,13 @@ CLASS zcl_oassh IMPLEMENTATION.


METHOD if_apc_wsp_event_handler~on_close.
BREAK-POINT.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid use of BREAK/BREAK-POINT

Suggest following fix,

Suggested change
BREAK-POINT.

WRITE / 'on_close'.
ENDMETHOD.


METHOD if_apc_wsp_event_handler~on_error.
BREAK-POINT.
WRITE / 'on_error'.
ENDMETHOD.

Expand All @@ -108,17 +115,17 @@ CLASS zcl_oassh IMPLEMENTATION.

TRY.
lv_message = i_message->get_binary( ).
CATCH cx_root.
mo_stream->append( lv_message ).
handle( ).
CATCH cx_root INTO DATA(lx_error).
BREAK-POINT.
ENDTRY.
mv_buffer = mv_buffer && lv_message.

handle( ).

ENDMETHOD.


METHOD if_apc_wsp_event_handler~on_open.
DATA lv_xstr TYPE xstring.
BREAK-POINT.

WRITE / 'on_open'.

Expand All @@ -141,8 +148,8 @@ CLASS zcl_oassh IMPLEMENTATION.

DATA li_message_manager TYPE REF TO if_apc_wsp_message_manager.
DATA li_message TYPE REF TO if_apc_wsp_message.
DATA lv_index TYPE i.
DATA lv_hex TYPE xstring.
DATA lv_index TYPE i.
DATA lv_hex TYPE xstring.

li_message_manager ?= mi_client->get_message_manager( ).

Expand All @@ -158,4 +165,4 @@ CLASS zcl_oassh IMPLEMENTATION.
ENDDO.

ENDMETHOD.
ENDCLASS.
ENDCLASS.
2 changes: 1 addition & 1 deletion src/zcl_oassh.clas.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<VSEOCLASS>
<CLSNAME>ZCL_OASSH</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ssh test</DESCRIPT>
<DESCRIPT>open-abap-ssh</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
Expand Down
4 changes: 3 additions & 1 deletion src/zcl_oassh_message_20.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,12 @@ ENDCLASS.



CLASS ZCL_OASSH_MESSAGE_20 IMPLEMENTATION.
CLASS zcl_oassh_message_20 IMPLEMENTATION.


METHOD parse.
* https://datatracker.ietf.org/doc/html/rfc4253#section-7.1
* SSH_MSG_KEXINIT

rs_data-message_id = io_stream->take( 1 ).
ASSERT rs_data-message_id = gc_message_id.
Expand Down
45 changes: 45 additions & 0 deletions src/zcl_oassh_message_ecdh_30.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
CLASS zcl_oassh_message_ecdh_30 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.

TYPES:
BEGIN OF ty_data,
message_id TYPE x LENGTH 1,
q_c TYPE xstring,
END OF ty_data .

CONSTANTS gc_message_id TYPE x LENGTH 1 VALUE '1E'. " is 30 in decimal

CLASS-METHODS parse
IMPORTING
!io_stream TYPE REF TO zcl_oassh_stream
RETURNING
VALUE(rs_data) TYPE ty_data .

CLASS-METHODS serialize
IMPORTING
is_data TYPE ty_data
RETURNING
VALUE(ro_stream) TYPE REF TO zcl_oassh_stream .

PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.



CLASS ZCL_OASSH_MESSAGE_ECDH_30 IMPLEMENTATION.


METHOD parse.
BREAK-POINT.
ENDMETHOD.


METHOD serialize.
BREAK-POINT.
ENDMETHOD.
ENDCLASS.
16 changes: 16 additions & 0 deletions src/zcl_oassh_message_ecdh_30.clas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_OASSH_MESSAGE_ECDH_30</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>SSH_MSG_KEX_ECDH_INIT</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>
Loading