<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="../../coverage.css"/> <title> clj_activitypub/internal/crypto.clj </title> </head> <body> <span class="covered" title="1 out of 1 forms covered"> 001 (ns clj-activitypub.internal.crypto </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 002 "copied from [Jahfer's clj-activitypub library](https://github.com/jahfer/clj-activitypub). </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 003 If and when Jahfer issues a release of that library, this directory will be deleted and a </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 004 dependency on that library will be added to the project." </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 005 (:require [clojure.java.io :as io]) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 006 (:import (java.util Base64) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 007 (java.security MessageDigest SecureRandom Signature))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 008 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 009 (java.security.Security/addProvider </span><br/> <span class="covered" title="1 out of 1 forms covered"> 010 (org.bouncycastle.jce.provider.BouncyCastleProvider.)) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 011 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 012 (defn- keydata [reader] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 013 (->> reader </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 014 (org.bouncycastle.openssl.PEMParser.) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 015 (.readObject))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 016 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 017 (defn- pem-string->key-pair [string] </span><br/> <span class="not-covered" title="0 out of 6 forms covered"> 018 (let [kd (keydata (io/reader (.getBytes string)))] </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 019 (.getKeyPair (org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter.) kd))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 020 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 021 (defn private-key [private-pem-str] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 022 (-> private-pem-str </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 023 (pem-string->key-pair) </span><br/> <span class="not-tracked" title="0 out of 0 forms covered"> 024 (.getPrivate))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 025 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 026 (defn base64-encode [bytes] </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 027 (.encodeToString (Base64/getEncoder) bytes)) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 028 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 029 (defn sha256-base64 [data] </span><br/> <span class="not-covered" title="0 out of 5 forms covered"> 030 (let [digest (.digest (MessageDigest/getInstance "SHA-256") (.getBytes data))] </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 031 (base64-encode digest))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 032 </span><br/> <span class="covered" title="1 out of 1 forms covered"> 033 (defn sign [data private-key] </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 034 (let [bytes (.getBytes data) </span><br/> <span class="not-covered" title="0 out of 4 forms covered"> 035 signer (doto (Signature/getInstance "SHA256withRSA") </span><br/> <span class="not-covered" title="0 out of 3 forms covered"> 036 (.initSign private-key (SecureRandom.)) </span><br/> <span class="not-covered" title="0 out of 2 forms covered"> 037 (.update bytes))] </span><br/> <span class="not-covered" title="0 out of 1 forms covered"> 038 (.sign signer))) </span><br/> <span class="blank" title="0 out of 0 forms covered"> 039 </span><br/> </body> </html>