Rodrigo Silva
11/27/2022, 8:58 PMRodrigo Silva
11/27/2022, 9:00 PMprivate fun keysCert() = runCatching {
Security.addProvider(org.bouncycastle.jce.provider.BouncyCastleProvider())
val certificate: X509Certificate = CertificateFactory
.getInstance("X.509", "BC")
.generateCertificate(FileInputStream("/home/rodrigo/Projects/aries/commons/backend/commons_security/src/main/resources/Some.cer")) as X509Certificate
val keyStore = KeyStore.getInstance("PKCS12")
keyStore.load(
FileInputStream("/home/rodrigo/Projects/aries/commons/backend/commons_security/src/main/resources/Some.p12"),
"password".toCharArray()
)
val privateKey = keyStore.getKey("some", "password".toCharArray()) as PrivateKey
Pair(certificate, privateKey)
}.onFailure { it.message }
fun String.encypt(): Result<ByteArray> = runCatching {
val cmsEnvelopedDataGenerator = CMSEnvelopedDataGenerator()
val jceKey = JceKeyTransRecipientInfoGenerator(keysCert().getOrThrow().first)
cmsEnvelopedDataGenerator.addRecipientInfoGenerator(jceKey)
val message = CMSProcessableByteArray(this.toByteArray())
val encryptor = JceCMSContentEncryptorBuilder(CMSAlgorithm.AES256_CBC).setProvider("BC").build()
cmsEnvelopedDataGenerator.generate(message, encryptor).encoded
}.onFailure { it.message }
fun ByteArray.decrypt(): Result<String> = runCatching {
val envelopeData = CMSEnvelopedData(this)
val recip = envelopeData.recipientInfos.getRecipients()
val recipientInfo: KeyTransRecipientInformation = recip.iterator().next() as KeyTransRecipientInformation
String(recipientInfo.getContent(JceKeyTransEnvelopedRecipient(keysCert().getOrThrow().second)))
}.onFailure { it.message }
Rodrigo Silva
11/27/2022, 9:01 PMRodrigo Silva
11/27/2022, 9:01 PMfun String.encypt(): Result<String> = runCatching {
// equals
String(cmsEnvelopedDataGenerator.generate(message, encryptor).encoded)
}.onFailure { it.message }
and on decrypt
fun String.decrypt(): Result<String> = runCatching {
val envelopeData = CMSEnvelopedData(this.toByteArray()) -- getting exception here
...
What am I doing wrong?Kristian Nedrevold
11/27/2022, 11:10 PMKristian Nedrevold
11/27/2022, 11:13 PMfun String.encypt(): Result<String> = runCatching {
// equals
Base64.getEncoder().encodeToString(cmsEnvelopedDataGenerator.generate(message, encryptor).encoded)
}.onFailure { it.message }
Kristian Nedrevold
11/27/2022, 11:20 PMfun String.decrypt(): Result<String> = runCatching {
val decoded = Base64.getDecoder().decode(this)
val envelopeData = CMSEnvelopedData(decoded)
val recip = envelopeData.recipientInfos.getRecipients()
val recipientInfo: KeyTransRecipientInformation = recip.iterator().next() as KeyTransRecipientInformation
String(recipientInfo.getContent(JceKeyTransEnvelopedRecipient(keysCert().getOrThrow().second)))
}.onFailure { it.message }
Rodrigo Silva
11/28/2022, 1:08 AM