package Ġcom . stab oss . crypto . attack Ċ Ċ import Ġcom . stab oss . crypto . rsa . RSA Ċ import Ġcom . stab oss . crypto . util . rsa Tool Ċ import Ġjava . math . BigInteger Ċ Ċ /** Ċ Ġ* ĠLow Ġpublic Ġexponent Ġattack Ċ Ġ*/ Ċ object ĠLow Public Exponent Attack Ġ: ĠAttack Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġp Mod ( x : ĠBigInteger , Ġn : ĠBigInteger ): ĠBigInteger Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( x . pow ( 2 ) Ġ+ ĠBigInteger . ONE ). mod ( n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattack ( message : ĠBigInteger , Ġrsa : ĠRSA ): ĠBigInteger ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġrsa . key Pair . publicKey . public Exponent ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġrsa . key Pair . publicKey . modulus ĊĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= ĠBigInteger (" 2 ") ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= ĠBigInteger (" 2 ") ĊĠĠĠĠĠĠĠ Ġvar Ġd Ġ= ĠBigInteger (" 1 ") ĊĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( d Ġ== ĠBigInteger . ONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġp Mod ( x , Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġp Mod ( p Mod ( y , Ġn ), Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ= Ġ( x Ġ- Ġy ). abs (). gcd ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= ĠBigInteger . ONE ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( d Ġ== Ġn ) ĊĊĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġn Ġ/ Ġd ĊĠĠĠĠĠĠĠ Ġval Ġphi Ġ= Ġ( d Ġ- ĠBigInteger . ONE ) Ġ* Ġ( q Ġ- ĠBigInteger . ONE ) ĊĠĠĠĠĠĠĠ Ġval ĠprivateKey Ġ= Ġe . mod Inverse ( phi ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrsa Tool . mod ular Pow ( message , ĠprivateKey , Ġn ) ĊĠĠĠ Ġ} Ċ } Ċ