package Ġtech . relay corp . relay net . wrappers . cms Ċ Ċ import Ġorg . bouncycastle . asn 1 . ASN 1 Integer Ċ import Ġorg . bouncycastle . asn 1 . ASN 1 Object Identifier Ċ import Ġorg . bouncycastle . asn 1 . DER Set Ċ import Ġorg . bouncycastle . asn 1 . DER Visible String Ċ import Ġorg . bouncycastle . asn 1 . cms . Attribute Ċ import Ġorg . bouncycastle . asn 1 . cms . Attribute Table Ċ import Ġorg . bouncycastle . asn 1 . nist . NIST Object Identifiers Ċ import Ġorg . bouncycastle . asn 1 . pkcs . PKCS Object Identifiers Ċ import Ġorg . bouncycastle . asn 1 . pkcs . RSA ES OA EP params Ċ import Ġorg . bouncycastle . asn 1 . x 5 0 9 . Algorithm Identifier Ċ import Ġorg . bouncycastle . cert . j ca j ce . J ca X 5 0 9 Certificate Converter Ċ import Ġorg . bouncycastle . cms . CMS Algorithm Ċ import Ġorg . bouncycastle . cms . CMS En velop ed Data Ċ import Ġorg . bouncycastle . cms . CMS En velop ed Data Generator Ċ import Ġorg . bouncycastle . cms . CMS Exception Ċ import Ġorg . bouncycastle . cms . CMS Process able ByteArray Ċ import Ġorg . bouncycastle . cms . Key Ag ree Recipient Id Ċ import Ġorg . bouncycastle . cms . Key Ag ree Recipient Information Ċ import Ġorg . bouncycastle . cms . Key Trans Recipient Id Ċ import Ġorg . bouncycastle . cms . Key Trans Recipient Information Ċ import Ġorg . bouncycastle . cms . Simple Attribute Table Generator Ċ import Ġorg . bouncycastle . cms . j ca j ce . J ce CMS Content Encrypt or Builder Ċ import Ġorg . bouncycastle . cms . j ca j ce . J ce KE K Recipient Info Generator Ċ import Ġorg . bouncycastle . cms . j ca j ce . J ce Key Ag ree En velop ed Recipient Ċ import Ġorg . bouncycastle . cms . j ca j ce . J ce Key Ag ree Recipient Info Generator Ċ import Ġorg . bouncycastle . cms . j ca j ce . J ce Key Trans En velop ed Recipient Ċ import Ġorg . bouncycastle . cms . j ca j ce . J ce Key Trans Recipient Info Generator Ċ import Ġorg . bouncycastle . crypto . Data Length Exception Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Enum Source Ċ import Ġtech . relay corp . relay net . BC _ PROVIDER Ċ import Ġtech . relay corp . relay net . Hash ing Algorithm Ċ import Ġtech . relay corp . relay net . KeyPair Set Ċ import Ġtech . relay corp . relay net . O IDs Ċ import Ġtech . relay corp . relay net . PD AC ert Path Ċ import Ġtech . relay corp . relay net . Symmetric Encryption Ċ import Ġtech . relay corp . relay net . issue Initial DH Key Certificate Ċ import Ġtech . relay corp . relay net . sha 2 5 6 Ċ import Ġtech . relay corp . relay net . wrappers . generate ECD H KeyPair Ċ import Ġtech . relay corp . relay net . wrappers . generate RSA KeyPair Ċ import Ġjava . util . Hashtable Ċ import Ġjavax . crypto . Key Generator Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNot Equals Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ private Ġval ĠP LA INT EXT Ġ= Ġ" hello ". toByteArray () Ċ Ċ private Ġval ĠOR IGIN ATOR _ KEY _ ID _ OID Ġ= ĠASN 1 Object Identifier (" 0 . 4 . 0 . 1 2 7 . 0 . 1 7 . 0 . 1 . 0 ") Ċ Ċ private Ġval ĠSESSION _ SEND ER _ KEY _ PAIR Ġ= Ġgenerate ECD H KeyPair () Ċ private Ġval ĠSESSION _ SEND ER _ KEY _ ID Ġ= Ġ 4 2 . to BigInteger () Ċ Ċ private Ġval ĠSESSION _ RE CI PI ENT _ KEY _ PAIR Ġ= Ġgenerate ECD H KeyPair () Ċ private Ġval ĠSESSION _ RE CI PI ENT _ CER TIFICATE Ġ= Ġissue Initial DH Key Certificate ( ĊĠĠĠ ĠSESSION _ RE CI PI ENT _ KEY _ PAIR . public , ĊĠĠĠ ĠKey Pair Set . PRIVATE _ ENDPOINT . private , ĊĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT , ĊĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT . expiry Date Ċ ) Ċ Ċ interface ĠRe cipient Info Test Ġ{ ĊĠĠĠ Ġfun Ġ` There Ġshould Ġbe Ġexactly Ġone ĠRe cipient Info `() Ċ } Ċ Ċ interface ĠEn crypted Content Info Test Ġ{ ĊĠĠĠ Ġfun Ġ` C iph ertext Ġcorresponding Ġto Ġplaintext Ġshould Ġbe Ġencaps ulated `() ĊĠĠĠ Ġfun Ġ` AES - CBC - 1 2 8 Ġshould Ġbe Ġused Ġby Ġdefault `() ĊĠĠĠ Ġfun Ġ` Symmetric Ġencryption Ġalgorithm Ġmay Ġbe Ġspecified Ġexplicitly `( ĊĠĠĠĠĠĠĠ Ġalgorithm : ĠSym metric Encryption ĊĠĠĠ Ġ) Ċ } Ċ Ċ interface ĠDecrypt Test Ġ{ ĊĠĠĠ Ġfun Ġ` De cryption Ġwith Ġthe Ġright Ġkey Ġshould Ġsucceed `() ĊĠĠĠ Ġfun Ġ` De cryption Ġwith Ġthe Ġwrong Ġkey Ġshould Ġfail `() Ċ } Ċ Ċ type alias ĠAttribute Hashtable Ġ= ĠHashtable < ASN 1 Object Identifier , ĠAttribute > Ċ Ċ class ĠEn velop ed Data Test Ġ{ ĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠSerialize Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` En velop ed Data Ġvalue Ġshould Ġbe ĠD ER - encoded `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserialization Ġ= Ġen velop ed Data . serialize () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠCMS En velop ed Data ( serialization ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠDeserialize Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Invalid ĠCMS ĠEn velop ed Data Ġserial izations Ġshould Ġbe Ġrefused `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize (" Not Ġreally ĠEn velop ed Data ". toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Value Ġshould Ġbe Ġa ĠD ER - encoded ĠCMS ĠEn velop ed Data ", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( exception . cause Ġis ĠCMS Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` En velop ed Data Ġshould Ġnot Ġhave Ġzero Ġrecipients `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcms En velop ed Data Generator Ġ= ĠCMS En velop ed Data Generator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbc En velop ed Data Ġ= Ġgenerate Bc En velop ed Data ( cms En velop ed Data Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( bc En velop ed Data . encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Exactly Ġone ĠRe cipient Info Ġis Ġrequired Ġ( got Ġ 0 )", Ġexception . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` En velop ed Data Ġvalue Ġshould Ġnot Ġhave Ġtwo Ġor Ġmore Ġrecipients `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcms En velop ed Data Generator Ġ= ĠCMS En velop ed Data Generator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx 5 0 9 Certificate Ġ= ĠJ ca X 5 0 9 Certificate Converter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Certificate ( PD AC ert Path . PRIVATE _ ENDPOINT . certificate Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrans Key Gen Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ce Key Trans Recipient Info Generator ( x 5 0 9 Certificate ). set Provider ( BC _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe Ġsame Ġrecipient Ġtwice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcms En velop ed Data Generator . add Recipient Info Generator ( trans Key Gen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcms En velop ed Data Generator . add Recipient Info Generator ( trans Key Gen ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbc En velop ed Data Ġ= Ġgenerate Bc En velop ed Data ( cms En velop ed Data Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( bc En velop ed Data . encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Exactly Ġone ĠRe cipient Info Ġis Ġrequired Ġ( got Ġ 2 )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Session less En velop ed Data Ġshould Ġbe Ġreturned Ġif ĠRe cipient Info Ġuses Ġkey Ġtransport `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Deserial ized Ġ= ĠEn velop ed Data . deserialize ( en velop ed Data . serialize ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( en velop ed Data Deserial ized Ġis ĠSession less En velop ed Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Session En velop ed Data Ġshould Ġbe Ġreturned Ġif ĠRe cipient Info Ġuses Ġkey Ġagreement `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Deserial ized Ġ= ĠEn velop ed Data . deserialize ( en velop ed Data . serialize ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( en velop ed Data Deserial ized Ġis ĠSession En velop ed Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Unsupported ĠRe cipient Info Ġtypes Ġshould Ġresult Ġin Ġan Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUse Ġa ĠK EK Recipient Info ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcms En velop ed Data Generator Ġ= ĠCMS En velop ed Data Generator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġke k Id Ġ= Ġbyte ArrayOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Gen Ġ= ĠKey Generator . getInstance (" AES ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Gen . init ( 1 2 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Generator Ġ= ĠJ ce KE K Recipient Info Generator ( ke k Id , Ġkey Gen . generate Key ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcms En velop ed Data Generator . add Recipient Info Generator ( recipient Info Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbc En velop ed Data Ġ= Ġgenerate Bc En velop ed Data ( cms En velop ed Data Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( bc En velop ed Data . encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported ĠRe cipient Info Ġ( got ĠK EK Recipient Information )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSession less En velop ed Data Test Ġ{ ĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠEncrypt Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠRe cipient Info Ġ: ĠRe cipient Info Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` There Ġshould Ġbe Ġexactly Ġone ĠRe cipient Info `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġen velop ed Data . bc En velop ed Data . recipient Infos . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Recipient Info Ġshould Ġbe Ġof Ġtype ĠKey Trans Recipient Info `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( recipient Info Ġis ĠKey Trans Recipient Information ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Key Trans Recipient Info Ġshould Ġuse Ġissuer And SerialNumber Ġchoice `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Trans Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( recipient Info . rid Ġis ĠKey Trans Recipient Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT . certificate Holder . issuer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( recipient Info . rid Ġas ĠKey Trans Recipient Id ). issuer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT . certificate Holder . serial Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( recipient Info . rid Ġas ĠKey Trans Recipient Id ). serial Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Key Trans Recipient Info Ġshould Ġuse ĠRSA - OA EP `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Trans Recipient Information ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPKCS Object Identifiers . id _ RSA ES _ OA EP . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Info . key Encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` RSA - OA EP Ġshould Ġbe Ġused Ġwith ĠSHA - 2 5 6 `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Trans Recipient Information ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo a ep Params Ġ= Ġrecipient Info . key Encryption Algorithm . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( oa ep Params Ġis ĠRSA ES OA EP params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN IST Object Identifiers . id _ sha 2 5 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo a ep Params . hash Algorithm . algorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` M GF Ġshould Ġbe ĠM GF 1 Ġwith ĠSHA - 2 5 6 `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Trans Recipient Information ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo a ep Params Ġ= Ġrecipient Info . key Encryption Algorithm . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( oa ep Params Ġis ĠRSA ES OA EP params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPKCS Object Identifiers . id _ mg f 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo a ep Params . mask Gen Algorithm . algorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN IST Object Identifiers . id _ sha 2 5 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( oa ep Params . mask Gen Algorithm . parameters Ġas ĠAlgorithm Identifier ). algorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` RSA - OA EP Ġshould Ġbe Ġused Ġwith Ġdefault ĠP Ġsource Ġalgorithm `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Trans Recipient Information ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo a ep Params Ġ= Ġrecipient Info . key Encryption Algorithm . parameters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( oa ep Params Ġis ĠRSA ES OA EP params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRSA ES OA EP params . DEFAULT _ P _ SOURCE _ ALGORITHM , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo a ep Params . p Source Algorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠEn crypted Content Info Ġ: ĠEn crypted Content Info Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` C iph ertext Ġcorresponding Ġto Ġplaintext Ġshould Ġbe Ġencaps ulated `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipients Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . recipients ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġrecipients . first () Ġas ĠKey Trans Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Ġ= ĠJ ce Key Trans En velop ed Recipient ( KeyPair Set . PRIVATE _ ENDPOINT . private ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Provider ( BC _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaintext Ġ= Ġrecipient Info . getContent ( recipient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( PL AINT EXT . asList (), Ġplaintext . asList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` AES - CBC - 1 2 8 Ġshould Ġbe Ġused Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP AY LOAD _ SYM METRIC _ CIPHER _ OID S [ Symmetric Encryption . AES _ 1 2 8 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Parameterized Test ( name Ġ= Ġ"{ 0 } Ġshould Ġbe Ġused Ġif Ġexplicitly Ġrequested ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Enum Source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` Symmetric Ġencryption Ġalgorithm Ġmay Ġbe Ġspecified Ġexplicitly `( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm : ĠSym metric Encryption ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession less En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymmetric Encryption Algorithm Ġ= Ġalgorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP AY LOAD _ SYM METRIC _ CIPHER _ OID S [ algorithm ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` There Ġshould Ġbe Ġno Ġun protected Attrs `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession less En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( en velop ed Data . bc En velop ed Data . un protected Attributes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠDecrypt Ġ: ĠDecrypt Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` De cryption Ġwith Ġthe Ġright Ġkey Ġshould Ġsucceed `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession less En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaintext Ġ= Ġen velop ed Data . decrypt ( KeyPair Set . PRIVATE _ ENDPOINT . private ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( PL AINT EXT . asList (), Ġplaintext . asList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` De cryption Ġwith Ġthe Ġwrong Ġkey Ġshould Ġfail `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession less En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanother KeyPair Ġ= Ġgenerate RSA KeyPair () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . decrypt ( another KeyPair . private ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Could Ġnot Ġdecrypt Ġvalue ", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( exception . cause Ġis ĠCMS Exception Ġ|| Ġexception . cause Ġis ĠData Length Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠValidation Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠRe cipient KeyId Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Recipient Ġkey Ġid Ġshould Ġnot Ġbe Ġa ĠSubject Key Identifier `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcms En velop ed Data Generator Ġ= ĠCMS En velop ed Data Generator () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrans Key Gen Ġ= ĠJ ce Key Trans Recipient Info Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsha 2 5 6 ( KeyPair Set . PRIVATE _ ENDPOINT . public . encoded ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Pair Set . PRIVATE _ ENDPOINT . public ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). set Provider ( BC _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcms En velop ed Data Generator . add Recipient Info Generator ( trans Key Gen ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbc En velop ed Data Ġ= Ġgenerate Bc En velop ed Data ( cms En velop ed Data Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe 're Ġactually Ġusing ĠSubject Key Identifier Ġbefore Ġthe Ġactual Ġtest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrid Ġ= Ġbc En velop ed Data . recipient Infos . first (). rid Ġas ĠKey Trans Recipient Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġrid . issuer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġrid . serial Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals ( null , Ġrid . subject Key Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( bc En velop ed Data . encoded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Required Ġrecipient Ġkey Ġid Ġto Ġbe ĠIss uer And SerialNumber Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( got ĠSubject Key Identifier )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠGet Recipient KeyId Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Key Ġid Ġshould Ġbe Ġreturned `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession less En velop ed Data . encrypt ( PL AINT EXT , ĠP DAC ert Path . PRIVATE _ ENDPOINT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP DAC ert Path . PRIVATE _ ENDPOINT . certificate Holder . serial Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( en velop ed Data . get Recipient KeyId () Ġas ĠRe cipient SerialNumber ). subject SerialNumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSession En velop ed Data Test Ġ{ ĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠEncrypt Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠRe cipient Info Ġ: ĠRe cipient Info Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` There Ġshould Ġbe Ġexactly Ġone ĠRe cipient Info `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġen velop ed Data . bc En velop ed Data . recipient Infos . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Recipient Info Ġshould Ġbe Ġof Ġtype ĠKey Ag ree Recipient Info `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( recipient Info Ġis ĠKey Ag ree Recipient Information ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Key Ag ree Recipient Info Ġshould Ġuse ĠE CD H Ġwith ĠSHA - 2 5 6 Ġand Ġthe ĠX 9 _ 6 3 ĠK DF `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Ag ree Recipient Information ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMS Algorithm . ECD H _ SHA 2 5 6 K DF . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Info . key Encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Parameterized Test ( name Ġ= Ġ"{ 0 } Ġshould Ġbe Ġused Ġif Ġexplicitly Ġrequested ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Enum Source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Hash ing Ġalgorithm Ġmay Ġbe Ġspecified Ġexplicitly `( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm : ĠHash ing Algorithm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhashing Algorithm Ġ= Ġalgorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Ag ree Recipient Information ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe cd h Algorithm OID Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession En velop ed Data . ec dh Algorithm By Hash ing Algorithm [ algorithm ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe cd h Algorithm OID . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Info . key Encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Recipient Ġkey Ġshould Ġbe Ġencrypted Ġwith ĠAES - 1 2 8 Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Ag ree Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Cipher Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Info . key Encryption Algorithm . parameters Ġas ĠAlgorithm Identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMS Algorithm . AES 1 2 8 _ WRAP . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Cipher . algorithm . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Parameterized Test ( name Ġ= Ġ"{ 0 }- KW Ġshould Ġbe Ġused Ġif Ġexplicitly Ġrequested ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Enum Source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Cipher Ġfor Ġrecipient Ġkey Ġciphertext Ġmay Ġbe Ġspecified Ġexplicitly `( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm : ĠSym metric Encryption ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymmetric Encryption Algorithm Ġ= Ġalgorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Ag ree Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Cipher Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Info . key Encryption Algorithm . parameters Ġas ĠAlgorithm Identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Key Cipher Ġ= ĠKEY _ WRAP _ ALG ORITH MS [ algorithm ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Key Cipher . id , Ġkey Cipher . algorithm . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠRe cipient Info As Certificate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Key Ag ree Recipient Identifier Ġmay Ġuse ĠIss uer And SerialNumber `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Ag ree Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( recipient Info . rid Ġis ĠKey Ag ree Recipient Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Key Ag ree Recipient Id Ġ= ĠKey Ag ree Recipient Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE . certificate Holder . issuer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE . certificate Holder . serial Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Key Ag ree Recipient Id , Ġrecipient Info . rid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠRe cipient Info As PublicKey Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġrecipient KeyId Ġ= Ġ" the Ġid ". toByteArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Key Ag ree Recipient Identifier Ġshould Ġuse ĠRe cipient Key Identifier `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient KeyId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ KEY _ PAIR . public , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . first () Ġas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Ag ree Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( recipient Info . rid Ġis ĠKey Ag ree Recipient Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Key Ag ree Recipient Id Ġ= ĠKey Ag ree Recipient Id ( recipient KeyId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected Key Ag ree Recipient Id , Ġrecipient Info . rid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Recipient Ġpublic Ġkey Ġshould Ġbe Ġused `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient KeyId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ KEY _ PAIR . public , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipients Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . recipients ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġrecipients . first () Ġas ĠKey Ag ree Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Ġ= ĠJ ce Key Ag ree En velop ed Recipient ( SESSION _ RE CI PI ENT _ KEY _ PAIR . private ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Provider ( BC _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaintext Ġ= Ġrecipient Info . getContent ( recipient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( PL AINT EXT . asList (), Ġplaintext . asList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠEn crypted Content Info Ġ: ĠEn crypted Content Info Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` C iph ertext Ġcorresponding Ġto Ġplaintext Ġshould Ġbe Ġencaps ulated `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipients Ġ= Ġen velop ed Data . bc En velop ed Data . recipient Infos . recipients ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Ġ= Ġrecipients . first () Ġas ĠKey Ag ree Recipient Information ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Ġ= ĠJ ce Key Ag ree En velop ed Recipient ( SESSION _ RE CI PI ENT _ KEY _ PAIR . private ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Provider ( BC _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaintext Ġ= Ġrecipient Info . getContent ( recipient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( PL AINT EXT . asList (), Ġplaintext . asList ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` AES - CBC - 1 2 8 Ġshould Ġbe Ġused Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP AY LOAD _ SYM METRIC _ CIPHER _ OID S [ Symmetric Encryption . AES _ 1 2 8 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Parameterized Test ( name Ġ= Ġ"{ 0 } Ġshould Ġbe Ġused Ġif Ġexplicitly Ġrequested ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Enum Source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` Symmetric Ġencryption Ġalgorithm Ġmay Ġbe Ġspecified Ġexplicitly `( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalgorithm : ĠSym metric Encryption ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsymmetric Encryption Algorithm Ġ= Ġalgorithm ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP AY LOAD _ SYM METRIC _ CIPHER _ OID S [ algorithm ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . bc En velop ed Data . encryption Alg OID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠUn protected Attrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Generated ĠE CD H Ġkey Ġid Ġshould Ġbe Ġincluded `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun protected Attrs Ġ= Ġen velop ed Data . bc En velop ed Data . un protected Attributes ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Id Attribute Ġ= Ġun protected Attrs . get ( ORIGIN ATOR _ KEY _ ID _ OID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġkey Id Attribute . attr Values . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Id Value Ġ= Ġkey Id Attribute . attr Values . getObject At ( 0 ) Ġas ĠASN 1 Integer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ SEND ER _ KEY _ ID , Ġkey Id Value . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠDecrypt Ġ: ĠDecrypt Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` De cryption Ġwith Ġthe Ġright Ġkey Ġshould Ġsucceed `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaintext Ġ= Ġen velop ed Data . decrypt ( SESSION _ RE CI PI ENT _ KEY _ PAIR . private ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( PL AINT EXT . asList (), Ġplaintext . asList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ` De cryption Ġwith Ġthe Ġwrong Ġkey Ġshould Ġfail `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanother KeyPair Ġ= Ġgenerate ECD H KeyPair () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen velop ed Data . decrypt ( another KeyPair . private ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Could Ġnot Ġdecrypt Ġvalue ", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( exception . cause Ġis ĠCMS Exception Ġ|| Ġexception . cause Ġis ĠData Length Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠGet Recipient KeyId Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Serial Ġnumber Ġshould Ġbe Ġreturned Ġif Ġrecipient Ġuses ĠIss uer And SerialNumber `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient KeyId Ġ= Ġen velop ed Data . get Recipient KeyId () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( recipient KeyId Ġis ĠRe cipient SerialNumber ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE . certificate Holder . serial Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient KeyId . subject SerialNumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Key Ġidentifier Ġshould Ġbe Ġreturned Ġif Ġrecipient Ġuses ĠRe cipient Key Identifier `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient KeyId Ġ= Ġ" the Ġid ". toByteArray () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient KeyId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ KEY _ PAIR . public , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Recipient KeyId Ġ= Ġen velop ed Data . get Recipient KeyId () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( actual Recipient KeyId Ġis ĠRe cipient Key Identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( recipient KeyId . asList (), Ġactual Recipient KeyId . id . asList ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠGet Origin ator Key Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Key Ġid Ġshould Ġbe Ġreturned `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorigin ator KeyId Ġ= Ġen velop ed Data . get Origin ator Key () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ SEND ER _ KEY _ ID , Ġorigin ator KeyId . key Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Origin ator ĠDH Ġpublic Ġkey Ġshould Ġbe Ġreturned Ġif Ġit Ġis Ġvalid `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Ġ= ĠSession En velop ed Data . encrypt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP LA INT EXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ RE CI PI ENT _ CER TIFICATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorigin ator KeyId Ġ= Ġen velop ed Data . get Origin ator Key () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR . public . encoded . asList (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin ator KeyId . publicKey . encoded . asList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠValidation Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠUn protected Attrs Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` un protected Attrs Ġshould Ġbe Ġpresent `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Serialized Ġ= Ġgenerate En velop ed Data ( null ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( en velop ed Data Serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" un protected Attrs Ġis Ġmissing ", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` un protected Attrs Ġshould Ġnot Ġbe Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Serialized Ġ= Ġgenerate En velop ed Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute Hashtable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( en velop ed Data Serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" un protected Attrs Ġis Ġempty ", Ġexception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Nested ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Ġclass ĠOrig inator KeyId Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Call Ġshould Ġfail Ġif Ġorigin ator Ġkey Ġid Ġis Ġmissing `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun protected Attrs Ġ= ĠAttribute Hashtable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġir relevant OID Ġ= ĠASN 1 Object Identifier (" 1 . 2 . 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun protected Attrs [ ir relevant OID ] Ġ= ĠAttribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġir relevant OID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ER Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Serialized Ġ= Ġgenerate En velop ed Data ( un protected Attrs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( en velop ed Data Serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Origin ator Ġkey Ġid Ġis Ġmissing Ġfrom Ġun protected Attrs ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Call Ġshould Ġfail Ġif Ġattribute Ġfor Ġorigin ator Ġkey Ġid Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun protected Attrs Ġ= ĠAttribute Hashtable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun protected Attrs [ O IDs . ORIGIN ATOR _ EP HE MER AL _ CERT _ SERIAL _ NUMBER ] Ġ= ĠAttribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO IDs . ORIGIN ATOR _ EP HE MER AL _ CERT _ SERIAL _ NUMBER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ER Set () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Serialized Ġ= Ġgenerate En velop ed Data ( un protected Attrs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( en velop ed Data Serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Origin ator Ġkey Ġid Ġis Ġempty ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Call Ġshould Ġfail Ġif Ġattribute Ġfor Ġorigin ator Ġkey Ġid Ġis Ġmulti - valu ed `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun protected Attrs Ġ= ĠAttribute Hashtable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun protected Attrs [ O IDs . ORIGIN ATOR _ EP HE MER AL _ CERT _ SERIAL _ NUMBER ] Ġ= ĠAttribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO IDs . ORIGIN ATOR _ EP HE MER AL _ CERT _ SERIAL _ NUMBER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ER Set ( array Of ( ASN 1 Integer ( 3 ), ĠASN 1 Integer ( 5 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Serialized Ġ= Ġgenerate En velop ed Data ( un protected Attrs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( en velop ed Data Serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Origin ator Ġkey Ġid Ġhas Ġmultiple Ġvalues ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ` Call Ġshould Ġfail Ġif Ġattribute Ġfor Ġorigin ator Ġkey Ġid Ġis Ġnot ĠINTEGER `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun protected Attrs Ġ= ĠAttribute Hashtable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun protected Attrs [ O IDs . ORIGIN ATOR _ EP HE MER AL _ CERT _ SERIAL _ NUMBER ] Ġ= ĠAttribute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO IDs . ORIGIN ATOR _ EP HE MER AL _ CERT _ SERIAL _ NUMBER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD ER Set ( array Of ( DER Visible String (" not Ġa Ġnumber "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen velop ed Data Serialized Ġ= Ġgenerate En velop ed Data ( un protected Attrs ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < En velop ed DataException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEn velop ed Data . deserialize ( en velop ed Data Serialized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Origin ator Ġkey Ġid Ġis Ġnot Ġan ĠINTEGER ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġgenerate En velop ed Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun protected Attrs : ĠAttribute Hashtable ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcms En velop ed Data Generator Ġ= ĠCMS En velop ed Data Generator () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient Info Generator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ce Key Ag ree Recipient Info Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMS Algorithm . ECD H _ SHA 2 5 6 K DF , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR . private , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSESSION _ SEND ER _ KEY _ PAIR . public , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCMS Algorithm . AES 1 2 8 _ WRAP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). set Provider ( BC _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipient X 5 0 9 Certificate Ġ= ĠJ ca X 5 0 9 Certificate Converter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Certificate ( SESSION _ RE CI PI ENT _ CER TIFICATE . certificate Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipient Info Generator . add Recipient ( recipient X 5 0 9 Certificate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcms En velop ed Data Generator . add Recipient Info Generator ( recipient Info Generator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( un protected Attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun protected Attrs Generator Ġ= ĠSimple Attribute Table Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttribute Table ( un protected Attrs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcms En velop ed Data Generator . set Un protected Attribute Generator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun protected Attrs Generator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbc En velop ed Data Ġ= Ġgenerate Bc En velop ed Data ( cms En velop ed Data Generator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbc En velop ed Data . encoded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġgenerate Bc En velop ed Data ( ĊĠĠĠ Ġcms En velop ed Data Generator : ĠCMS En velop ed Data Generator Ċ ): ĠCMS En velop ed Data Ġ{ ĊĠĠĠ Ġval Ġmsg Ġ= ĠCMS Process able ByteArray ( PL AINT EXT ) ĊĠĠĠ Ġval Ġencrypt or Builder Ġ= ĊĠĠĠĠĠĠĠ ĠJ ce CMS Content Encrypt or Builder ( CMS Algorithm . AES 1 2 8 _ CBC ). set Provider ( BC _ PROVIDER ) ĊĠĠĠ Ġreturn Ġcms En velop ed Data Generator . generate ( msg , Ġencrypt or Builder . build ()) Ċ } Ċ