security=> (count byte-arr) 115 tprat...@neuromancer:~$ wc public.der 5 11 294 public.der
your byte-seq does not do what the java version does :) On Aug 31, 9:19 pm, Sam Hughes <samuel.jenni...@gmail.com> wrote: > Hey, > > I'm trying to write a Clojure security library. My first step is > porting some working Java code into Clojure. The Java and Clojure > snippets below are more or less the same, but with the Clojure code, > I'm getting: "java.security.InvalidKeyException: IOException: null > [Thrown class java.security.spec.InvalidKeySpecException]," which I > can't seem to replicate with the Java code. > > The goal of the code is to read in a DER file, use it to encrypt a > "Hello World" message, then output the encrypted message as a new > file. > > Neither of these snippets necessarily follow good coding standards. > That said, here's the working Java code snippet: > > final File keyFile = new File("public.der"); > byte[] encodedKey = new byte[(int) keyFile.length()]; > > new FileInputStream(keyFile).read(encodedKey); > final byte[] newEncoded = encodedKey; > > final X509EncodedKeySpec keySpec = new X509EncodedKeySpec(newEncoded); > KeyFactory kf = KeyFactory.getInstance("RSA"); > PublicKey pk = kf.generatePublic(keySpec); > > Cipher rsa = Cipher.getInstance("RSA"); > rsa.init(Cipher.ENCRYPT_MODE, pk); > OutputStream os = new CipherOutputStream(new FileOutputStream > ("encrypted.rsa"), rsa); > > Writer out = new OutputStreamWriter(os); > out.write("Hello World"); > out.close(); > os.close(); > > And here's the Exception throwing Clojure code: > > (ns security > (:import > [java.io File FileInputStream IOException] > [java.security.spec X509EncodedKeySpec] > [java.security KeyFactory PublicKey > KeyPairGenerator NoSuchAlgorithmException KeyPair] > [javax.crypto KeyGenerator Cipher])) > > (defn byte-seq [rdr] > (let [result (byte (. rdr read))] > (if (= result -1) > (do (. rdr close) nil) > (lazy-seq (cons result (byte-seq rdr)))))) > > (def stream (new FileInputStream (new File "public.der"))) > (def byte-arr (into-array Byte/TYPE (byte-seq stream))) > (def pk-spec (new X509EncodedKeySpec byte-arr)) > (def kf (. KeyFactory (getInstance "RSA"))) > (def pk (. kf (generatePublic pk-spec))) ; exception thrown > here > > Does anyone have any suggestion for what could be causing the > exception? I'm perplexed because, right now, I'm just trying to > replicate Java code in Clojure -- nothing too fancy. > > Thanks a lot, > Sam --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---