package Ġe hn . tech iop . h cert . kotlin . crypto ĊĊ Ċ import Ġe hn . tech iop . h cert . kotlin . crypto . P ki Utils Ċ import Ġe hn . tech iop . h cert . kotlin . trust . ContentType Ċ import Ġkotlinx . datetime . Clock Ċ import Ġorg . bouncycastle . asn 1 . pkcs . PrivateKey Info Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider Ċ import Ġorg . bouncycastle . openssl . PEM Parser Ċ import Ġorg . bouncycastle . openssl . j ca j ce . J ca PEM Key Converter Ċ import Ġorg . bouncycastle . openssl . j ca j ce . J ca PKCS 8 Generator Ċ import Ġjava . security . KeyPair Generator Ċ import Ġjava . security . Security Ċ import Ġjava . security . cert . Certificate Factory Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjava . security . interfaces . E CP rivate Key Ċ import Ġjava . security . interfaces . RS AP rivate Key Ċ Ċ actual Ġclass ĠCrypto Adapter Ġ{ ĊĊĠĠĠ Ġactual Ġval ĠprivateKey : ĠPriv Key ĊĠĠĠ Ġactual Ġval ĠpublicKey : ĠPub Key ĊĠĠĠ Ġactual Ġval Ġalgorithm : ĠC wt Algorithm ĊĠĠĠ Ġactual Ġval ĠprivateKey Encoded : ĠByteArray ĊĠĠĠ Ġactual Ġval Ġcertificate : ĠCertificate Adapter ĊĊĠĠĠ Ġactual Ġconstructor ( key Type : ĠKey Type , Ġkey Size : ĠInt , ĠcontentType : ĠList < ContentType >, Ġclock : ĠClock ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠĠĠĠĠĠĠ Ġval Ġkey Pair Ġ= Ġwhen Ġ( key Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Type . EC Ġ-> ĠKey Pair Generator . getInstance (" EC ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġinitialize ( key Size ) Ġ}. gen KeyPair () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Type . RSA Ġ-> ĠKey Pair Generator . getInstance (" RSA ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġinitialize ( key Size ) Ġ}. gen KeyPair () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠprivateKey Ġ= ĠJ vm Priv Key ( key Pair . private ) ĊĠĠĠĠĠĠĠ ĠpublicKey Ġ= ĠJ vm PubKey ( key Pair . public ) ĊĠĠĠĠĠĠĠ Ġalgorithm Ġ= Ġwhen Ġ( key Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Type . EC Ġ-> Ġif Ġ( key Size Ġ== Ġ 3 8 4 ) ĠC wt Algorithm . ECD SA _ 3 8 4 Ġelse ĠC wt Algorithm . ECD SA _ 2 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKey Type . RSA Ġ-> ĠC wt Algorithm . RSA _ PSS _ 2 5 6 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠprivateKey Encoded Ġ= ĠJ ca PKCS 8 Generator ( key Pair . private , Ġnull ). generate (). content ĊĠĠĠĠĠĠĠ Ġcertificate Ġ= ĠP ki Utils . self Sign Certificate ( privateKey , ĠpublicKey , Ġkey Size , ĠcontentType , Ġclock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġconstructor ( pem Encoded PrivateKey : ĠString , Ġpem Encoded Certificate : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSecurity . add Provider ( Bo unc y Castle Provider ()) ĊĠĠĠĠĠĠĠ Ġval Ġread Ġ= ĠPEM Parser ( pem Encoded PrivateKey . reader ()). read Object () Ġas ĠPrivate Key Info ĊĠĠĠĠĠĠĠ Ġval Ġnative PrivateKey Ġ= ĠJ ca PEM Key Converter (). get PrivateKey ( read ) ĊĠĠĠĠĠĠĠ Ġalgorithm Ġ= Ġwhen Ġ( native PrivateKey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE CP rivate Key Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( native PrivateKey . params . curve . field . field Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 5 6 Ġ-> ĠC wt Algorithm . ECD SA _ 2 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 8 4 Ġ-> ĠC wt Algorithm . ECD SA _ 3 8 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" KeyType Ġunknown ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRS AP rivate Key Ġ-> ĠC wt Algorithm . RSA _ PSS _ 2 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" KeyType Ġunknown ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġx 5 0 9 Certificate Ġ= ĠCertificate Factory . getInstance (" X . 5 0 9 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. generate Certificate ( pem Encoded Certificate . byte InputStream ()) Ġas ĠX 5 0 9 Certificate ĊĠĠĠĠĠĠĠ Ġcertificate Ġ= ĠCertificate Adapter ( x 5 0 9 Certificate ) ĊĠĠĠĠĠĠĠ ĠprivateKey Ġ= ĠJ vm Priv Key ( native PrivateKey ) ĊĠĠĠĠĠĠĠ ĠpublicKey Ġ= ĠJ vm PubKey ( x 5 0 9 Certificate . publicKey ) ĊĠĠĠĠĠĠĠ ĠprivateKey Encoded Ġ= ĠJ ca PKCS 8 Generator ( native PrivateKey , Ġnull ). generate (). content ĊĠĠĠ Ġ} Ċ Ċ }