RSA Public Key generation - Key Size in Characters is Different in iOS

411 Views Asked by At

As per application's requirement, I need to create RSA Public Key of size 512. I'm using below code for the same:

func generatePublicKey() -> String
{
    var strKey : String = ""

    let publicKeyAttr: [NSObject: NSObject] = [kSecAttrIsPermanent:true as NSObject, kSecAttrApplicationTag:"com.nichetech.DEMO.public".data(using: String.Encoding.utf8)! as NSObject]
    let privateKeyAttr: [NSObject: NSObject] = [kSecAttrIsPermanent:true as NSObject, kSecAttrApplicationTag:"com.nichetech.DEMO.private".data(using: String.Encoding.utf8)! as NSObject]

    var keyPairAttr = [NSObject: NSObject]()
    keyPairAttr[kSecAttrKeyType] = kSecAttrKeyTypeRSA
    keyPairAttr[kSecAttrKeySizeInBits] = 512 as NSObject
    keyPairAttr[kSecPublicKeyAttrs] = publicKeyAttr as NSObject
    keyPairAttr[kSecPrivateKeyAttrs] = privateKeyAttr as NSObject

    statusCode = SecKeyGeneratePair(keyPairAttr as CFDictionary, &publicKey, &privateKey)
      var error:Unmanaged<CFError>?
    if let cfdata = SecKeyCopyExternalRepresentation(self.publicKey!, &error) {
        let data:Data = cfdata as Data
        //let b64Key = (data).base64EncodedString()

        let b64Key = (data).base64EncodedString(options:NSData.Base64EncodingOptions.lineLength76Characters)

        let strPublicKey = appendPrefixSuffixTo(b64Key, prefix: "-----BEGIN PUBLIC KEY-----\n", suffix: "\n-----END PUBLIC KEY-----")

        strKey = strPublicKey
    }


return strKey
}

We are having the same feature on Android as well as in .net. When we count the length of the string in all other platforms it's 181 characters with space and 174 characters without space.

But, in iOS, we're getting only 153 characters with space and 146 characters without space.

Is there any issue with our code???? Or iOS has some different RSA length?

Please help. Thanks in Advance.

0

There are 0 best solutions below