Java Cryptography Architecture და Java Cryptography Extension განსაზღვრავენ Java პროგრამირების ენაზე დაფუძნებულ სისტემებში კრიპტოგრაფიისა და მასთან დაკავშირებული სხვა ოპერაციების ზოგად ჩარჩოებს. იქიდან გამომდინარე, რომ ID ბარათი წარმოადგენს კრიპტოგრაფიულ საშუალებას, ბუნებრივია რომ მას შეეძლოს სტანდარტული ინტერფეისის გამოყენებით კრიპტოგრაფიული ოპერაციების ჩატარება.
ამ მიზნით შექმნილია სპეციალური პროვაიდერი JCA/JCE წესების მიხედვით.
კრიპტოგრაფიული პროვაიდერი მხარს უჭერს შემდეგ ინტერფეისებს:
პროვაიდერის ინსტალაცია შესაძლებელია როგორც ცენტრალიზებულად, JRE გარემოში .jar ფაილების განთავსებით, ისე ლოკალურად პროგრამაში – ამ jar ფაილების CLASSPATH–ში განთავსებით. პროვაიდერის კლასის სრული სახელია ge.eid.card.mw.jca.EIDProvider
ამ ეტაპზე jar ფაილების გადაწერა შეგიძლიათ ამავე გვერდიდან
ახლო მომავალში ეს ფაილები ასევე დაიდება id.ge –ს Maven–რეპოზიტორიში. ორივე ფაილი ოპერირებისათვის ასევე საჭიროებს sl4j ბიბლიოთეკას, რომლის გადმოწერაც შესაძლებელია მისი გვერდიდან.
ორივე ფაილი ციფრულად ხელმოწერილია სახელმწიფო სერვისების განვითარების სააგენტოს გასაღებით, რომელიც გაცემულია სერტიფიკაციის ცენტრ VeriSign–ის მიერ. აქედან გამომდინარე, მისი ამუშავებისათვის დამატებითი სერტიფიკატების იმპორტი საჭირო არ არის. |
import ge.eid.card.mw.jca.EIDProvider; import java.math.BigInteger; import java.security.KeyStore; import java.security.KeyStore.Entry; import java.security.PrivateKey; import java.security.Security; import java.security.Signature; import java.security.cert.X509Certificate; import java.util.Enumeration; import javax.security.auth.callback.CallbackHandler; /** * Hello world! * */ public class App { public static void main(String[] args) throws Exception { // პროვაიდერის შექმნა EIDProvider prov = new EIDProvider(); // PIN კოდების შეყვანის Callback-ის შექმნა // თუკი ქვემოთ მოყვანილ 2 სტრიქონს გამოტოვებთ, PIN კოდის შეყვანა // საჭირო იქნება გრაფიკულ დიალოგში CallbackHandler cmdLineHdlr = new com.sun.security.auth.callback.TextCallbackHandler(); prov.setCallbackHandler(cmdLineHdlr); // პროვაიდერის რეგისტრაცია Security.addProvider(prov); // პროვაიდერი არეგისტრირებს KeyStore-ს სახელად GE_EID KeyStore ks = KeyStore.getInstance("GE_EID"); ks.load(null, new char[] {}); // ასე შეგვიძლია დავათვალიეროთ KeyStore-ს შიგთავსი Enumeration<String> aliases = ks.aliases(); while (aliases.hasMoreElements()) { String alias = aliases.nextElement(); if (ks.isCertificateEntry(alias)) { X509Certificate cert = (X509Certificate) ks .getCertificate(alias); System.out.println(alias + "\t" + cert.getSubjectDN()); } } // ავიღოთ აუთენტიფიკაციის გასაღები // რასაკვირველია, ეს ობიექტი შეიცავს არა გასაღებს არამედ მითითებას მასზე PrivateKey pk = (PrivateKey) ks.getKey("CitizenAuth.1", null); // ავიღოთ SHA256withRSA ხელმოწერა ID ბარათის პროვაიდერიდან Signature sign = Signature.getInstance("SHA256withRSA", "GE_EID"); sign.initSign(pk); // ხელი მოვაწეროთ ტექსტს Hello World! sign.update("Hello World!".getBytes()); byte[] buffer = sign.sign(); System.out.println("Signed Data: " + (new BigInteger(1, buffer).toString(16))); // ავიღოთ SHA256withRSA ხელმოწერა Java-ს სტანდარტული საშუალებებით Signature sign1 = Signature.getInstance("SHA256withRSA"); // შევამოწმოთ ხელმოწერის სისწორე sign1.initVerify(ks.getCertificate("CitizenAuth.1")); sign1.update("Hello World!".getBytes()); boolean isValid = sign1.verify(buffer); System.out.println("Valid? " + isValid); } } |