package Ġutils Ċ Ċ import Ġjava . util .* Ċ Ċ fun ĠString . remove Target Block ( number : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġblocks : ĠList < String > Ġ= Ġthis . chunk ed ( BLOCK _ SIZE _ IN _ BITS ) ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġnumber ) ĊĠĠĠĠĠĠĠ Ġ{" Target Ġblock Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ Ġreturn Ġblocks ĊĠĠĠĠĠĠĠ Ġ. filter Indexed Ġ{ Ġindex , Ġ_ Ġ-> Ġindex Ġ!= Ġnumber Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace (", Ġ", Ġ"") Ċ } Ċ Ċ fun ĠString . duplicate Target Block ( number : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġblocks : ĠList < String > Ġ= Ġthis . chunk ed ( BLOCK _ SIZE _ IN _ BITS ) ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġnumber ) ĊĠĠĠĠĠĠĠ Ġ{" Target Ġblock Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ Ġreturn Ġblocks ĊĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġs Ġ-> Ġif Ġ( index Ġ== Ġnumber ) Ġ"$ s $ s " Ġelse Ġs Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace (", Ġ", Ġ"") Ċ } Ċ Ċ fun ĠString . swap Target Blocks ( block One Number : ĠInt , Ġblock Two Number : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġblocks : ĠMutable List < String > Ġ= Ġthis . chunk ed ( BLOCK _ SIZE _ IN _ BITS ). to Mutable List () ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġblock One Number ) ĊĠĠĠĠĠĠĠ Ġ{" Block Ġone Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġblock Two Number ) ĊĠĠĠĠĠĠĠ Ġ{" Block Ġtwo Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ ĠCollections . swap ( blocks , Ġblock One Number , Ġblock Two Number ) ĊĠĠĠ Ġreturn Ġblocks ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace (", Ġ", Ġ"") Ċ } Ċ Ċ fun ĠString . change Bit Value In Target Block ( bit Number : ĠInt , Ġblock Number : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġblocks : ĠList < String > Ġ= Ġthis . chunk ed ( BLOCK _ SIZE _ IN _ BITS ) ĊĠĠĠ Ġrequire ( bit Number Ġ<= Ġ 1 2 7 ) Ġ{" Bit Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ 1 2 7 Ġinclusive "} ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġblock Number ) ĊĠĠĠĠĠĠĠ Ġ{" Block Ġtwo Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ Ġval Ġposition : ĠInt Ġ= ĠBLOCK _ SIZE _ IN _ BITS Ġ* Ġblock Number Ġ+ Ġbit Number ĊĠĠĠ Ġval Ġvalue Ġ= Ġ( if Ġ( this [ position ] Ġ== Ġ' 0 ') Ġ' 1 ' Ġelse Ġ' 0 '). toString () ĊĠĠĠ Ġreturn ĠStringBuilder ( this ) ĊĠĠĠĠĠĠĠ Ġ. replace ( position , Ġposition Ġ+ Ġ 1 , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ. toString () Ċ } Ċ Ċ fun ĠString . swap Target Bytes ( byte One Number : ĠInt , Ġbyte Two Number : ĠInt , Ġblock Number : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġblocks : ĠList < String > Ġ= Ġthis . chunk ed ( BLOCK _ SIZE _ IN _ BITS ) ĊĠĠĠ Ġrequire ( byte One Number Ġ<= Ġ 1 5 ) Ġ{" Bit Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ 1 5 Ġinclusive "} ĊĠĠĠ Ġrequire ( byte Two Number Ġ<= Ġ 1 5 ) Ġ{" Bit Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ 1 5 Ġinclusive "} ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġblock Number ) ĊĠĠĠĠĠĠĠ Ġ{" Block Ġtwo Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ Ġval Ġvalue One Ġ= Ġblocks [ block Number ]. substring ( byte One Number Ġ* Ġ 8 , Ġ( byte One Number Ġ+ Ġ 1 ) Ġ* Ġ 8 ) ĊĠĠĠ Ġval Ġvalue Two Ġ= Ġblocks [ block Number ]. substring ( byte Two Number Ġ* Ġ 8 , Ġ( byte Two Number Ġ+ Ġ 1 ) Ġ* Ġ 8 ) ĊĠĠĠ Ġreturn Ġblocks ĊĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( index Ġ== Ġblock Number ) ĠStringBuilder ( s ). swap ( byte One Number , Ġbyte Two Number , Ġvalue One , Ġvalue Two ) Ġelse Ġs ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace (", Ġ", Ġ"") Ċ } Ċ Ċ fun ĠStringBuilder . swap ( position One : ĠInt , Ġposition Two : ĠInt , Ġvalue One : ĠString , Ġvalue Two : ĠString ): ĠStringBuilder Ġ{ ĊĠĠĠ Ġreturn Ġthis . replace ( position One Ġ* Ġ 8 , Ġ( position One Ġ+ Ġ 1 ) Ġ* Ġ 8 , Ġvalue Two ) ĊĠĠĠĠĠĠĠ Ġ. replace ( position Two Ġ* Ġ 8 , Ġ( position Two Ġ+ Ġ 1 ) Ġ* Ġ 8 , Ġvalue One ) Ċ } Ċ Ċ fun ĠString . remove Byte From Block ( byte Number : ĠInt , Ġblock Number : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġblocks : ĠList < String > Ġ= Ġthis . chunk ed ( BLOCK _ SIZE _ IN _ BITS ) ĊĠĠĠ Ġrequire ( byte Number Ġ<= Ġ 1 5 ) Ġ{" Bit Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ 1 5 Ġinclusive "} ĊĠĠĠ Ġrequire ( blocks . size Ġ- Ġ 1 Ġ>= Ġblock Number ) ĊĠĠĠĠĠĠĠ Ġ{" Block Ġtwo Ġis Ġapart Ġfrom Ġencrypted Ġmessage . ĠNumber Ġshould Ġbe Ġbetween Ġ 0 Ġand Ġ${ blocks . size Ġ- Ġ 1 } "} ĊĠĠĠ Ġval ĠstartPosition Ġ= Ġbyte Number Ġ* Ġ 8 ĊĠĠĠ Ġval Ġend Position Ġ= Ġ( byte Number Ġ+ Ġ 1 ) Ġ* Ġ 8 ĊĠĠĠ Ġreturn Ġblocks ĊĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( if Ġ( index Ġ== Ġblock Number ) ĠStringBuilder ( s ). remove Range ( start Position , Ġend Position ) Ġelse Ġs ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace (", Ġ", Ġ"") Ċ } Ċ