package Ġdg ca . verifier . app . decoder čĊč Ċ import ĠCO SE . Header Keys č Ċ import Ġandroid . annotation . Target Api č Ċ import Ġandroid . os . Build č Ċ import Ġandroid . util . Base 6 4 .* č Ċ import Ġcom . fasterxml . jackson . databind .* č Ċ import Ġcom . up o ke center . cb or . CB OR Object č Ċ import Ġdg ca . verifier . app . decoder . base 4 5 . Base 4 5 Decoder č Ċ import Ġdg ca . verifier . app . decoder . base 4 5 . Base 4 5 Service č Ċ import Ġdg ca . verifier . app . decoder . base 4 5 . Default Base 4 5 Service č Ċ import Ġdg ca . verifier . app . decoder . cb or . Cb or Service č Ċ import Ġdg ca . verifier . app . decoder . cb or . Default Cb or Service č Ċ import Ġdg ca . verifier . app . decoder . cb or . Default Green Certificate Mapper č Ċ import Ġdg ca . verifier . app . decoder . cb or . Green Certificate Mapper č Ċ import Ġdg ca . verifier . app . decoder . compression . Compressor Service č Ċ import Ġdg ca . verifier . app . decoder . compression . Default Compressor Service č Ċ import Ġdg ca . verifier . app . decoder . co se . Co se Service č Ċ import Ġdg ca . verifier . app . decoder . co se . Crypto Service č Ċ import Ġdg ca . verifier . app . decoder . co se . Default Co se Service č Ċ import Ġdg ca . verifier . app . decoder . co se . Verification Crypto Service č Ċ import Ġdg ca . verifier . app . decoder . c wt . C wt Header Keys č Ċ import Ġdg ca . verifier . app . decoder . model . Co se Data č Ċ import Ġdg ca . verifier . app . decoder . model . Green Certificate č Ċ import Ġdg ca . verifier . app . decoder . model . Verification Result č Ċ import Ġdg ca . verifier . app . decoder . prefix validation . Default Prefix Validation Service č Ċ import Ġdg ca . verifier . app . decoder . prefix validation . Prefix Validation Service č Ċ import Ġdg ca . verifier . app . decoder . schema . Default Schema Validator č Ċ import Ġdg ca . verifier . app . decoder . schema . Schema Validator č Ċ import Ġdg ca . verifier . app . decoder . services . X 5 0 9 č Ċ import Ġorg . bouncycastle . asn 1 .* č Ċ import Ġorg . bouncycastle . j ce . provider . Bo unc y Castle Provider č Ċ import Ġjava . io .* č Ċ import Ġjava . io . Closeable .* č Ċ import Ġjava . math . BigInteger č Ċ import Ġjava . security .* č Ċ import Ġjava . security . cert . Certificate Factory č Ċ import Ġjava . security . cert . X 5 0 9 Certificate č Ċ import Ġjava . security . spec .* č Ċ import Ġjava . util .* č Ċ import Ġjava . util . zip .* č Ċ import Ġjavax . crypto .* č Ċ import Ġkotlin . collections . ArrayList čĊč Ċ private Ġval Ġgreen Certificate Mapper : ĠGreen Certificate Mapper Ġ= ĠDefault Green Certificate Mapper (); čĊč Ċ internal Ġval ĠCH _ ET Ġ= Ġ" 0 1 2 3 4 5 6 7 8 9 ABCDEF GH IJ KL MN OP Q RST UV W XYZ Ġ$ % * +- ./ :" . toCharArray () č Ċ internal Ġconst Ġval ĠCH _ ET _ LENGTH Ġ= Ġ 4 5 č Ċ internal Ġconst Ġval ĠCH _ ET _ LENGTH _ S QUARE D Ġ= Ġ 4 5 Ġ* Ġ 4 5 čĊč Ċ internal Ġconst Ġval ĠMIN _ CH _ VAL Ġ= Ġ 3 2 č Ċ internal Ġconst Ġval ĠRE VERSE _ CH _ SI Ġ= Ġ 5 9 č Ċ internal Ġval ĠRE VERSE _ CH _ ET Ġ= Ġint ArrayOf ( čĊĠĠĠĠ 3 6 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ 3 7 , Ġ 3 8 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , čĊĠĠĠĠ 3 9 , Ġ 4 0 , Ġ- 1 , Ġ 4 1 , Ġ 4 2 , Ġ 4 3 , Ġ 0 , Ġ 1 , Ġ 2 , Ġ 3 , čĊĠĠĠĠ 4 , Ġ 5 , Ġ 6 , Ġ 7 , Ġ 8 , Ġ 9 , Ġ 4 4 , Ġ- 1 , Ġ- 1 , Ġ- 1 , čĊĠĠĠ Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ 1 0 , Ġ 1 1 , Ġ 1 2 , Ġ 1 3 , Ġ 1 4 , Ġ 1 5 , Ġ 1 6 , čĊĠĠĠĠ 1 7 , Ġ 1 8 , Ġ 1 9 , Ġ 2 0 , Ġ 2 1 , Ġ 2 2 , Ġ 2 3 , Ġ 2 4 , Ġ 2 5 , Ġ 2 6 , čĊĠĠĠĠ 2 7 , Ġ 2 8 , Ġ 2 9 , Ġ 3 0 , Ġ 3 1 , Ġ 3 2 , Ġ 3 3 , Ġ 3 4 , Ġ 3 5 č Ċ ) čĊč Ċ private Ġfun ĠByteArray . de compress Base 4 5 Decoded Data (): ĠByteArray Ġ{ čĊĠĠĠ Ġ// ĠZ LIB Ġmagic Ġheaders čĊĠĠĠ Ġreturn Ġif Ġ( this . size Ġ>= Ġ 2 Ġ&& Ġthis [ 0 ] Ġ== Ġ 0 x 7 8 . to Byte () Ġ&& Ġ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ== Ġ 0 x 0 1 . to Byte () Ġ|| Ġ// ĠLevel Ġ 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ== Ġ 0 x 5 E . to Byte () Ġ|| Ġ// ĠLevel Ġ 2 Ġ- Ġ 5 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ== Ġ 0 x 9 C . to Byte () Ġ|| Ġ// ĠLevel Ġ 6 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ== Ġ 0 x DA . to Byte () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// My Ġactual Ġinput Ġis Ġ 0 x 9 C Ġper Ġthis [ 1 ] čĊĠĠĠĠĠĠĠ ĠIn flater InputStream ( this . inputStream ()). read Bytes () čĊĠĠĠ Ġ} Ġelse Ġthis č Ċ } čĊč Ċ private Ġfun ĠByteArray . decode Co se (): ĠC ose Data Ġ{ čĊĠĠĠ Ġval Ġmessage Object Ġ= ĠCB OR Object . Decode From Bytes ( this ) čĊĠĠĠ Ġval Ġcontent Ġ= Ġmessage Object [ 2 ]. Get ByteString () Ġ// CB OR čĊĠĠĠ Ġval Ġrgb Protected Ġ= Ġmessage Object [ 0 ]. Get ByteString () čĊĠĠĠ Ġval Ġrgb Un protected Ġ= Ġmessage Object [ 1 ] čĊĠĠĠ Ġval Ġkey Ġ= ĠHeader Keys . K ID . As CB OR () čĊĠĠĠ Ġif Ġ(! CB OR Object . Decode From Bytes ( rgb Protected ). keys . contains ( key )) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġobj un protected Ġ= Ġrgb Un protected . get ( key ). Get ByteString () // K ID čĊĠĠĠĠĠĠĠ Ġreturn ĠC ose Data ( content , Ġobj un protected )// cb or , Ġkid čĊĠĠĠ Ġ} čĊĠĠĠ Ġval Ġobj Protected Ġ= ĠCB OR Object . Decode From Bytes ( rgb Protected ). get ( key ). Get ByteString () // K ID čĊĠĠĠ Ġreturn ĠC ose Data ( content , Ġobj Protected ) č Ċ } čĊč Ċ private Ġfun ĠByteArray . decode Green Certificate (): ĠGreen Certificate Ġ{ čĊĠĠĠ Ġval Ġmap Ġ= ĠCB OR Object . Decode From Bytes ( this ) Ġ// map : Ġ{ 4 : Ġ 1 6 8 3 8 8 0 0 1 7 , Ġ 6 : Ġ 1 6 2 2 9 7 3 2 5 2 , Ġ 1 : Ġ" GR ", Ġ- 2 6 0 : Ġ{ 1 : Ġ{" t ": Ġ[{" sc " .... čĊĠĠĠ Ġval Ġh cert Ġ= Ġmap [ C wt Header Keys . HC ERT . as CB OR ()] Ġ// h cert : Ġ{ 1 : Ġ{" t ": Ġ[{" sc " ... čĊĠĠĠ Ġval Ġcb or Object Ġ= Ġh cert [ CB OR Object . From Object ( 1 )] Ġ// cb or Obj : Ġ{" t ": Ġ[{" sc " ... čĊĠĠĠ Ġreturn Ġgreen Certificate Mapper . readValue ( cb or Object ) č Ċ } čĊč Ċ private Ġfun ĠGreen Certificate . encode Certificate ( original : ByteArray ): ĠByteArray { čĊĠĠĠ Ġvar Ġob m : ĠObjectMapper Ġ= ĠObjectMapper () čĊĠĠĠ Ġvar Ġmap Ġ= ĠCB OR Object . Decode From Bytes ( original ) Ġ// map : Ġ{ 4 : Ġ 1 6 8 3 8 8 0 0 1 7 , Ġ 6 : Ġ 1 6 2 2 9 7 3 2 5 2 , Ġ 1 : Ġ" GR ", Ġ- 2 6 0 : Ġ{ 1 : Ġ{" t ": Ġ[{" sc " .... čĊĠĠĠ Ġvar Ġh cert Ġ= Ġmap [ C wt Header Keys . HC ERT . as CB OR ()] Ġ// h cert : Ġ{ 1 : Ġ{" t ": Ġ[{" sc " ... čĊĠĠĠ Ġvar Ġor C BO Ġ= Ġh cert [ CB OR Object . From Object ( 1 )] Ġ// or C BO : Ġ{" t ": Ġ[{" sc " ... čĊĠĠĠ Ġ// I Ġneed Ġto Ġret rive Ġa ĠC bor Object Ġfrom Ġa ĠGreen Certificate čĊĠĠĠ Ġ// To Ġgreen Certificate Map pe Ġit 's Ġpassed Ġor C BO . toByteArray čĊĠĠĠ Ġvar Ġc bo Ġ= ĠCB OR Object . From Object ( or C BO . toString ()) čĊĠĠĠ Ġh cert [ CB OR Object . From Object ( 1 )] Ġ= Ġc bo čĊĠĠĠ Ġmap [ C wt Header Keys . HC ERT . as CB OR ()] Ġ= Ġh cert čĊĠĠĠ Ġreturn Ġmap . Encode ToBytes () č Ċ } čĊč Ċ private Ġfun ĠC ose Data . encode Co se ( de compressed : ĠByteArray ): ĠByteArray Ġ{ čĊĠĠĠ Ġvar Ġmessage Object Ġ= ĠCB OR Object . Decode From Bytes ( de compressed ) čĊĠĠĠ Ġvar Ġrgb Protected Ġ= Ġmessage Object [ 0 ]. Get ByteString () čĊĠĠĠ Ġval Ġrgb Un protected Ġ= Ġmessage Object [ 1 ] čĊĠĠĠ Ġval Ġcontent Ġ= Ġmessage Object [ 2 ]. Get ByteString () Ġ// CB OR čĊĠĠĠ Ġval Ġkey Ġ= ĠHeader Keys . K ID . As CB OR () čĊĠĠĠ Ġmessage Object . RemoveAt ( 2 ) čĊĠĠĠ Ġif Ġ(! CB OR Object . Decode From Bytes ( rgb Protected ). keys . contains ( key )) Ġ{ čĊĠĠĠĠĠĠĠ Ġmessage Object . RemoveAt ( 1 ) čĊĠĠĠĠĠĠĠ Ġmessage Object . Insert ( 1 , rgb Un protected . Set ( key , CB OR Object . From Object ( this . kid ))) Ġ// Maybe Ġthis Ġdoesn 't Ġwork ! čĊĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠ Ġvar Ġnew K id Ġ= ĠCB OR Object . Decode From Bytes ( rgb Protected ) čĊĠĠĠĠĠĠĠ Ġnew K id . set ( key , CB OR Object . From Object ( this . kid )) čĊĠĠĠĠĠĠĠ Ġrgb Protected Ġ= Ġnew K id . Encode ToBytes () čĊĠĠĠĠĠĠĠ Ġmessage Object . RemoveAt ( 0 ) čĊĠĠĠĠĠĠĠ Ġmessage Object . Insert ( 0 , rgb Protected ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġmessage Object . Insert ( 2 , this . cb or ) čĊĠĠĠ Ġreturn Ġmessage Object . Encode ToBytes () č Ċ } čĊč Ċ private Ġfun ĠByteArray . compress Base 4 5 Decoded Data (): ĠByteArray Ġ{ čĊĠĠĠ Ġreturn ĠDe flater InputStream ( this . inputStream ()). read Bytes () č Ċ } čĊč Ċ private Ġfun ĠMutable List < Byte >. replace String ( find : ĠString , Ġreplace : ĠString ): ĠMutable List < Byte > Ġ{ čĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġl fin = find . length čĊĠĠĠ Ġvar Ġl rep = replace . length čĊĠĠĠ Ġvar Ġi = 0 čĊĠĠĠ Ġvar Ġj = 0 čĊĠĠĠ Ġvar Ġtwo = 0 čĊĠĠĠ Ġfor ( b Ġin Ġthis ){ čĊĠĠĠĠĠĠĠ Ġif ( b == find [ 0 ]. to Byte ()){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( this [ i + 1 ]== find [ 1 ]. to Byte () Ġ&& Ġthis [ i + 2 ]== find [ 2 ]. to Byte ()){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġi čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠ Ġ} čĊĠĠĠ Ġj = 0 čĊĠĠĠ Ġi Ġ= Ġindex čĊĠĠĠ Ġif ( i != 0 ){ čĊĠĠĠĠĠĠĠ Ġif ( lf in < l rep ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] Ġ= Ġreplace [ j ]. to Byte () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} while ( j < lf in ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add ( i , Ġreplace [ j ]. to Byte ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} while ( j < l rep ) čĊĠĠĠĠĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( lf in == l rep ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] Ġ= Ġreplace [ j ]. to Byte () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} while ( j < l rep ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ i ] Ġ= Ġreplace [ j ]. to Byte () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} while ( j < l rep ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj -- čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remove At ( i ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} while ( j < lf in - 2 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġthis č Ċ } čĊč Ċ private Ġfun ĠByteArray . encode Base 4 5 (): ĠString Ġ{ čĊĠĠĠ Ġval Ġmap Ġ= ĠCH _ ET čĊĠĠĠ Ġval Ġdata Size Ġ= Ġsize čĊĠĠĠ Ġval Ġlast Group Size Ġ= Ġdata Size Ġ% Ġ 2 čĊĠĠĠ Ġval Ġlength Ġ= Ġdata Size Ġ/ Ġ 2 Ġ* Ġ 3 Ġ+ Ġif Ġ( last Group Size Ġ!= Ġ 0 ) Ġ 2 Ġelse Ġ 0 čĊĠĠĠ Ġval Ġout Ġ= ĠChar Array ( length ) čĊĠĠĠ Ġval Ġend Ġ= Ġdata Size Ġ- Ġlast Group Size čĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 čĊčĊĠĠĠ Ġwhile Ġ( i Ġ< Ġend ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġ( this [ i ++ ]. toInt () Ġand Ġ 0 xFF Ġshl Ġ 8 ) Ġ+ Ġ( this [ i ++ ]. toInt () Ġand Ġ 0 xFF ) čĊĠĠĠĠĠĠĠ Ġval Ġremainder Ġ= Ġv Ġ% ĠCH _ ET _ LENGTH _ S QUARE D čĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġv Ġ/ ĠCH _ ET _ LENGTH _ S QUARE D čĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġremainder Ġ% ĠCH _ ET _ LENGTH čĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġremainder Ġ/ ĠCH _ ET _ LENGTH čĊĠĠĠĠĠĠĠ Ġout [ index ++] Ġ= Ġmap [ c ] čĊĠĠĠĠĠĠĠ Ġout [ index ++] Ġ= Ġmap [ d ] čĊĠĠĠĠĠĠĠ Ġout [ index ++] Ġ= Ġmap [ e ] čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġif Ġ( last Group Size Ġ== Ġ 1 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġthis [ i ]. toInt () Ġand Ġ 0 xFF čĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġa Ġ% ĠCH _ ET _ LENGTH čĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġ( a Ġ- Ġc ) Ġ/ ĠCH _ ET _ LENGTH čĊĠĠĠĠĠĠĠ Ġout [ index ++] Ġ= Ġmap [ c ] čĊĠĠĠĠĠĠĠ Ġout [ index ] Ġ= Ġmap [ d ] čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġreturn Ġout . concat ToString () č Ċ } čĊč Ċ @ Target Api ( Build . VERSION _ CODES . O ) č Ċ private Ġfun Ġto Certificate ( pub Key : ĠString ?): ĠX 5 0 9 Certificate Ġ{ čĊĠĠĠ Ġval Ġ` in ` Ġ= ĠBase 6 4 . get Decoder (). decode ( pub Key ) čĊĠĠĠ Ġval ĠinputStream : ĠInputStream Ġ= ĠByteArrayInputStream (` in `) čĊĠĠĠ Ġreturn ĠCertificate Factory . getInstance (" X . 5 0 9 ") čĊĠĠĠĠĠĠĠ Ġ. generate Certificate ( inputStream ) Ġas ĠX 5 0 9 Certificate č Ċ } čĊč Ċ private Ġfun Ġverify ( prefix : ĠString ?, ĠPublicKey : ĠString ?): ĠBoolean Ġ{ čĊĠĠĠ Ġval Ġresult Ġ= ĠVerification Result () čĊĠĠĠ Ġval Ġb 4 5 Service : ĠBase 4 5 Service Ġ= ĠDefault Base 4 5 Service () čĊĠĠĠ Ġval Ġpref Service : ĠPrefix Validation Service Ġ= ĠDefault Prefix Validation Service () čĊĠĠĠ Ġval Ġcompress or Service : ĠCompress or Service Ġ= ĠDefault Compressor Service () čĊĠĠĠ Ġval Ġvalidator : ĠSchema Validator Ġ= ĠDefault Schema Validator () čĊĠĠĠ Ġval Ġco se service : ĠC ose Service Ġ= ĠDefault Co se Service () čĊĠĠĠ Ġval Ġgreen Certificate Mapper : ĠGreen Certificate Mapper Ġ= ĠDefault Green Certificate Mapper () čĊĠĠĠ Ġval Ġcb or service : ĠC bor Service Ġ= ĠDefault Cb or Service ( green Certificate Mapper ) čĊĠĠĠ Ġval Ġbase 4 5 Ġ= Ġpref Service . decode ( prefix !! , Ġresult ) čĊĠĠĠ Ġval Ġcompressed Ġ= Ġb 4 5 Service . decode ( base 4 5 , Ġresult ) čĊĠĠĠ Ġval Ġco se : ĠByteArray Ġ= Ġcompress or Service . decode ( compressed , Ġresult ) !! čĊĠĠĠ Ġval Ġcb or Ġ= Ġco se service . decode ( co se , Ġresult ) čĊĠĠĠ Ġval Ġgreen Certificate Ġ= Ġcb or service . decode ( cb or !!. cb or , Ġresult ) čĊĠĠĠ Ġval Ġschema result Ġ= Ġvalidator . validate ( cb or . cb or , Ġresult ) čĊĠĠĠ Ġval Ġcrypto Service : ĠCrypto Service Ġ= ĠVerification Crypto Service ( X 5 0 9 ()) čĊĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcert : ĠX 5 0 9 Certificate Ġ= Ġto Certificate ( PublicKey ) čĊĠĠĠĠĠĠĠ Ġ// NOTE : ĠThe Ġonly Ġdifferent Ġthing Ġafter Ġa Ġmodify Ġof ĠCO SE Ġit 's Ġonly ĠCO SE . čĊĠĠĠĠĠĠĠ Ġcrypto Service . validate ( co se , Ġcert , Ġresult , Ġgreen Certificate !!. getType ()) čĊĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġ} čĊĠĠĠ Ġreturn Ġresult . isValid () č Ċ } čĊč Ċ @ Target Api ( Build . VERSION _ CODES . O ) č Ċ private Ġfun Ġread SignIn ASN 1 DER ( sign : ĠByteArray ): ĠASN 1 Sequence ? Ġ{ čĊĠĠĠ Ġvar Ġsignature Hex Ġ= ĠBase 6 4 . get Encoder (). encode ToString ( sign ) čĊĠĠĠ Ġ// extract ing Ġr Ġand Ġs čĊĠĠĠ Ġval Ġfirst 3 2 Signature Bytes : ĠByteArray Ġ= čĊĠĠĠĠĠĠĠ ĠArrays . copyOf Range ( Base 6 4 . get Decoder (). decode ( signature Hex ), Ġ 0 , Ġ 3 2 ) čĊĠĠĠ Ġval Ġsignature Part R : ĠString Ġ= ĠBase 6 4 . get Encoder (). encode ToString ( first 3 2 Signature Bytes ) čĊĠĠĠ Ġval Ġlast 3 2 Signature Bytes : ĠByteArray Ġ= čĊĠĠĠĠĠĠĠ ĠArrays . copyOf Range ( Base 6 4 . get Decoder (). decode ( signature Hex ), Ġ 3 2 , Ġ 6 4 ) čĊĠĠĠ Ġval Ġsignature Part S : ĠString Ġ= ĠBase 6 4 . get Encoder (). encode ToString ( last 3 2 Signature Bytes ) čĊĠĠĠ Ġ// con verting Ġr Ġand Ġs Ġto Ġasn 1 Ġand Ġputting Ġthem Ġin Ġsequence čĊĠĠĠ Ġval Ġr Ġ= ĠASN 1 Integer ( BigInteger ( signature Part R , Ġ 1 6 )) čĊĠĠĠ Ġval Ġs Ġ= ĠASN 1 Integer ( BigInteger ( signature Part S , Ġ 1 6 )) čĊĠĠĠ Ġval Ġseq : ĠASN 1 Sequence Ġ= ĠD ER Sequence ( array Of < ASN 1 En codable >( r , Ġs )) čĊĠĠĠ Ġreturn Ġseq č Ċ } čĊč Ċ private Ġfun Ġconv To Der ( sign : ByteArray ): ByteArray { čĊĠĠĠ Ġvar Ġd IS : ĠDer InputStream Ġ= ĠDer InputStream ( sign ) čĊĠĠĠ Ġvar Ġvals : ĠArray < Der Value > Ġ= Ġd IS . get Sequence ( 2 ); čĊĠĠĠ Ġvar Ġrm : ĠByteArray Ġ= Ġvals [ 0 ]. get Positive BigInteger (). toByteArray (); čĊĠĠĠ Ġvar Ġs gr : ĠByteArray Ġ= Ġvals [ 1 ]. get Positive BigInteger (). toByteArray (); čĊĠĠĠ Ġvar Ġtok Sig : ĠByteArray Ġ= ĠByteArray ( 6 4 ) čĊĠĠĠ Ġvar Ġpos Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġpos 2 Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġpos 3 Ġ= Ġrm . size čĊĠĠĠ Ġif ( rm . size > 3 2 ){ čĊĠĠĠĠĠĠĠ Ġpos Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġpos 3 Ġ= Ġ 3 2 čĊĠĠĠ Ġ} čĊĠĠĠ Ġif ( rm . size < 3 2 ){ čĊĠĠĠĠĠĠĠ Ġpos 2 = 1 čĊĠĠĠ Ġ} čĊĠĠĠ ĠSystem . arraycopy ( rm , pos , tok Sig , pos 2 , pos 3 ) čĊĠĠĠ Ġif ( s gr . size > 3 2 ){ čĊĠĠĠĠĠĠĠ Ġpos Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġpos 3 = 3 2 čĊĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠ Ġpos Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġpos 3 = s gr . size čĊĠĠĠ Ġ} čĊĠĠĠ Ġif ( s gr . size < 3 2 ){ čĊĠĠĠĠĠĠĠ Ġpos 2 = 3 3 čĊĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠ Ġpos 2 = 3 2 čĊĠĠĠ Ġ} čĊĠĠĠ ĠSystem . arraycopy ( s gr , pos , tok Sig , pos 2 , pos 3 ) čĊĠĠĠ Ġreturn Ġtok Sig ; č Ċ } čĊč Ċ @ Target Api ( Build . VERSION _ CODES . O ) č Ċ @ Experimental Std lib Api č Ċ private Ġfun Ġmain (){ čĊĠĠĠ Ġprintln (" From Ġgithub . com / jo jo 2 2 3 4 / Green Pass - Experiment s ") čĊĠĠĠ Ġprintln (" ------ CMD ĠPRO GRAM ĠTO ĠVALID ATE ĠGREEN ĠPASS ------ ") čĊĠĠĠ Ġprintln ("\ n To Ġget Ġthe ĠQR ĠCode Ġin ĠASCII Ġtext Ġyou Ġcan Ġuse Ġprograms Ġlike ĠQR ĠCode ĠReader ") čĊĠĠĠ Ġprintln (" To Ġcreate Ġa Ġnew ĠQR ĠCode Ġfrom ĠASCII Ġtext Ġyou Ġcan Ġuse Ġprograms Ġlike Ġqt Z int \ n ") čĊĠĠĠ Ġprintln (" Hello , Ġinsert Ġthe ĠQR ĠCode Ġin ĠASCII Ġtext Ġ( remove Ġ\\ ) Ġ: Ġ") čĊčĊĠĠĠ Ġvar Ġin pt Ġ= Ġ" HC 1 : NC FO X NEG 2 NB J 5 * H : QO -. O MB N + XQ 9 9 N * 6 R FS 5 * TC VW BM * 4 OD MS 0 NS R HAL 9 . 4 I 9 2 P * AV AN 9 I 6 T 5 XH 4 PI Q J AZ GA 2 : UG % U : PI / E 2 $ 4 JY / KB 1 T FT J : 0 E PL NJ 5 8 G / 1 W - 2 6 AL D - I 2 "+ '$ ' +" VF V VE . 8 0 Z 0 Ġ/ KY . SK ZC * 0 K 5 AF P 7 T / MV * MN Y "+ '$ ' +" N . R 6 Ġ 7 P 4 5 AH J SP "+ '$ ' +" I / XK "+ '$ ' +" M 8 TH 1 P ZB * L 8 / G 9 H ED CH J 4 O IME DT JC JK DLE DL 9 CV TA U PI AK 2 9 VC N Ġ 1 UT K FY JZ JA PE DI . C "+ '$ ' +" JC 7 K DF 9 CF V AP UB 1 V CS WC % P DM OL HT C "+ '$ ' +" JC 3 EC 6 6 CT S 8 9 B 9 F $ 8 H . O OL I 7 R 3 Y + 9 5 AF 3 J 6 FB 5 R 8 Q MA 7 0 Z 3 7 2 4 4 FK G 6 T "+ '$ ' +" FJ 7 CQ RB 0 R % 5 Ġ 4 7 : W 0 UF JU . UO J 9 8 J 9 3 DI + C 0 UE E - JE J 3 6 V LI WQ HH "+ '$ ' +" Q IZ B % + N + Y 2 AW 2 OP 6 OH 6 XO 9 IE 5 IV U "+ '$ ' +" P 2 6 J 6 ĠL 6 / E 2 US 2 C ZU : 8 0 I 7 JM 7 J HO JK Y JPG K : H 3 J 1 D 1 I 3 -* TW ĠCX BD +$ 3 PY 2 C 7 2 5 SS + TD M "+ '$ ' +" SF * SH VT : 5 D 7 9 U + GC 5 QS + 3 TA QS : FL U + 3 4 IU * 9 VY - Q 9 P 9 SE W - AB + 2 Q 2 I 5 6 L 9 1 6 CO 8 T ĠC 6 0 9 O 1 % NX DU - : R 4 T IC QA . 0 F 2 H FL X LL WI 8 ZU 5 3 B MQ 2 N ĠU : V QQ 7 RW Y 9 1 SV 2 A 7 N 3 WQ 9 J 9 O AZ 0 0 RK LB 2 " čĊĠĠĠ Ġtry { čĊĠĠĠĠĠĠĠ Ġin pt Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġif ( in pt = ="" Ġ|| Ġin pt Ġ= ="\ n " Ġ|| Ġin pt ==" \ r \ n "){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġin pt Ġ= Ġ" HC 1 : NC FO X NEG 2 NB J 5 * H : QO -. O MB N + XQ 9 9 N * 6 R FS 5 * TC VW BM * 4 OD MS 0 NS R HAL 9 . 4 I 9 2 P * AV AN 9 I 6 T 5 XH 4 PI Q J AZ GA 2 : UG % U : PI / E 2 $ 4 JY / KB 1 T FT J : 0 E PL NJ 5 8 G / 1 W - 2 6 AL D - I 2 "+ '$ ' +" VF V VE . 8 0 Z 0 Ġ/ KY . SK ZC * 0 K 5 AF P 7 T / MV * MN Y "+ '$ ' +" N . R 6 Ġ 7 P 4 5 AH J SP "+ '$ ' +" I / XK "+ '$ ' +" M 8 TH 1 P ZB * L 8 / G 9 H ED CH J 4 O IME DT JC JK DLE DL 9 CV TA U PI AK 2 9 VC N Ġ 1 UT K FY JZ JA PE DI . C "+ '$ ' +" JC 7 K DF 9 CF V AP UB 1 V CS WC % P DM OL HT C "+ '$ ' +" JC 3 EC 6 6 CT S 8 9 B 9 F $ 8 H . O OL I 7 R 3 Y + 9 5 AF 3 J 6 FB 5 R 8 Q MA 7 0 Z 3 7 2 4 4 FK G 6 T "+ '$ ' +" FJ 7 CQ RB 0 R % 5 Ġ 4 7 : W 0 UF JU . UO J 9 8 J 9 3 DI + C 0 UE E - JE J 3 6 V LI WQ HH "+ '$ ' +" Q IZ B % + N + Y 2 AW 2 OP 6 OH 6 XO 9 IE 5 IV U "+ '$ ' +" P 2 6 J 6 ĠL 6 / E 2 US 2 C ZU : 8 0 I 7 JM 7 J HO JK Y JPG K : H 3 J 1 D 1 I 3 -* TW ĠCX BD +$ 3 PY 2 C 7 2 5 SS + TD M "+ '$ ' +" SF * SH VT : 5 D 7 9 U + GC 5 QS + 3 TA QS : FL U + 3 4 IU * 9 VY - Q 9 P 9 SE W - AB + 2 Q 2 I 5 6 L 9 1 6 CO 8 T ĠC 6 0 9 O 1 % NX DU - : R 4 T IC QA . 0 F 2 H FL X LL WI 8 ZU 5 3 B MQ 2 N ĠU : V QQ 7 RW Y 9 1 SV 2 A 7 N 3 WQ 9 J 9 O AZ 0 0 RK LB 2 " čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} catch ( e : ĠException ){ čĊĠĠĠĠĠĠĠ Ġprintln (" Error , Ġcheck Ġinputs ") čĊĠĠĠ Ġ} čĊĠĠĠ Ġvar Ġdf v : ĠDefault Prefix Validation Service Ġ= ĠDefault Prefix Validation Service () čĊĠĠĠ Ġvar Ġvalid : ĠVerification Result Ġ= ĠVerification Result () čĊĠĠĠ Ġvar Ġbd 4 5 Ġ= ĠBase 4 5 Decoder () čĊĠĠĠ Ġ// De coding čĊĠĠĠ Ġ// NOTE : ĠIn Ġreal Ġinput Ġare Ġpresent Ġ$ Ġor Ġ\ Ġthat Ġcould Ġbe Ġillegal Ġsometimes , Ġyou Ġcan Ġinsert Ġthem Ġusing Ġconcat enation Ġfor Ġexample : Ġ" FC 1 J 9 M "+ '$ ' +" DI 9 C 9 I 9 " Ġand Ġyou Ġcan Ġremove Ġback slash Ġinternal Ġdata Ġare Ġnot Ġmodified Ġand ĠVer ific aC 1 9 Ġdetect Ġthe ĠQR Code Ġas Ġvalid čĊĠĠĠ Ġvar Ġwithout Prefix Ġ= Ġdf v . decode ( in pt , valid ) čĊĠĠĠ Ġvar Ġzlib Archive Ġ= Ġbd 4 5 . decode ( without Prefix ) čĊĠĠĠ Ġvar Ġco se cb or string Ġ= Ġzlib Archive . de compress Base 4 5 Decoded Data () čĊĠĠĠ Ġvar Ġco se Structured Ġ= Ġco se cb or string . decode Co se () Ġ// The Ġvariable Ġco se Structured Ġit Ġthe Ġselected Ġone Ġto Ġbe Ġmodified čĊĠĠĠ Ġ// Verify Ġwith Ġpublic Ġkeys čĊĠĠĠ Ġvar Ġreadable Green Pass Ġ= Ġco se Structured . cb or . decode Green Certificate () čĊĠĠĠ Ġ// println ( co se Structured . cb or . decode ToString ()) čĊĠĠĠ Ġprintln ( readable Green Pass ) čĊĠĠĠ Ġvar Ġpub key Ġ= Ġ" MI IB z D CC AX Gg Aw IB Ag I UD N 8 n W nn 8 g B ml Wg L 3 st wh oin VD 5 Mw C gY IK o Z Iz j 0 E Aw Iw ID EL MA k GA 1 UE Bh M CR 1 Ix ET AP Bg NV B AM MC G dy bm V 0 L md y MB 4 XD TI x MD Ux Mj Ex Mj Y 1 OF o XD TI z MD Ux Mj Ex Mj Y 1 OF ow ID EL MA k GA 1 UE Bh M CR 1 Ix ET AP Bg NV B AM MC G dy bm V 0 L md y MF kw E wY HK o Z Iz j 0 CA QY IK o Z Iz j 0 DA Qc DQ g AE B cc 6 Ap R Z rh 9 / q Cu M nx IR p U uj I 1 9 b Kk G + ag j / 6 r PO i X 8 Vy zf W vh pt z V 0 1 4 9 A FR Wd So F / NV u Qy F cr Bo NB q L 9 z CA q OB i DC Bh TA OB g NV HQ 8 BA f 8 EB AM CB 4 Aw HQ YD VR 0 OB BY E FN 6 Zi C 5 7 J / y Rq T J / Tg 2 e Rsp L CH Dh MB 8 GA 1 Ud Iw QY MB a AF NU 5 Hf WN Y 3 7 T bd Z jv sv O + 1 y 1 LP JY MD M GA 1 Ud J QQ s M Co G DC s GA QQ B AI 4 3 j 2 UB AQ Y MK wY BB AE Aj je P ZQ E CB g wr Bg EE AQ CON 4 9 l AQ Mw C gY IK o Z Iz j 0 E Aw ID SQ Aw Rg Ih AN 6 r Dd E 4 mt Tt 2 Z uff p Z 2 4 2 / B 0 l my v dd + Wy 6 Vu X + J / b 0 1 Ai E Av ME 5 2 Y 4 z qk QD uj 2 k bf C fs + h 3 uw Y FO e po BP 1 4 X + Rd / VM =" čĊĠĠĠ Ġ// var Ġpub key Ġ= Ġ" MI IF MD CC Ax ig Aw IB Ag IJ AI Z 9 / G 8 K Q ie 9 MA 0 G CS q G SI b 3 DQ E BD QU AM CU x I zA h Bg NV B AM M Gl R lc 3 Qg T 2 5 se SB V bn Nl Y 3 Vy ZSB Sb 2 9 0 I EN B MB 4 XD TE 4 MD My O DA w Mz Iy M 1 o X DT M 4 MD My Mz Aw Mz Iy M 1 ow J TE j M CE GA 1 UE A ww a V GV zd CB Pb mx 5 IF V uc 2 V jd X Jl IF J vb 3 Qg Q 0 Ew gg Ii MA 0 G CS q G SI b 3 DQ E BA QU AA 4 ICD w Aw gg IK Ao IC AQ DG xF Nz AE yz SP mw E 5 g fu BX dX q ++ bl 9 Ep 6 2 V 7 Xn 1 U ie jvm S + p R HT 3 9 pf / M 7 sl 4 Zr 9 ez an J Tr F vf 9 + B 8 5 V Ge h ds D 3 2 T gf Ej Th cq ao Q CI 6 p Kk HY s Uo 7 FZ 5 n + G 3 e E 8 o ab WR Z JM Vo 3 Q Dj nn FY p 7 z 2 0 v np j D of I 2 o Q yx H cb / 1 y ep + ca 1 + 4 l I vb Up / y bh NF qh RX AM c DX o 7 py H 3 8 e UQ 1 Jd K Q / Ql Bb Sh p FE qx 1 Y 6 K il Kf TD f 7 W en qr 6 7 L ka E im // y LZ jl H zn / B pu R Tr po + X mJ Zx 1 P 9 CX 9 L GO XT t ms aC c Yg D 4 y ij Ov V 8 a Es IJ af 1 k C IO 5 5 8 o H 0 o Qc + 0 J G 5 a Xe LN 7 BD ly Zv H 0 Rd Sx 5 n QL S 9 kj 2 I 6 nth Ow / q 0 0 / L + S 6 A 0 m 5 jy N ZO Al 1 SY 7 8 p + w O 0 d 9 e H bq Qz J wf Es Sq 3 q GA ql g Q yy jp 6 ox HB q T 9 h Zt N 4 rx w + iq 0 K 1 S 4 km TL NF 1 F vm IB 1 BE + l Nv vo Gd Y 5 G 0 b 6 Pe 4 R 5 J Fn 9 LV 3 C 3 PE m SY na e 7 i G 0 IQ l Km RAD I uv f J 7 ap W AV an JP J AA Wh 2 Ak fp 8 U xr 0 2 c Ho Y 6 o 7 vs Eh J JO e Mk ipa BH Th ES m / Xe FV ub Qz Nf Z 9 gj Qn B 9 ZX 2 v + ly j + W YZ SA z 3 Ru Xx 6 Tl L rm W cc Mp Q DR 1 ib cg yy j LU t X 3 kw Zl 2 O xm JX it ju D 7 xl xv AX Y ob 1 5 N + K 4 x KH gx UD rb t 2 z U / t Y 0 v ge p AU g / xb w ID AQ AB o 2 M wY T Ad Bg NV HQ 4 EF g QU w ye Np Y gs XX Y vh 9 z 0 / l Fr ja 7 s V + sw H wY D VR 0 j BB gw Fo AU w ye Np Y gs XX Y vh 9 z 0 / l Fr ja 7 s V + sw D wY D VR 0 TA QH / BA Uw Aw EB / zA OB g NV HQ 8 BA f 8 EB AM C AY Yw DQ Y JK o ZI h vc NA Q EN BQ AD gg IB AG u O sv MN 5 SD 3 RI Qn MJ tB pc HN rx un + Q Fj P Z Fl Y CL f IP r Uk H pn 5 O 1 i II q 8 t VL d 2 V + 1 2 VK n To UE AN s Y BD 3 MP 8 X j P + 6 GZ 7 ZQ 2 rw LG v U AB KS X 4 YX vm j E EX ZU Zp 0 y 3 t IV 4 k UD lb AC z gu P ne Z Dp 5 Qo 7 YW H 4 org qz H kn 0 s D / ik O 5 Xr A qm zc 2 4 5 ew Jl rf + V 1 1 mj cu EL f Dr Ee jp Phi 7 Hk / Z NR 0 ft P 7 3 7 Hs / d No CL CI a V Ng Yz B Zh go 4 kd 2 2 0 Te Ju 2 tt W 0 XZ ldy S ht pc O my W KB g V se ix R 6 L / 3 s sp PH y AP Xk Su Ro 0 Eh 1 xv z DK Cg 9 tt b 0 qo ac Tl X MF Gk Bp N zm Vq 6 7 N WF GG a 9 UE lift 1 mv 6 Rf kt PC AG Z + Ai 8 x Ui KA UB 0 E ook pt / 8 g X 9 Sen qy P / j M xk x Xm HW x Uu 8 + Kn L vj 6 WL r ff tu uD 7 u 3 cfc 7 j 5 k kr he Dz 3 O 4 h 4 4 7 7 Gn q L 5 w do 9 Du Es Nc 4 Fx J Vz 8 Iy 8 RS 6 c Ju W 4 pi h Y p M 1 T yn 7 u op Ln Imp Yz EY + R 5 a Q qq r + q / A 1 di q og b EK PH 6 o U iq JU wq 3 n D 7 0 g P BU KJ m Iz S 4 v Lw L ou q U HE m 1 k / Mg HV / Bk EU 0 u VH sz PF a X UM M CH b 0 iT 9 P 8 L uZ 7 Aj er 3 SR / 0 TR V Ap Cr k / 6 OV 6 8 e + 6 k / OF p M 5 kc Zn N MD 5 AN yB ri T sz 3 Nr Dw Sw 4 i 4 + D sf h 6 A 9 dB / c E gh w 4 sk La B xn QL Q Ig V eq Cz K " čĊĠĠĠ Ġ// var Ġpub key Ġ= Ġ" MI IF Dz CCA ve g Aw IB Ag IQ b Nd ue U 2 o 0 v M 9 g Gq 4 N 6 bh jz AN Bg k qh ki G 9 w 0 BA Qs F AD Ax MS 8 w L QY DV QQ DE y ZH b 2 9 nb GU g Q 2 x vd W Qg S 2 V 5 IF Z hd Wx 0 IF Nl cn Zp Y 2 Ug Um 9 vd CB DQ TA e Fw 0 x O DA 1 MD cx O DI 0 MD Ja Fw 0 z O DA 1 MD gx OT I 0 MD Ja MD Ex Lz At Bg NV B AM T Jk dv b 2 ds ZSB Db G 9 1 ZC BL ZX kg Vm F 1 b HQ g U 2 V yd ml j ZSB Sb 2 9 0 I EN B MI IC Ij AN Bg k qh ki G 9 w 0 BA QE FA A OC Ag 8 AM I IC Cg KC Ag E Ar U gz u + 4 o 9 yl 2 2 eql 1 Bi GB q 3 g WX oo h 2 ql 3 J + v V uz f / Th j zd Ig 0 x kk kw / NA Fx Y Fi 4 9 Eo 1 fa / hf 8 w CI o Aq CE s 1 l D 6 t E 3 c CD 3 T 3 + EQ P qu h 6 CB 2 Km Z DJ 6 m Pn Xv V Ul Uu Fr 0 O 2 Mw Z kw yl q B ET z K 0 x 5 N CH g L / p 4 7 vk jh Hx 6 L q Va ob ig Kl H xs zv Vi 4 f kt / qq 7 KW 3 Y TV xh wd L GE ab + O q S fw M xd BL h Mf E 0 K 0 dv Ft 8 bs 8 y J AF 0 4 D Js Mb R Ch FF B pT 1 7 Z 0 u 5 3 i I AA u 5 q VQ h Kr QX i IA wg bo Z qd + Jk HL X U 1 f Je VT 5 W JO J go J FW H kd Wk H ta 4 m SY l S 7 2 J 1 Q 9 2 7 JD 1 Jd ET 1 k Ft H + ED t Y At x 7 x 7 F 9 xAA bb 2 t MIT ws / ww d 2 r Az Z TX / kx Rb Dl X VL ToU 0 5 LF Y Pr + d FV 1 wv X mi 0 jl k Ix nh da VB q WC 9 3 p 5 2 8 Ui Uc Lp ib + HV zM WG d YI 3 G 1 NO a / l Tp 0 c 8 L cb Jj api i V ne RQ J 3 c Iq D POS En Eq 4 0 hy Zd 1 jx 3 Jn Ox J Mw Hs 8 v 4 s 9 G Il b 3 Bc Om Dv A / Mu 0 9 x EM K wp HB m 4 TF DK Xe G HO Wh a 7 cc W EE C by O 5 nc u 6 Xu N 2 iy z 9 S + Tu My j Z BE 5 5 2 p 6 Pu 5 g EC 2 xk + q ab 0 NG D TH dL KL by Wn 3 I xd mB Hy Tr 7 i PC q mpy H ng k C / pb G fv G usc 5 Bp Bugs B tl z 6 7 m 4 R WL J 7 2 y Ae V PO / ly / 8 w 4 or Ns GW jn 3 s 0 CA w E AA a Mj M CE w D gY D VR 0 PA QH / BA QD Ag GG MA 8 GA 1 Ud Ew EB / w Q F MA MB Af 8 w DQ Y JK o ZI h vc NA Q EL BQ AD gg IB AG i W lu + 4 q yx g Pb 6 Rs A 0 mw R 7 V 2 1 U J 9 r Ep Yh SN + AR p TW Gi I 2 2 RC JS GK 0 Zr P Ge FQ z E 2 B pn VR dm LT V 5 jf 9 JU St j Ho Pv NY Fn w LT J 0 E 2 e 9 O lj 8 Mr Hr A uc AU FL hl 4 wo Wz 0 k U / X 0 EB 1 j 6 Y 2 SX r Aa Z Pi MM pq 8 BK j 3 m H 1 Mb V 4 st Z 0 ki H Up Zu 6 PE m ro j YG 7 FK KN 3 0 na 2 x X fi O fl 2 J us V sy HD qm Un / Hj Th 6 z ASK q E 6 h xE + F JR l 2 VQ 4 d cr 4 S vi H tdb im My 2 L gh Ln Z 4 FE 4 Xh Jg R nw 9 Te RV 5 C 9 Sn 7 pmn AA 5 X 0 C 8 ZX h X vf vr dx 4 f L 3 UK lk 1 L ql b 5 sk xo K 1 R 9 ww r + aN IO + cu R 8 JA 5 Dm ED WF w 5 B ud h / u WW Zl BT y VW 2 y bb TB 6 tk m Oc 8 c 0 8 XO g xB a K rs X AL mJ cl u ab jm N 1 jp 8 1 ae 1 e pe N 3 1 j J 4 N 5 IE 5 aq 7 Xb TF m K kw pg TT v J mq CR 2 Xz W uj lv db dj fi AB li W sn L zL Q CP 8 e Z wc M 4 LA 5 UK 3 f 1 kt H ol r 1 OI 9 et SO ke b E 2 py 8 L PY BJ Wl X 3 6 t RA ag Zh U / No y O tv h Rz q 9 rb 3 r bf 9 6 APE HK U Fs XG 9 nB Ed 2 BU K Z gh L KP f + J NC U / 2 p OG x 0 jd M cf + K + a 1 De G 0 Yz GY MR k F vp N 3 hv HY r Jd By L 3 k SP 3 Ut D 0 H 2 g 8 Ps 7 g R LE LG 2 HO D xb Sn 8 PV 3 X tu S vx Van A 6 uy aaS 3 AZ 6 S xe VL vm w 5 0 7 a YI " čĊĠĠĠ Ġ// It alian ĠPublic ĠKey : čĊĠĠĠ Ġprintln (" Do Ġyou Ġwant Ġto Ġuse Ġthe ĠIt alian ĠPublic ĠKey ? Ġ( yes / no )") čĊĠĠĠ Ġvar Ġas w Ġ= Ġread Line (). toString () čĊĠĠĠ Ġif ( as w ==" yes " Ġ|| Ġas w ==" y " Ġ|| Ġas w ==" si "){ čĊĠĠĠĠĠĠĠ Ġpub key Ġ= Ġ" MI IED z CCA fe g Aw IB Ag I UR ld u 5 rs fr De Zt DB xr J + S uj Mr 2 I sw DQ Y JK o ZI h vc NA Q EL BQ Aw ST EL MA k GA 1 UE Bh M CSV Qx Hz Ad Bg NV BA o MF k 1 pb ml zd GV y by Bk ZW xs Y SB TY Wx 1 d GU x GT AX Bg NV B AM ME El 0 YW x 5 I ER HQ y BD U 0 NB IDE w H hc N Mj Ew N TE y MD gx ODE 3 Wh cN Mj Mw N TE y MD gx MT U 5 Wj B IM Q sw CQ Y DV QQ GE w JJ V DE f MB 0 GA 1 UE C gw W TW lua XN 0 ZXJ v IG R lb G xh IF N hb HV 0 Z TE Y MB Y GA 1 UE A ww PS XR hb H kg RE d DI ERT Qy Ax MF kw E wY HK o Z Iz j 0 CA QY IK o Z Iz j 0 DA Qc DQ g A En L 9 + Wn Ip 9 f vb co c Z SG U Fl Sw 9 ff W / jb MON zc vm 1 X 4 c + p XO PE s 7 C 4 / 8 3 + Px S 8 S we a 2 h gm / t Kt 4 PI 0 z 8 w gn Ie ho j 6 O Bu j CB tz Af Bg NV HS ME G DA Wg BS + VO Vp X me SQ Im XY EE AB / p LR VC w / z Bl Bg NV HR 8 EX j Bc MF qg W KB Wh l Rs Z GF w Oi 8 vY 2 Fk cy 5 k Z 2 Mu Z 2 9 2 L ml 0 L 0 NOP Ul 0 YW x 5 J TI w RE d DJ TI w Q 1 ND Q SU y MH hc MS x P PU 1 pb ml zd GV y by Uy MGR lb G xh J TI w U 2 F sd XR l LEM 9 SV Qw HQ YD VR 0 OB BY E FC 4 b Ab C vp Arr g Z 0 E + R rq S 8 V 7 T NN I MA 4 GA 1 Ud Dw EB / w QE Aw IH g D AN Bg k qh ki G 9 w 0 BA Qs FA A OC Ag EA jx Te F 7 yh Kz / 3 PK Z 9 + W fg Z Pa Iz Z vn O / n mu U art g Vd 3 xu TP N td 5 tu YR NS / 1 B 7 8 H NN k 7 f X iq 5 h H 2 q 8 x HF 9 yx Yx Ex ov 2 q F rf UM D 5 HO Zz YK HZ c jc W FN Hv H 6 jx 7 q DC tb 5 Pr Og SK 5 QU Q zy c R 7 Mg W IF ino W ws WI r A 1 A JO wf U oi 7 v 1 ao WN MK 1 e HZ m R 3 Y 9 L Q 8 4 qe E 2 y Dk 3 jq EG jl J VC bg Bp 7 O 8 em zy 2 Kh Wv 3 Jy R Zg T mF z 7 p 6 e RX Dz UY Ht J auf ve I hk NM / U 8 p 3 S 7 eg Q eg li IF Mm uf v Ey Z em D 2 BM vb 9 7 H 9 PQ pu ze Mw B 8 zc F bu Zm Nl 4 2 AF MQ 2 Ph Q e 2 7 p U 0 w Fs DE q Le 0 ET b 5 e R 3 T 9 L 6 zd Sr W ld w 6 U uX o Y V 0 / 5 fv j A 5 5 q Cj Aa L J 0 qi 1 6 Ca / jt 6 i Ku ws / KK h 9 yr + Fq Z Mn ZU H 2 D 2 j 2 i 8 L BA 6 7 Ie 0 Jo ZP So jr 8 cw ST x QB d J FI 7 2 2 uc z Cj / Rt 6 9 Y 4 s Ld V 3 h NQ 2 A 9 h Hr X es y Q sl r 0 ez 3 U HH z DR F MV l OX WC ay j 3 LI gv tf T j Kr T 1 J +/ 3 Vu 9 f vs 1 + CC J EL u C 9 gt VL x M sd Rc / A 6 / bv W 4 m As y Y 7 8 RO X 2 7 Bi 8 Cx PN 5 IZ b ti y jp md fr 2 buf Dc wh wz dw sd QQ Do Si IF 1 LZ q Cn 7 s HB m Uh zo Pc BJ d XF ET 5 8 EK ow 0 BW cer Z zp vs VH cM TE 2 uu AU r / JU h 1 SB po J Ci MIR Sl + X Po EA 2 qq Y U =" čĊĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠ Ġas w =" n " čĊĠĠĠĠĠĠĠ Ġprintln (" Do Ġyou Ġwant Ġto Ġinsert Ġa Ġcustom ĠPublic ĠKey Ġin ĠX . 5 0 9 Ġcert Ġform ? Ġ( yes / no )") čĊĠĠĠĠĠĠĠ Ġas w Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġif ( as w ==" yes " Ġ|| Ġas w ==" y " Ġ|| Ġas w ==" si "){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Use Ġan ĠX . 5 0 9 Ġcertificate Ġcontaining Ġthe ĠPublic ĠKey Ġas ĠPEM Ġstring : Ġ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub key Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġif ( verify ( in pt , Ġpub key )){ čĊĠĠĠĠĠĠĠ Ġprintln (" Valid ĠKey ") čĊĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠ Ġprintln (" MIS MATCH : ĠKey Ġnot Ġvalid ") čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// BEGIN NING ĠMODIFY ĠSECTION ĠDATA čĊĠĠĠ Ġ// IMPORTANT ĠNOTE : ĠTo Ġmake Ġthis Ġsection Ġworking Ġgo Ġin Ġthe Ġclass ĠC ose Data . kt Ġand Ġchange Ġval Ġto Ġvar Ġfor Ġboth Ġkid Ġand Ġcb or čĊĠĠĠ Ġ// IMPORTANT : ĠChange Ġin Ġclass ĠGreen Certificate . kt Ġand Ġin Ġclass ĠPerson . kt Ġeach Ġval Ġin Ġvar čĊčĊĠĠĠ Ġas w =" n " čĊĠĠĠ Ġprintln (" Do Ġyou Ġwant Ġto Ġcreate Ġa Ġnew Ġcertificate ? Ġ( y / n )") čĊĠĠĠ Ġas w Ġ= Ġread Line (). toString () čĊĠĠĠ Ġif ( as w ==" yes " Ġ|| Ġas w ==" y " Ġ|| Ġas w ==" si ") Ġ{ čĊĠĠĠĠĠĠĠ Ġ// Security . add Provider ( Bo unc y Castle Provider ()) čĊĠĠĠĠĠĠĠ Ġvar Ġrm : ĠSecure Random Ġ= ĠSecure Random . getInstance (" SHA 1 PR NG "," SUN ") čĊĠĠĠĠĠĠĠ Ġvar Ġkey Size Ġ= ĠEC Gen Parameter Spec (" secp 2 5 6 r 1 ") čĊĠĠĠĠĠĠĠ Ġvar Ġkey Gen : ĠKey Pair Generator Ġ= ĠKey Pair Generator . getInstance (" EC "," Sun EC ") // (" ECD SA "," BC ") čĊĠĠĠĠĠĠĠ Ġkey Gen . initialize ( key Size , rm ) Ġ// It 's Ġ 2 5 6 Ġbit Ġl enght čĊĠĠĠĠĠĠĠ Ġvar Ġf att oria : ĠKey Factory Ġ= ĠKey Factory . getInstance (" EC "," Sun EC ") // (" ECD SA "," BC ") čĊĠĠĠĠĠĠĠ Ġvar Ġchi avi Ġ= Ġkey Gen . generate KeyPair () čĊĠĠĠĠĠĠĠ Ġvar Ġpriv : ĠPrivate Key Ġ= Ġchi avi . private čĊĠĠĠĠĠĠĠ Ġ// var Ġchi ave Pub b lica : ĠPublicKey Ġ= Ġchi avi . public čĊĠĠĠĠĠĠĠ Ġ// var Ġpriv Byte A : ĠByteArray Ġ= Ġbyte ArrayOf ( 4 8 ,- 1 2 7 ,- 1 0 9 , 2 , 1 , 0 , 4 8 , 1 9 , 6 , 7 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 2 , 1 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 , 4 , 1 2 1 , 4 8 , 1 1 9 , 2 , 1 , 1 , 4 , 3 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,- 9 6 , 1 0 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 ,- 9 5 , 6 8 , 3 , 6 6 , 0 , 4 ,- 1 0 0 ,- 6 5 , 1 2 6 , 9 0 , 1 1 4 , 4 1 ,- 1 1 ,- 5 ,- 3 7 , 1 1 4 ,- 1 2 1 , 2 5 , 7 2 , 1 0 1 , 5 ,- 1 0 7 , 4 4 , 6 1 , 1 2 5 ,- 1 1 ,- 6 5 ,- 1 1 5 ,- 7 7 , 1 4 , 5 5 , 5 5 , 4 7 ,- 1 0 1 , 8 5 ,- 8 , 1 1 5 ,- 2 2 , 8 7 , 5 6 ,- 1 5 , 4 4 ,- 2 0 , 4 6 , 6 3 ,- 1 3 , 1 2 7 ,- 1 1 3 ,- 5 9 , 4 7 , 1 8 ,- 6 3 ,- 2 6 ,- 7 4 ,- 1 2 2 , 9 ,- 6 5 ,- 7 6 ,- 8 5 , 1 2 0 , 6 0 ,- 1 1 5 , 5 1 ,- 1 3 , 8 , 3 9 , 3 3 ,- 2 4 , 1 0 4 ,- 1 1 3 )// Wrong Ġprovider Ġbo unc y Ġcast le , Ġthe Ġapp Ġuse ĠSun EC čĊĠĠĠĠĠĠĠ Ġ// var Ġpriv Byte A : ĠByteArray Ġ= Ġbyte ArrayOf ( 4 8 ,- 1 2 7 ,- 1 0 9 , 2 , 1 , 0 , 4 8 , 1 9 , 6 , 7 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 2 , 1 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 , 4 , 1 2 1 , 4 8 , 1 1 9 , 2 , 1 , 1 , 4 , 3 2 , 5 2 ,- 1 0 2 , 6 6 ,- 8 0 ,- 6 2 ,- 4 8 , 1 1 4 ,- 1 1 4 , 1 0 5 , 3 7 ,- 7 3 , 3 8 , 1 3 , 2 4 , 1 9 ,- 1 9 ,- 7 8 , 1 1 3 ,- 5 9 , 6 8 , 1 0 ,- 9 6 ,- 1 1 , 6 0 , 1 2 7 ,- 3 5 ,- 9 4 ,- 2 ,- 8 8 ,- 1 0 5 , 1 0 5 ,- 6 9 ,- 9 6 , 1 0 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 ,- 9 5 , 6 8 , 3 , 6 6 , 0 , 4 ,- 1 0 0 ,- 6 5 , 1 2 6 , 9 0 , 1 1 4 , 4 1 ,- 1 1 ,- 5 ,- 3 7 , 1 1 4 ,- 1 2 1 , 2 5 , 7 2 , 1 0 1 , 5 ,- 1 0 7 , 4 4 , 6 1 , 1 2 5 ,- 1 1 ,- 6 5 ,- 1 1 5 ,- 7 7 , 1 4 , 5 5 , 5 5 , 4 7 ,- 1 0 1 , 8 5 ,- 8 , 1 1 5 ,- 2 2 , 8 7 , 5 6 ,- 1 5 , 4 4 ,- 2 0 , 4 6 , 6 3 ,- 1 3 , 1 2 7 ,- 1 1 3 ,- 5 9 , 4 7 , 1 8 ,- 6 3 ,- 2 6 ,- 7 4 ,- 1 2 2 , 9 ,- 6 5 ,- 7 6 ,- 8 5 , 1 2 0 , 6 0 ,- 1 1 5 , 5 1 ,- 1 3 , 8 , 3 9 , 3 3 ,- 2 4 , 1 0 4 ,- 1 1 3 )// HERE ĠHAS ĠBE EN ĠINSERT ED ĠA ĠPOSS IBLE ĠPRIVATE ĠIT ALI AN ĠKEY čĊĠĠĠĠĠĠĠ Ġvar Ġpriv Byte A : ĠMutable List < Byte > Ġ= Ġbyte ArrayOf ( 4 8 , 6 5 , 2 , 1 , 0 , 4 8 , 1 9 , 6 , 7 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 2 , 1 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 , 4 , 3 9 , 4 8 , 3 7 , 2 , 1 , 1 , 4 , 3 2 , 5 2 ,- 1 0 2 , 6 6 ,- 8 0 ,- 6 2 ,- 4 8 , 1 1 4 ,- 1 1 4 , 1 0 5 , 3 7 ,- 7 3 , 3 8 , 1 3 , 2 4 , 1 9 ,- 1 9 ,- 7 8 , 1 1 3 ,- 5 9 , 6 8 , 1 0 ,- 9 6 ,- 1 1 , 6 0 , 1 2 7 ,- 3 5 ,- 9 4 ,- 2 ,- 8 8 ,- 1 0 5 , 1 0 5 ,- 6 9 ). to Mutable List () Ġ// This Ġprivate Ġkey Ġexample Ġrespect ĠSun EC Ġprovider Ġstructure čĊĠĠĠĠĠĠĠ Ġ// What Ġinternet Ġthink Ġcould Ġbe Ġthe Ġprivate ĠIt alian Ġkey : Ġ 5 2 ,- 1 0 2 , 6 6 ,- 8 0 ,- 6 2 ,- 4 8 , 1 1 4 ,- 1 1 4 , 1 0 5 , 3 7 ,- 7 3 , 3 8 , 1 3 , 2 4 , 1 9 ,- 1 9 ,- 7 8 , 1 1 3 ,- 5 9 , 6 8 , 1 0 ,- 9 6 ,- 1 1 , 6 0 , 1 2 7 ,- 3 5 ,- 9 4 ,- 2 ,- 8 8 ,- 1 0 5 , 1 0 5 ,- 6 9 Ġbut Ġseems Ġnot Ġtrue . čĊĠĠĠĠĠĠĠ Ġ// var Ġpriv Byte A : ĠByteArray Ġ= Ġbyte ArrayOf ( 4 8 ,- 1 2 7 ,- 1 0 9 , 2 , 1 , 0 , 4 8 , 1 9 , 6 , 7 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 2 , 1 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 , 4 , 1 2 1 , 4 8 , 1 1 9 , 2 , 1 , 1 , 4 , 3 2 ,- 6 5 , 5 5 , 1 6 , 6 3 , 7 4 , 1 5 ,- 1 1 0 , 7 6 , 8 0 ,- 1 0 2 , 1 1 5 , 5 8 ,- 1 1 9 , 3 1 ,- 1 0 1 , 6 1 ,- 3 ,- 2 , 8 2 , 6 , 8 5 ,- 8 , 5 5 , 3 3 , 1 0 , 1 0 4 , 1 0 1 , 8 5 , 6 2 , 4 5 , 1 1 0 , 4 1 ,- 9 6 , 1 0 , 6 , 8 , 4 2 ,- 1 2 2 , 7 2 ,- 5 0 , 6 1 , 3 , 1 , 7 ,- 9 5 , 6 8 , 3 , 6 6 , 0 , 4 ,- 1 0 0 ,- 6 5 , 1 2 6 , 9 0 , 1 1 4 , 4 1 ,- 1 1 ,- 5 ,- 3 7 , 1 1 4 ,- 1 2 1 , 2 5 , 7 2 , 1 0 1 , 5 ,- 1 0 7 , 4 4 , 6 1 , 1 2 5 ,- 1 1 ,- 6 5 ,- 1 1 5 ,- 7 7 , 1 4 , 5 5 , 5 5 , 4 7 ,- 1 0 1 , 8 5 ,- 8 , 1 1 5 ,- 2 2 , 8 7 , 5 6 ,- 1 5 , 4 4 ,- 2 0 , 4 6 , 6 3 ,- 1 3 , 1 2 7 ,- 1 1 3 ,- 5 9 , 4 7 , 1 8 ,- 6 3 ,- 2 6 ,- 7 4 ,- 1 2 2 , 9 ,- 6 5 ,- 7 6 ,- 8 5 , 1 2 0 , 6 0 ,- 1 1 5 , 5 1 ,- 1 3 , 8 , 3 9 , 3 3 ,- 2 4 , 1 0 4 ,- 1 1 3 )// Bo unc y Castle Ġstructure Ġprivate Ġkey ĠWrong čĊĠĠĠĠĠĠĠ Ġas w =" n " čĊĠĠĠĠĠĠĠ Ġprintln (" Do Ġyou Ġwant Ġto Ġinsert Ġa ĠPrivate ĠKey ? Ġ( y / n )") čĊĠĠĠĠĠĠĠ Ġas w Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġif ( as w ==" yes " Ġ|| Ġas w ==" y " Ġ|| Ġas w ==" si ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Use Ġa ĠPKCS 8 Ġkey Ġin ĠPEM Ġformat : Ġ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtmp PB K Ġ= Ġread Line (). toString (). replace ("\ n "," ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriv Byte A Ġ= Ġbyte ArrayOf ( 0 ). to Mutable List () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpartial Key Ġ= ĠBase 6 4 . get Decoder (). decode ( tmp PB K ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc = 0 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( b Ġin Ġpartial Key ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpriv Byte A . add ( c , Ġb ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch ( e : ĠException ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("\ n Erro re Ġin ĠPrivate ĠKey : Ġ$ e Ġ\ n ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġvar Ġspec Priv : ĠEn coded KeySpec Ġ= ĠPKCS 8 Encoded KeySpec ( priv Byte A . toByteArray ()) čĊĠĠĠĠĠĠĠ Ġ// var Ġspec Priv : ĠPKCS 8 Encoded KeySpec Ġ= ĠPKCS 8 Encoded KeySpec ( Base 6 4 . get Decoder (). decode (" M IGH Ag E AM BM G By q G SM 4 9 Ag EG CC q G SM 4 9 Aw EH BG 0 w aw IB AQ Qg Z gp 3 u yl Fe CI IX oz b Zk Ck SN r 4 Dc LD x pl Z 1 ax / u 7 nd X q ah RAN CA AR k J eq y O 8 5 dy R + Ur Q 5 Ey 8 Ed g L yf 9 N ts C rw OR Aj 6 T 6 8 / el L 1 9 ao IS Q Db za NY J jd D 7 7 Xd H td + n F GT Q Vp B 8 8 w PT w gb ")) čĊčĊĠĠĠĠĠĠĠ Ġtry { čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpriv Ġ= Ġf att oria . generate Private ( spec Priv ) čĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("\ n Erro re Ġin Ġf att oria : Ġ$ e Ġ\ n ") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġas w =" n " čĊĠĠĠĠĠĠĠ Ġprintln (" Do Ġyou Ġwant Ġto Ġchange Ġthe ĠPublic ĠKey ? Ġ( y / n )") čĊĠĠĠĠĠĠĠ Ġas w Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġif ( as w ==" yes " Ġ|| Ġas w ==" y " Ġ|| Ġas w ==" si "){ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Use Ġan ĠX . 5 0 9 Ġcertificate Ġcontaining Ġthe ĠPublic ĠKey Ġas ĠPEM Ġstring : Ġ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub key Ġ= Ġread Line (). toString (). replace ("\ n "," ") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġvar Ġmap Ġ= ĠCB OR Object . Decode From Bytes ( co se Structured . cb or ) Ġ// map : Ġ{ 4 : Ġ 1 6 8 3 8 8 0 0 1 7 , Ġ 6 : Ġ 1 6 2 2 9 7 3 2 5 2 , Ġ 1 : Ġ" GR ", Ġ- 2 6 0 : Ġ{ 1 : Ġ{" t ": Ġ[{" sc " .... čĊĠĠĠĠĠĠĠ Ġvar Ġh cert Ġ= Ġmap [ C wt Header Keys . HC ERT . as CB OR ()] Ġ// h cert : Ġ{ 1 : Ġ{" t ": Ġ[{" sc " ... čĊĠĠĠĠĠĠĠ Ġvar Ġor C BO Ġ= Ġh cert [ CB OR Object . From Object ( 1 )] Ġ// or C BO : Ġ{" t ": Ġ[{" sc " ... čĊĠĠĠĠĠĠĠ Ġvar Ġtmp Sr Ġ= Ġor C BO . toString () čĊĠĠĠĠĠĠĠ Ġprintln (" What Ġis Ġthe Ġname Ġin Ġthe Ġoriginal Ġcertificate ? Ġ") čĊĠĠĠĠĠĠĠ Ġvar Ġname Ġ= Ġread Line (). toString (). uppercase () čĊĠĠĠĠĠĠĠ Ġprintln (" What Ġis Ġthe Ġnew Ġname Ġyou Ġwant Ġto Ġinsert Ġin Ġthe Ġcertificate ? Ġ") čĊĠĠĠĠĠĠĠ Ġvar Ġnew _ name Ġ= Ġread Line (). toString (). uppercase () čĊĠĠĠĠĠĠĠ Ġprintln (" What Ġis Ġthe ĠS UR name Ġin Ġthe Ġoriginal Ġcertificate ? Ġ") čĊĠĠĠĠĠĠĠ Ġvar Ġs urname Ġ= Ġread Line (). toString (). uppercase () čĊĠĠĠĠĠĠĠ Ġprintln (" What Ġis Ġthe Ġnew ĠS UR name Ġyou Ġwant Ġto Ġinsert Ġin Ġthe Ġcertificate ? Ġ") čĊĠĠĠĠĠĠĠ Ġvar Ġnew _ surname Ġ= Ġread Line (). toString (). uppercase () čĊĠĠĠĠĠĠĠ Ġprintln (" What Ġis Ġthe Ġoriginal Ġborn Ġdate Ġinside Ġthe Ġcertificate ? Ġ( YYYY - MM - DD ) Ġ") čĊĠĠĠĠĠĠĠ Ġvar Ġdate Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġprintln (" What Ġis Ġthe Ġdate Ġyou Ġwant Ġto Ġinsert Ġin Ġthe Ġcertificate ? Ġ( YYYY - MM - DD )") čĊĠĠĠĠĠĠĠ Ġvar Ġnew _ date Ġ= Ġread Line (). toString () čĊĠĠĠĠĠĠĠ Ġtmp Sr Ġ= Ġtmp Sr . replace ( name , Ġnew _ name ) čĊĠĠĠĠĠĠĠ Ġtmp Sr Ġ= Ġtmp Sr . replace ( surname , Ġnew _ surname ) čĊĠĠĠĠĠĠĠ Ġtmp Sr Ġ= Ġtmp Sr . replace ( date , Ġnew _ date ) Ġ// YYYY - MM - DD čĊĠĠĠĠĠĠĠ Ġvar Ġc bo Ġ= ĠCB OR Object . From JSON String ( tmp Sr ) čĊĠĠĠĠĠĠĠ Ġh cert [ CB OR Object . From Object ( 1 )] Ġ= Ġc bo čĊĠĠĠĠĠĠĠ Ġmap [ C wt Header Keys . HC ERT . as CB OR ()] Ġ= Ġh cert čĊĠĠĠĠĠĠĠ Ġco se Structured . cb or Ġ= Ġmap . Encode ToBytes () čĊčĊĠĠĠĠĠĠĠ Ġ// END ĠMODIFY ĠSECTION čĊĠĠĠĠĠĠĠ Ġ// Encoding čĊĠĠĠĠĠĠĠ Ġ// co se cb ors r Ġis Ġthe Ġequivalent Ġto Ġthe Ġde compressed Ġarchive čĊĠĠĠĠĠĠĠ Ġvar Ġco se cb ors r Ġ= Ġco se Structured . encode Co se ( co se cb or string ) Ġ// Note : Ġzlib Archive Ġhere Ġis Ġonly Ġto Ġchose Ġwhere Ġto Ġlocate Ġsome Ġbytes čĊĠĠĠĠĠĠĠ Ġvar Ġmsg Obj Ġ= ĠCB OR Object . Decode From Bytes ( co se cb or string ) čĊĠĠĠĠĠĠĠ Ġvar Ġmsg Obj 2 Ġ= ĠCB OR Object . Decode From Bytes ( co se cb ors r ) Ġ// So ĠI Ġtake Ġthe Ġchanged Ġcontent čĊĠĠĠĠĠĠĠ Ġval Ġprotected Ġ= Ġmsg Obj [ 0 ]. Get ByteString () čĊĠĠĠĠĠĠĠ Ġvar Ġd sa : ĠSignature Ġ= ĠSignature . getInstance ( Verification Crypto Service . Algo . AL GO _ ECD SA 2 5 6 . value ) čĊĠĠĠĠĠĠĠ Ġvar Ġdata ToBe Signed Ġ= ĠCB OR Object . New Array (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd (" Signature 1 ") čĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd ( protected ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd ( ByteArray ( 0 )) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠAdd ( msg Obj 2 [ 2 ]. Get ByteString ()) čĊĠĠĠĠĠĠĠ Ġ}. Encode ToBytes () čĊĠĠĠĠĠĠĠ Ġval Ġcert a : ĠX 5 0 9 Certificate Ġ= Ġto Certificate ( pubkey ) čĊĠĠĠĠĠĠĠ Ġd sa . init Sign ( priv ) Ġ// Needs Ġa ĠPrivate ĠKey Ġwhere Ġcan ĠI Ġget Ġit ?! čĊĠĠĠĠĠĠĠ Ġd sa . update ( data ToBe Signed ) čĊĠĠĠĠĠĠĠ Ġvar Ġfir ma M ia : ĠByteArray Ġ= Ġd sa . sign () čĊĠĠĠĠĠĠĠ Ġvar Ġfir ma DER Ġ= Ġconv To Der ( fir ma M ia ) čĊĠĠĠĠĠĠĠ Ġmsg Obj 2 [ 3 ] Ġ= ĠCB OR Object . From Object ( fir ma DER ) Ġ// The Ġsign Ġis Ġin Ġthis Ġformat , Ġthe Ġ 8 8 Ġand Ġ 6 4 Ġappear Ġaf ert Ġextracting Ġthe Ġsignature Ġwith ĠEncode ToBytes () ĠĠĠĠ čĊĠĠĠĠĠĠĠ Ġvar Ġcompressed Ġ= Ġmsg Obj 2 . Encode ToBytes (). compress Base 4 5 Decoded Data () Ġ// Getting Ġthe ĠZ lib Archive Ġ- ĠWorks ĠTested čĊĠĠĠĠĠĠĠ Ġvar Ġnop refix Ġ= Ġcompressed . encode Base 4 5 () Ġ// Getting Ġthe ĠBD 4 5 Ġwithout Ġprefix Ġ- ĠWorks ĠTested čĊĠĠĠĠĠĠĠ Ġvar Ġwith prefix Ġ= Ġdf v . encode ( nop refix ) Ġ// Tested Ġit Ġworks čĊĠĠĠĠĠĠĠ Ġprintln ( with prefix ) Ġ// ĠBE ĠAW ARE ĠTO ĠIN VISIBLE ĠCHAR ACT ERS ĠAT ĠTHE ĠEND ĠOF ĠTHE ĠSTRING ĠLIKE ĠSPACE ĠOR ĠLINE ĠRETURN čĊĠĠĠĠĠĠĠ Ġreadable Green Pass Ġ= Ġco se Structured . cb or . decode Green Certificate () čĊĠĠĠĠĠĠĠ Ġprintln ( readable Green Pass ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( verify ( with prefix , Ġpub key )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Valid ĠKey ") čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MIS MATCH : ĠKey Ġnot Ġvalid ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġprintln (" Used Ġprivate : Ġ${ Base 6 4 . get Encoder (). encode ToString ( priv . encoded )} ") čĊĠĠĠĠĠĠĠ Ġprintln (" Used Ġpublic : Ġ$ pubkey ") čĊĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠ Ġprintln (" Thank Ġyou Ġto Ġhave Ġused Ġthe Ġprogram !") čĊĠĠĠ Ġ} č Ċ }