package Ġorg . gal o is . core . benchmark Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . gal o is . core . engine . Encryption Detail Ċ import Ġorg . gal o is . core . engine . Engine Configuration Ċ import Ġorg . gal o is . core . engine . Engine Mode Ċ import Ġorg . gal o is . core . engine . G alo is Engine Ċ import Ġorg . gal o is . core . provider . ope . fo pe . FO PE _ ALGORITHM _ NAME Ċ import Ġorg . gal o is . core . provider . ope . p ore . PO RE _ ALGORITHM _ NAME Ċ import Ġorg . gal o is . core . provider . p pe . hpc bc . H PC BC _ ALGORITHM _ NAME Ċ import Ġorg . openjdk . j mh . annotations .* Ċ import Ġorg . openjdk . j mh . results . format . Result Format Type Ċ import Ġorg . openjdk . j mh . runner . Runner Ċ import Ġorg . openjdk . j mh . runner . options . Options Builder Ċ import Ġtech . tables aw . api . Table Ċ import Ġjava . awt . Desktop Ċ import Ġjava . awt . Toolkit Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . FileWriter Ċ import Ġjava . net . URI Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ enum Ġclass ĠMultiple Params Config ( val Ġalgorithm : ĠString , Ġval Ġcolumn : ĠString , Ġval Ġparam : ĠAny ) Ġ{ ĊĠĠĠ ĠFO PE _ 8 ( FO PE _ ALGORITHM _ NAME , Ġ" age ", Ġ 8 ), ĊĠĠĠ ĠFO PE _ 3 2 ( FO PE _ ALGORITHM _ NAME , Ġ" age ", Ġ 3 2 ), ĊĠĠĠ ĠFO PE _ 6 4 ( FO PE _ ALGORITHM _ NAME , Ġ" age ", Ġ 6 4 ), ĊĠĠĠ ĠPO RE _ 3 ( PO RE _ ALGORITHM _ NAME , Ġ" age ", Ġ 3 ), ĊĠĠĠ ĠPO RE _ 5 1 2 ( PO RE _ ALGORITHM _ NAME , Ġ" age ", Ġ 5 1 2 ), ĊĠĠĠ ĠPO RE _ 4 0 9 6 ( PO RE _ ALGORITHM _ NAME , Ġ" age ", Ġ 4 0 9 6 ), ĊĠĠĠ ĠH PC BC _ 1 ( H PC BC _ ALGORITHM _ NAME , Ġ" ipv 6 ", Ġ 1 ), ĊĠĠĠ ĠH PC BC _ 2 ( H PC BC _ ALGORITHM _ NAME , Ġ" ipv 6 ", Ġ 2 ), ĊĠĠĠ ĠH PC BC _ 6 ( H PC BC _ ALGORITHM _ NAME , Ġ" ipv 6 ", Ġ 6 ), ĊĠĠĠ ĠH PC BC _ 8 ( H PC BC _ ALGORITHM _ NAME , Ġ" ipv 6 ", Ġ 8 ) Ċ } Ċ Ċ private Ġfun Ġcreate Engine Config ( params : ĠMultiple Params Config ): ĠEngine Configuration Ġ{ ĊĠĠĠ Ġval Ġencryption Details Ġ= ĠlistOf ( Encryption Detail ( params . column , Ġparams . algorithm )) ĊĠĠĠ Ġval Ġencrypt Config Ġ= ĊĠĠĠĠĠĠĠ ĠEngine Configuration (" benchmark ", ĠEngine Mode . ENCRYPT , Ġencryption Details ) ĊĊĠĠĠ Ġwhen Ġ( params . algorithm ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFO PE _ ALGORITHM _ NAME Ġ-> Ġencryption Details [ 0 ]. params . cipher Specific [" tau "] Ġ= Ġparams . param ĊĠĠĠĠĠĠĠ ĠPO RE _ ALGORITHM _ NAME Ġ-> Ġencryption Details [ 0 ]. params . cipher Specific [" q "] Ġ= Ġparams . param ĊĠĠĠĠĠĠĠ ĠH PC BC _ ALGORITHM _ NAME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencryption Details [ 0 ]. params . cipher Specific [" block _ size "] Ġ= Ġparams . param ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencryption Details [ 0 ]. params . cipher Specific [" ip "] Ġ= Ġ" 6 " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġencrypt Config Ċ } Ċ Ċ @ Output TimeUnit ( TimeUnit . MILLISECONDS ) Ċ @ W arm up ( iterations Ġ= Ġ 3 , Ġtime Ġ= Ġ 5 , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ @ Measurement ( iterations Ġ= Ġ 3 , Ġtime Ġ= Ġ 1 0 , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ @ State ( Scope . Benchmark ) Ċ class ĠMultiple Params Encryption Time And Size Benchmark Ġ{ ĊĊĠĠĠ Ġ@ Param ( ĊĠĠĠĠĠĠĠ Ġ" FO PE _ 8 ", ĊĠĠĠĠĠĠĠ Ġ" FO PE _ 3 2 ", ĊĠĠĠĠĠĠĠ Ġ" FO PE _ 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" PO RE _ 3 ", ĊĠĠĠĠĠĠĠ Ġ" PO RE _ 5 1 2 ", ĊĠĠĠĠĠĠĠ Ġ" PO RE _ 4 0 9 6 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 1 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 2 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 6 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 8 " ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġparams : ĠMultiple Params Config ĊĊĠĠĠ Ġprivate Ġvar Ġrows Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdataset : ĠTable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġencrypt Config : ĠEngine Configuration ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġengine : ĠG alo is Engine ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġencrypted : ĠTable ĊĊĠĠĠ Ġprivate Ġvar Ġinitial Size : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdelt as : ĠMutable List < Int > ĊĊĠĠĠ Ġprivate Ġval Ġsize File Ġ= ĠFile (" benchmarks / multiple / sizes . log ") ĊĊĠĠĠ Ġ@ Setup ( Level . Trial ) ĊĠĠĠ Ġfun Ġload Dataset () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdataset Stream Ġ= Ġthis . java Class . getResource AsStream ("/ benchmark _ sample . csv ") ĊĠĠĠĠĠĠĠ Ġdataset Ġ= ĠTable . read (). csv ( dataset Stream ). retain Columns ( params . column ). in Range ( rows ) ĊĊĠĠĠĠĠĠĠ Ġencrypt Config Ġ= Ġcreate Engine Config ( params ) ĊĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġdataset . write (). csv ( ba os ) ĊĠĠĠĠĠĠĠ Ġinitial Size Ġ= Ġba os . size () ĊĠĠĠĠĠĠĠ Ġdelt as Ġ= ĠArrayList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Setup ( Level . Invocation ) ĊĠĠĠ Ġfun Ġinit Engine () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġforces Ġa Ġnew Ġkey ĊĠĠĠĠĠĠĠ Ġengine Ġ= ĠG alo is Engine ( dataset , Ġencrypt Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġencrypt () Ġ= Ġrun Blocking Ġ{ Ġencrypted Ġ= Ġengine . compute () Ġ} ĊĊĠĠĠ Ġ@ Tear Down ( Level . Invocation ) ĊĠĠĠ Ġfun Ġget Delta () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġencrypted . write (). csv ( ba os ) ĊĠĠĠĠĠĠĠ Ġdelt as . add ( ba os . size () Ġ- Ġinitial Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Tear Down ( Level . Trial ) ĊĠĠĠ Ġfun Ġget Mean Delta () Ġ{ ĊĠĠĠĠĠĠĠ Ġdelt as . sort () ĊĠĠĠĠĠĠĠ Ġval Ġmean Delta Ġ= Ġdelt as . average () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ""" $ params Ġ- Ġ$ rows . ĠInitial Ġsize : Ġ$ initial Size ĠBytes . ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Increment : Ġ${ String . format ("% . 3 f ", Ġmean Delta )} ĠBytes Ġ(${ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% . 3 f ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmean Delta Ġ/ Ġinitial Size Ġ* Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} %) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| Min : Ġ${ delt as [ 0 ] }. ĠMax : Ġ${ delt as [ delt as . last Index ]} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin () ĊĊĠĠĠĠĠĠĠ Ġprintln ( result ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Writer Ġ= ĠFile Writer ( size File , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfile Writer . write ( result ) ĊĠĠĠĠĠĠĠ Ġfile Writer . close () ĊĊĠĠĠĠĠĠĠ Ġdelt as . clear () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Output TimeUnit ( TimeUnit . MILLISECONDS ) Ċ @ W arm up ( iterations Ġ= Ġ 3 , Ġtime Ġ= Ġ 5 , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ @ Measurement ( iterations Ġ= Ġ 3 , Ġtime Ġ= Ġ 1 0 , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ @ State ( Scope . Benchmark ) Ċ class ĠMultiple Params De cryption Time Benchmark Ġ{ ĊĊĠĠĠ Ġ@ Param ( ĊĠĠĠĠĠĠĠ Ġ" FO PE _ 8 ", ĊĠĠĠĠĠĠĠ Ġ" FO PE _ 3 2 ", ĊĠĠĠĠĠĠĠ Ġ" FO PE _ 6 4 ", ĊĠĠĠĠĠĠĠ Ġ" PO RE _ 3 ", ĊĠĠĠĠĠĠĠ Ġ" PO RE _ 5 1 2 ", ĊĠĠĠĠĠĠĠ Ġ" PO RE _ 4 0 9 6 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 1 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 2 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 6 ", ĊĠĠĠĠĠĠĠ Ġ" H PC BC _ 8 " ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġparams : ĠMultiple Params Config ĊĊĠĠĠ Ġprivate Ġvar Ġrows Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdataset : ĠTable ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġencrypt Config : ĠEngine Configuration ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġengine : ĠG alo is Engine ĊĊĠĠĠ Ġ@ Setup ( Level . Trial ) ĊĠĠĠ Ġfun Ġload Dataset () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdataset Stream Ġ= Ġthis . java Class . getResource AsStream ("/ benchmark _ sample . csv ") ĊĠĠĠĠĠĠĠ Ġdataset Ġ= ĠTable . read (). csv ( dataset Stream ). retain Columns ( params . column ). in Range ( rows ) ĊĊĠĠĠĠĠĠĠ Ġencrypt Config Ġ= Ġcreate Engine Config ( params ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Setup ( Level . Invocation ) ĊĠĠĠ Ġfun Ġinit Engine () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġforces Ġa Ġnew Ġkey ĊĠĠĠĠĠĠĠ Ġval Ġencryption Engine Ġ= ĠG alo is Engine ( dataset , Ġencrypt Config ) ĊĠĠĠĠĠĠĠ Ġval Ġencrypted Dataset Ġ= Ġrun Blocking Ġ{ Ġencryption Engine . compute () Ġ} ĊĠĠĠĠĠĠĠ Ġengine Ġ= ĠG alo is Engine ( encrypted Dataset , Ġencryption Engine . tidy Configuration ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġdecrypt () Ġ= Ġrun Blocking Ġ{ Ġengine . compute () Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġstart Ġ= ĠLocalDateTime . now () ĊĠĠĠ Ġprintln (" ===== Ġ${ start . format ( DateTime Formatter . of Pattern (" yyyy - MM - dd ĠHH : mm : ss ")) } ĠB EN CH MARK ING ĠSTART ED Ġ=== ==" ) ĊĠĠĠ Ġval Ġopt Ġ= ĠOptions Builder () ĊĠĠĠĠĠĠĠ Ġ. include ( Baseline Benchmark :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġ. include ( Multiple Params Encryption Time And Size Benchmark :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġ. include ( Multiple Params De cryption Time Benchmark :: class . java . simple Name ) ĊĠĠĠĠĠĠĠ Ġ. should Do GC ( true ) ĊĠĠĠĠĠĠĠ Ġ. should Fail OnError ( true ) ĊĠĠĠĠĠĠĠ Ġ. fork s ( 1 ) ĊĠĠĠĠĠĠĠ Ġ. result Format ( Result Format Type . CSV ) ĊĠĠĠĠĠĠĠ Ġ. result (" benchmarks / multiple / benchmark _ result . csv ") ĊĠĠĠĠĠĠĠ Ġ. output (" benchmarks / multiple / benchmark _ output . log ") ĊĠĠĠĠĠĠĠ Ġ. mode ( Mode . Average Time ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ ĠRunner ( opt ). run () ĊĠĠĠ Ġval Ġstop Ġ= ĠLocalDateTime . now () ĊĠĠĠ Ġprintln (" ===== Ġ${ stop . format ( DateTime Formatter . of Pattern (" yyyy - MM - dd ĠHH : mm : ss ")) } ĠB EN CH MARK ING ĠFIN ISHED Ġ=== ==" ) ĊĠĠĠ Ġprintln (" ===== ĠEL AP SED ĠTIME : Ġ${ Duration . between ( start , Ġstop ). to Minutes ()} Ġminutes Ġ=== ==" ) Ċ }