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.