
PARAMETERS: leafnode TYPE i.
" if number of leaf nodes is odd add one to make it even,
IF leafnode MOD 2 <> 0.
leafnode = leafnode + 1.
ENDIF.
" Calculate tree height
treeheight = leafnode / 2.
count = 0.
DATA lv_tabix TYPE string.
DO leafnode TIMES.
lv_tabix = sy-index.
CONCATENATE 'Leaf' lv_tabix INTO merkelline-leafvalue .
PERFORM dohash USING merkelline-leafvalue CHANGING merkelline-leafhash.
merkelline-level = treeheight.
merkelline-leftleafhash = ''.
merkelline-rightleafhash = ''.
APPEND merkelline TO merkeldata.
ENDDO.
merkeldata1 = merkeldata.
FORM recursivehashing.
""Check number of nodes to be hashed if odd add the last node again.
DESCRIBE TABLE merkeldata1 LINES DATA(leafcount).
IF leafcount MOD 2 <> 0.
READ TABLE merkeldata1 INTO merkelline1 INDEX leafcount.
APPEND merkelline1 TO merkeldata1.
ENDIF.
DESCRIBE TABLE merkeldata1 LINES leafcount.
DATA(iteration) = leafcount / 2.
" Combine the number of nodes based on iteration count.
DO iteration TIMES.
DATA(count) = sy-index * 2.
DATA(count2) = count - 1.
READ TABLE merkeldata INTO merkelline1 INDEX count.
READ TABLE merkeldata INTO merkelline2 INDEX count2.
CONCATENATE merkelline1-leafvalue merkelline2-leafvalue INTO merkelline-leafvalue.
CONCATENATE merkelline1-leafhash merkelline2-leafhash INTO merkelline-leafhash.
PERFORM dohash USING merkelline-leafhash CHANGING merkelline-leafhash.
merkelline-leftleafhash = merkelline1-leafhash.
CONCATENATE merkelline1-leafhash merkelline2-leafhash INTO merkelline-leafhash .
merkelline-rightleafhash = merkelline2-leafhash.
merkelline-level = treeheight - count.
APPEND merkelline TO merkeldata2.
ENDDO.
" Add the processed nodes to master table and call the subroutine again with processed node data
CLEAR adddummy.
INSERT LINES OF merkeldata2 INTO merkeldata INDEX 1.
CLEAR merkeldata1.
merkeldata1 = merkeldata2.
CLEAR merkeldata2.
DESCRIBE TABLE merkeldata1 LINES leafcount.
IF leafcount <> 1.
PERFORM recursivehashing.
ENDIF.
ENDFORM.
FORM dohash USING inputvalue TYPE string CHANGING hashvalue TYPE string.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA1'
if_data = merkelline-leafvalue
IMPORTING
ef_hashstring = merkelline-leafhash.
ENDFORM.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
10 | |
7 | |
7 | |
7 | |
5 | |
5 | |
5 | |
4 | |
4 | |
4 |