package Ġorg . bouncycastle . k crypto Ċ Ċ import ĠK Crypto Services . Companion . helper Ċ import Ġorg . bouncycastle . asn 1 . pkcs . PKCS Object Identifiers Ċ import Ġorg . bouncycastle . asn 1 . x 5 0 9 . Algorithm Identifier Ċ import Ġorg . bouncycastle . k crypto . spec . Alg Spec Ċ import Ġorg . bouncycastle . k crypto . spec . as ymmetric . OA EP Spec Ċ import Ġorg . bouncycastle . operator . j ca j ce . J ca Algorithm Parameters Converter Ċ import Ġjava . security . PublicKey Ċ import Ġjavax . crypto . Cipher Ċ import Ġjavax . crypto . spec . OA EP Parameter Spec Ċ Ċ private Ġclass ĠBase Encrypt or ( algorithm : ĠAl g Spec < Algorithm Identifier >, Ġpub Key : ĠPublicKey ) Ġ: ĠSingle Block Encrypt or < Algorithm Identifier > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġalgorithm Identifier : ĠAlgorithm Identifier ĊĊĠĠĠ Ġval Ġcipher : ĠCipher ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigest Name Ġ= Ġ( algorithm Ġas ĠO A EP Spec ). digest . algorithm Name ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġcipher Ġ= Ġhelper . create Cipher (" RSA / NONE /" Ġ+ Ġ" OA EP with " Ġ+ Ġdigest Name Ġ+ Ġ" and M GF 1 padding ") ĊĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . ENCRYPT _ MODE , Ġpub Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĊĠĠĠĠĠĠĠ Ġalgorithm Identifier Ġ= ĠJ ca Algorithm Parameters Converter (). get Algorithm Identifier ( PKCS Object Identifiers . id _ RSA ES _ OA EP , ĠO A EP Parameter Spec . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencrypt ( data : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . do Final ( data ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠBase Wrapper ( algorithm : ĠAl g Spec < Algorithm Identifier >, Ġpub Key : ĠPublicKey ) Ġ: ĠKey Wrapper < Algorithm Identifier > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġalgorithm Identifier : ĠAlgorithm Identifier ĊĊĠĠĠ Ġval Ġcipher : ĠCipher ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdigest Name Ġ= Ġ( algorithm Ġas ĠO A EP Spec ). digest . algorithm Name ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġcipher Ġ= Ġhelper . create Cipher (" RSA / NONE /" Ġ+ Ġ" OA EP with " Ġ+ Ġdigest Name Ġ+ Ġ" and M GF 1 padding ") ĊĊĠĠĠĠĠĠĠ Ġcipher . init ( Cipher . WRAP _ MODE , Ġpub Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĊĠĠĠĠĠĠĠ Ġalgorithm Identifier Ġ= ĠJ ca Algorithm Parameters Converter (). get Algorithm Identifier ( PKCS Object Identifiers . id _ RSA ES _ OA EP , ĠO A EP Parameter Spec . DEFAULT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrap ( key : ĠSym metric Key ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . wrap (( key Ġas ĠBase Symmetric Key )._ key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġwrap ( key : ĠSign ing Key ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcipher . wrap (( key Ġas ĠBase Signing Key )._ priv Key ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠBase Encryption Key ( private Ġvar Ġpub Key : ĠPublicKey ) Ġ: ĠEncryption Key Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġencoding Ġ= Ġpub Key . encoded ĊĊĠĠĠ Ġoverride Ġfun Ġsingle Block Encrypt or ( alg Spec : ĠAl g Spec < Algorithm Identifier >): ĠSingle Block Encrypt or < Algorithm Identifier > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase Encrypt or ( alg Spec , Ġpub Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġkey Wrapper ( alg Spec : ĠAl g Spec < Algorithm Identifier >): ĠKey Wrapper < Algorithm Identifier > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase Wrapper ( alg Spec , Ġpub Key ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġpublic Ġkey Ġfrom Ġan Ġas ymmetric Ġkey Ġpair . Ċ Ġ*/ Ċ interface ĠEncryption Key : ĠWr apping Key , Ġorg . bouncycastle . k crypto . PublicKey Ġ{ ĊĠĠĠ Ġfun Ġsingle Block Encrypt or ( alg Spec : ĠAl g Spec < Algorithm Identifier >): ĠSingle Block Encrypt or < Algorithm Identifier > Ċ }