aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/utils
diff options
context:
space:
mode:
authorpacien2018-02-10 14:16:15 +0100
committerpacien2018-02-10 14:16:15 +0100
commit87ec3620d2259064831356c2f4000ae591756fd2 (patch)
tree9312da1d357fdd3790d5b80af221653696b23089 /app/src/main/java/org/pacien/tincapp/utils
parentd1c39ba87bb32308c2d3a7a749abffeb773541ef (diff)
downloadtincapp-87ec3620d2259064831356c2f4000ae591756fd2.tar.gz
Reformat code
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/utils')
-rw-r--r--app/src/main/java/org/pacien/tincapp/utils/PemUtils.kt82
1 files changed, 41 insertions, 41 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/utils/PemUtils.kt b/app/src/main/java/org/pacien/tincapp/utils/PemUtils.kt
index 3d59476..33240f9 100644
--- a/app/src/main/java/org/pacien/tincapp/utils/PemUtils.kt
+++ b/app/src/main/java/org/pacien/tincapp/utils/PemUtils.kt
@@ -17,46 +17,46 @@ import java.io.Writer
17 */ 17 */
18object PemUtils { 18object PemUtils {
19 19
20 private val PROVIDER = org.bouncycastle.jce.provider.BouncyCastleProvider() 20 private val PROVIDER = org.bouncycastle.jce.provider.BouncyCastleProvider()
21 private val ENCRYPTED_PROC_TYPE_HEADER = PemHeader("Proc-Type", "4,ENCRYPTED") 21 private val ENCRYPTED_PROC_TYPE_HEADER = PemHeader("Proc-Type", "4,ENCRYPTED")
22 private val DEK_INFO_HEADER_KEY = "DEK-Info" 22 private val DEK_INFO_HEADER_KEY = "DEK-Info"
23 private val ALGO = "AES-256-CBC" 23 private val ALGO = "AES-256-CBC"
24 24
25 private class DekInfo(val algName: String, val iv: ByteArray) 25 private class DekInfo(val algName: String, val iv: ByteArray)
26 26
27 private fun dekInfoHeader(iv: ByteArray) = PemHeader(DEK_INFO_HEADER_KEY, "$ALGO,${Hex.toHexString(iv)}") 27 private fun dekInfoHeader(iv: ByteArray) = PemHeader(DEK_INFO_HEADER_KEY, "$ALGO,${Hex.toHexString(iv)}")
28 private fun PemObject.getPemHeaders() = headers.map { it as PemHeader } 28 private fun PemObject.getPemHeaders() = headers.map { it as PemHeader }
29 29
30 fun read(f: File): PemObject = PEMParser(FileReader(f)).readPemObject() 30 fun read(f: File): PemObject = PEMParser(FileReader(f)).readPemObject()
31 fun write(obj: PemObject, out: Writer) = JcaPEMWriter(out).apply { writeObject(obj) }.apply { close() } 31 fun write(obj: PemObject, out: Writer) = JcaPEMWriter(out).apply { writeObject(obj) }.apply { close() }
32 fun isEncrypted(obj: PemObject) = obj.headers.contains(ENCRYPTED_PROC_TYPE_HEADER) 32 fun isEncrypted(obj: PemObject) = obj.headers.contains(ENCRYPTED_PROC_TYPE_HEADER)
33 33
34 fun encrypt(obj: PemObject, passPhrase: String) = 34 fun encrypt(obj: PemObject, passPhrase: String) =
35 JcePEMEncryptorBuilder(ALGO) 35 JcePEMEncryptorBuilder(ALGO)
36 .setProvider(PROVIDER) 36 .setProvider(PROVIDER)
37 .build(passPhrase.toCharArray()) 37 .build(passPhrase.toCharArray())
38 .let { PemObject(obj.type, listOf(ENCRYPTED_PROC_TYPE_HEADER, dekInfoHeader(it.iv)), it.encrypt(obj.content)) } 38 .let { PemObject(obj.type, listOf(ENCRYPTED_PROC_TYPE_HEADER, dekInfoHeader(it.iv)), it.encrypt(obj.content)) }
39 39
40 fun decrypt(obj: PemObject, passPhrase: String?) = 40 fun decrypt(obj: PemObject, passPhrase: String?) =
41 if (isEncrypted(obj)) { 41 if (isEncrypted(obj)) {
42 val dekInfo = try { 42 val dekInfo = try {
43 obj.getPemHeaders() 43 obj.getPemHeaders()
44 .find { it.name == DEK_INFO_HEADER_KEY }!! 44 .find { it.name == DEK_INFO_HEADER_KEY }!!
45 .value!! 45 .value!!
46 .split(',') 46 .split(',')
47 .let { DekInfo(it[0], Hex.decode(it[1])) } 47 .let { DekInfo(it[0], Hex.decode(it[1])) }
48 } catch (e: Exception) { 48 } catch (e: Exception) {
49 throw PEMException("Malformed DEK-Info header.", e) 49 throw PEMException("Malformed DEK-Info header.", e)
50 } 50 }
51 51
52 JcePEMDecryptorProviderBuilder() 52 JcePEMDecryptorProviderBuilder()
53 .setProvider(PROVIDER) 53 .setProvider(PROVIDER)
54 .build(passPhrase?.toCharArray()) 54 .build(passPhrase?.toCharArray())
55 .get(dekInfo.algName) 55 .get(dekInfo.algName)
56 .decrypt(obj.content, dekInfo.iv) 56 .decrypt(obj.content, dekInfo.iv)
57 .let { PemObject(obj.type, it) } 57 .let { PemObject(obj.type, it) }
58 } else { 58 } else {
59 obj 59 obj
60 } 60 }
61 61
62} 62}