package Ġorg . bouncycastle . k crypto . dsl Ċ Ċ import Ġorg . bouncycastle . asn 1 . x 5 0 0 . X 5 0 0 Name Ċ import Ġorg . bouncycastle . asn 1 . x 5 0 9 . Algorithm Identifier Ċ import Ġorg . bouncycastle . k crypto .* Ċ import Ġorg . bouncycastle . k crypto . pkcs . PKCS 1 0 RequestBuilder Ċ import Ġorg . bouncycastle . k crypto . spec . Sig Alg Spec Ċ import Ġorg . bouncycastle . k crypto . spec . as ymmetric .* ĊĊ Ċ interface ĠSig Type Ċ { Ċ } Ċ Ċ interface ĠDig Sig Type : ĠSig Type Ċ { ĊĠĠĠ Ġfun Ġget Sig Alg Spec ( digest : ĠDigest , Ġid : ĠID ?): ĠSig Alg Spec Ċ } Ċ Ċ interface ĠNo Dig Sig Type : ĠSig Type Ċ { ĊĠĠĠ Ġfun Ġget Sig Alg Spec (): ĠSig Alg Spec Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor ĠPKCS 1 ĠSignature Ġtype . Ċ Ġ*/ Ċ class ĠPKCS 1 Sig Type : ĠDig Sig Type Ċ { ĊĠĠĠ Ġoverride Ġfun Ġget Sig Alg Spec ( digest : ĠDigest , Ġid : ĠID ?): ĠSig Alg Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPKCS 1 Sig Spec ( digest ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor ĠE CD SA Ġsignature Ġtype . Ċ Ġ*/ Ċ class ĠEC DS AS ig Type : ĠDig Sig Type Ċ { ĊĠĠĠ Ġoverride Ġfun Ġget Sig Alg Spec ( digest : ĠDigest , Ġid : ĠID ?): ĠSig Alg Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEC DS AS ig Spec ( digest ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor ĠD SA Ġsignature Ġtype . Ċ Ġ*/ Ċ class ĠDS AS ig Type : ĠDig Sig Type Ċ { ĊĠĠĠ Ġoverride Ġfun Ġget Sig Alg Spec ( digest : ĠDigest , Ġid : ĠID ?): ĠSig Alg Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDS AS ig Spec ( digest ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor ĠEd D SA Ġsignature Ġtype . Ċ Ġ*/ Ċ class ĠEd DS AS ig Type : ĠNo Dig Sig Type Ċ { ĊĠĠĠ Ġoverride Ġfun Ġget Sig Alg Spec (): ĠSig Alg Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEd DS AS ig Spec () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor ĠSM 2 Ġsignature Ġtype . Ċ Ġ*/ Ċ class ĠSM 2 Sig Type : ĠDig Sig Type Ċ { ĊĠĠĠ Ġoverride Ġfun Ġget Sig Alg Spec ( digest : ĠDigest , Ġid : ĠID ?): ĠSig Alg Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSM 2 Sig Spec ( digest , Ġid ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor Ġblock Ġwhose Ġmethods Ġwill Ġreturn Ġa Ġcalculator Ġor Ġa Ġpk cs 1 0 RequestBuilder Ċ Ġ*/ Ċ class ĠSignature Block Ċ { ĊĠĠĠ Ġfun Ġsignature Calculator (): ĠSignature Calculator < Algorithm Identifier > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsignature . signing Key . signature Calculator ( signature . get Sig Alg Spec ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpk cs 1 0 RequestBuilder ( subject : ĠX 5 0 0 Name , Ġverification Key : ĠPublicKey ): ĠPKCS 1 0 RequestBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPKCS 1 0 RequestBuilder ( signature . signing Key , Ġsignature . get Sig Alg Spec (), Ġsubject , Ġverification Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġsignature : ĠSignature Details ĊĊĠĠĠ Ġval ĠPKCS 1 v 1 dot 5 Ġ= ĠSignature Details ( this , ĠPKCS 1 Sig Type ()) ĊĠĠĠ Ġval ĠE CD SA Ġ= ĠSignature Details ( this , ĠEC DS AS ig Type ()) ĊĠĠĠ Ġval ĠD SA Ġ= ĠSignature Details ( this , ĠDS AS ig Type ()) ĊĠĠĠ Ġval ĠEd D SA Ġ= ĠSignature Details ( this , ĠEd DS AS ig Type ()) ĊĠĠĠ Ġval ĠSM 2 Ġ= ĠSignature Details ( this , ĠSM 2 Sig Type ()) ĊĊĠĠĠ Ġval Ġsha 2 2 4 Ġ= ĠDigest . SHA 2 2 4 ĊĠĠĠ Ġval Ġsha 2 5 6 Ġ= ĠDigest . SHA 2 5 6 ĊĠĠĠ Ġval Ġsha 3 8 4 Ġ= ĠDigest . SHA 3 8 4 ĊĠĠĠ Ġval Ġsha 5 1 2 Ġ= ĠDigest . SHA 5 1 2 ĊĠĠĠĠĊĠĠĠ Ġval ĠSM 3 Ġ= ĠDigest . SM 3 Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġfor Ġspecifying Ġthe Ġdetails Ġof Ġthe ĠSignature . Ċ Ġ*/ Ċ class ĠSignature Details ( val Ġparent : ĠSignature Block , Ġval Ġsig Type : ĠSig Type ) Ċ { ĊĠĠĠ Ġlateinit Ġvar Ġsigning Key : ĠSign ing Key ĊĊĠĠĠ Ġvar Ġid : ĠID ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdigest : ĠDigest ? Ġ= Ġnull ĊĊĠĠĠ Ġin fix Ġfun Ġwith ( digest : ĠDigest ): ĠSignature Details Ġ{ ĊĊĠĠĠĠĠĠĠ Ġparent . signature Ġ= Ġthis ; ĊĠĠĠĠĠĠĠ Ġthis . digest Ġ= Ġdigest ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġusing ( signing Key : ĠSign ing Key ): ĠSignature Details Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . signature Ġ= Ġthis ; ĊĠĠĠĠĠĠĠ Ġthis . signing Key Ġ= Ġsigning Key ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġusing ( de cryption Key : ĠDec ryption Key ): ĠSignature Details Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . signature Ġ= Ġthis ; ĊĠĠĠĠĠĠĠ Ġthis . signing Key Ġ= ĠBase Signing Key (( de cryption Key Ġas ĠBase De cryption Key )._ priv Key ); ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġand ( id : ĠID ): ĠSignature Details Ġ{ ĊĠĠĠĠĠĠĠ Ġparent . signature Ġ= Ġthis ; ĊĠĠĠĠĠĠĠ Ġthis . id Ġ= Ġid ĊĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Sig Alg Spec (): ĠSig Alg Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdig Ġ= Ġdigest ; ĊĠĠĠĠĠĠĠ Ġif Ġ( dig Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( sig Type Ġas ĠDig Sig Type ). get Sig Alg Spec ( dig , Ġid ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( sig Type Ġas ĠNo Dig Sig Type ). get Sig Alg Spec () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }