Skip to content

Commit

Permalink
Merge pull request #117 from ArcBlock/aes-rsa
Browse files Browse the repository at this point in the history
chore: fix res aes define
  • Loading branch information
CreatFish authored Feb 27, 2023
2 parents e956e57 + 110e809 commit 6a09343
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 30 deletions.
2 changes: 1 addition & 1 deletion .jazzy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ github_url: https://github.com/ArcBlock/arcblock-ios-sdk
github_file_prefix: https://github.com/ArcBlock/arcblock-ios-sdk/tree/master
exclude:
- ArcBlockSDK/ABSDKCoreKit/Network/ABSDKPagination.swift
module_version: 0.11.40
module_version: 0.11.41
2 changes: 1 addition & 1 deletion ArcBlockSDK.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

Pod::Spec.new do |s|
s.name = 'ArcBlockSDK'
s.version = '0.11.40'
s.version = '0.11.41'
s.summary = 'Used to integrate iOS apps with ArcBlock Platform.'

# This description is used to generate tags and improve search results.
Expand Down
11 changes: 9 additions & 2 deletions ArcBlockSDK/ABSDKCoreKit/AESUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,13 @@ public class AESUtils {
}
return String(bytes: bytes, encoding: .utf8)
}
/// 解密String到String
public static func decryptString2String(_ string: String, key: String) -> String? {
guard let bytes = Data(multibaseEncoded: string)?.bytes, let decrypted = decryptByte2Byte(bytes, key: key) else {
return nil
}
return String(bytes: decrypted, encoding: .utf8)
}
/// 解密hex到Byte
public static func decryptHex2Byte(_ hex: String, key: String) -> Array<UInt8>? {
decryptByte2Byte(Data(hex: hex).bytes, key: key)
Expand All @@ -81,12 +88,12 @@ public class AESUtils {
public static func decryptHex2String(_ hex: String, key: String) -> String? {
decryptByte2String(Data(hex: hex).bytes, key: key)
}
/// 解密base46到Byte
/// 解密base64到Byte
public static func decryptBase642Byte(_ base64: String, key: String) -> Array<UInt8>? {
guard let bytes = Data(base64Encoded: base64)?.bytes else { return nil }
return decryptByte2Byte(bytes, key: key)
}
/// 解密base46到String
/// 解密base64到String
public static func decryptBase642String(_ base64: String, key: String) -> String? {
guard let bytes = Data(base64Encoded: base64)?.bytes else { return nil }
return decryptByte2String(bytes, key: key)
Expand Down
53 changes: 38 additions & 15 deletions ArcBlockSDK/ABSDKCoreKit/RSAUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ public class RSAUtils {
return pemData.multibaseEncodedString(inBase: .base58BTC)
}

public static func decodeSecKeyFromBase64(encodedKey: String, isPrivate: Bool = false, keySzie: Int = 1024) -> SecKey? {
var keyString = encodedKey
public static func decodeSecKeyFromBase64(base64EncodedKey: String, isPrivate: Bool = false, keySzie: Int = 1024) -> SecKey? {
var keyString = base64EncodedKey
keyString = keyString.replacingOccurrences(of:"-----BEGIN PUBLIC KEY-----", with: "")
keyString = keyString.replacingOccurrences(of:"-----END PUBLIC KEY-----", with: "")
keyString = keyString.replacingOccurrences(of:"-----BEGIN PRIVATE KEY-----", with: "")
Expand Down Expand Up @@ -158,8 +158,8 @@ public class RSAUtils {
}

/// 加密Data到Data
public static func encryptData2Data(_ data: Data, publicKey: String) -> Data? {
guard let pk = decodeSecKeyFromBase64(encodedKey: publicKey) else {
public static func encryptData2Data(_ data: Data, base64PK: String) -> Data? {
guard let pk = decodeSecKeyFromBase64(base64EncodedKey: base64PK) else {
return nil
}

Expand All @@ -168,22 +168,45 @@ public class RSAUtils {
return encrypted as? Data
}
/// 加密String到Data
public static func encryptString2Data(_ string: String, publicKey: String) -> Data? {
public static func encryptString2Data(_ string: String, base64PK: String) -> Data? {
guard let data = string.data(using: .utf8) else {
return nil
}
return encryptData2Data(data, publicKey: publicKey)
return encryptData2Data(data, base64PK: base64PK)
}
/// 加密String到Base58Btc
public static func encryptString2B58Btc(_ string: String, publicKey: String) -> String? {
guard let encrypted = encryptString2Data(string, publicKey: publicKey) else {
public static func encryptString2B58Btc(_ string: String, base64PK: String) -> String? {
guard let encrypted = encryptString2Data(string, base64PK: base64PK) else {
return nil
}
return encrypted.multibaseEncodedString(inBase: .base58BTC)
}
/// 解密Data到Data
public static func decryptData2Data(_ data: Data, privateKey: String) -> Data? {
guard let sk = decodeSecKeyFromBase64(encodedKey: privateKey, isPrivate: true) else {
public static func decryptData2Data(_ data: Data, base64SK: String) -> Data? {
guard let sk = decodeSecKeyFromBase64(base64EncodedKey: base64SK, isPrivate: true) else {
return nil
}

var error: Unmanaged<CFError>?
let encrypted = SecKeyCreateDecryptedData(sk, .rsaEncryptionOAEPSHA1, data as CFData, &error)
return encrypted as? Data
}
/// 解密Data到Data
public static func decryptData2Data(_ data: Data, skData: Data) -> Data? {
var keyData = skData
if let stripedData = stripKeyHeader(keyData: skData) {
keyData = stripedData
}

let attributes: [CFString: Any] = [
kSecAttrKeyClass: kSecAttrKeyClassPrivate,
kSecAttrKeyType: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits: 1024,
kSecReturnPersistentRef: true
]
var skError: Unmanaged<CFError>?
guard let sk = SecKeyCreateWithData(keyData as CFData, attributes as CFDictionary, &skError) else {
print("Error: Problem in SecKeyCreateWithData()")
return nil
}

Expand All @@ -192,15 +215,15 @@ public class RSAUtils {
return encrypted as? Data
}
/// 解密Base58Btc到Data
public static func decryptB58Btc2Data(_ string: String, privateKey: String) -> Data? {
guard let data = Data(multibaseEncoded: string) else {
public static func decryptB58Btc2Data(_ b58btcString: String, base64SK: String) -> Data? {
guard let data = Data(multibaseEncoded: b58btcString) else {
return nil
}
return decryptData2Data(data, privateKey: privateKey)
return decryptData2Data(data, base64SK: base64SK)
}
/// 解密Base58Btc到String
public static func decryptB58Btc2String(_ string: String, privateKey: String) -> String? {
guard let data = Data(multibaseEncoded: string), let decrypted = decryptData2Data(data, privateKey: privateKey) else {
public static func decryptB58Btc2String(_ b58btcString: String, base64SK: String) -> String? {
guard let data = Data(multibaseEncoded: b58btcString), let decrypted = decryptData2Data(data, base64SK: base64SK) else {
return nil
}
return String(data: decrypted, encoding: .utf8)
Expand Down
20 changes: 10 additions & 10 deletions ArcBlockSDKTests/RSAUtilsSpec.swift
Original file line number Diff line number Diff line change
Expand Up @@ -76,34 +76,34 @@ class RSAUtilsSpec: QuickSpec {
print(RSAUtils.exportPemB58BtcSk(data: keyPair.sk))
}

let encryted = RSAUtils.encryptString2B58Btc(abcdOriginString, publicKey: androidPKPEM)
let decrypted = RSAUtils.decryptB58Btc2String(encryted!, privateKey: androidSKPEM)
let encryted = RSAUtils.encryptString2B58Btc(abcdOriginString, base64PK: androidPKPEM)
let decrypted = RSAUtils.decryptB58Btc2String(encryted!, base64SK: androidSKPEM)
print(encryted)
print(decrypted)

let emptyEncryted = RSAUtils.encryptString2B58Btc(emptyOriginString, publicKey: androidPKPEM)
let emptyDecrypted = RSAUtils.decryptB58Btc2String(emptyEncryted!, privateKey: androidSKPEM)
let emptyEncryted = RSAUtils.encryptString2B58Btc(emptyOriginString, base64PK: androidPKPEM)
let emptyDecrypted = RSAUtils.decryptB58Btc2String(emptyEncryted!, base64SK: androidSKPEM)
print(emptyEncryted)
print(emptyDecrypted)
guard let webPKABCDEncrypted = RSAUtils.encryptString2B58Btc(abcdOriginString, publicKey: webPKPEM) else {
guard let webPKABCDEncrypted = RSAUtils.encryptString2B58Btc(abcdOriginString, base64PK: webPKPEM) else {
XCTFail("WebPkEncrypt Failed!")
return
}
expect(RSAUtils.decryptB58Btc2String(webPKABCDEncrypted, privateKey: webSKPEM)).to(equal(abcdOriginString))
expect(RSAUtils.decryptB58Btc2String(webPKABCDEncrypted, base64SK: webSKPEM)).to(equal(abcdOriginString))

guard let webPKEmptyEncrypted = RSAUtils.encryptString2B58Btc(emptyOriginString, publicKey: webPKPEM) else {
guard let webPKEmptyEncrypted = RSAUtils.encryptString2B58Btc(emptyOriginString, base64PK: webPKPEM) else {
XCTFail("WebPkEmptyEncrypt Failed!")
return
}
expect(RSAUtils.decryptB58Btc2String(webPKEmptyEncrypted, privateKey: webSKPEM)).to(equal(emptyOriginString))
expect(RSAUtils.decryptB58Btc2String(webPKEmptyEncrypted, base64SK: webSKPEM)).to(equal(emptyOriginString))

guard let webSKABCDDecrypted = RSAUtils.decryptB58Btc2String(webABCDEncrypted, privateKey: webSKPEM) else {
guard let webSKABCDDecrypted = RSAUtils.decryptB58Btc2String(webABCDEncrypted, base64SK: webSKPEM) else {
XCTFail("WebSkDecrypt Failed!")
return
}
expect(webSKABCDDecrypted).to(equal(abcdOriginString))

guard let webSKEmptyDecrypted = RSAUtils.decryptB58Btc2String(webEmptyEncrypted, privateKey: webSKPEM) else {
guard let webSKEmptyDecrypted = RSAUtils.decryptB58Btc2String(webEmptyEncrypted, base64SK: webSKPEM) else {
XCTFail("WebSkDecrypt Failed!")
return
}
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
## 0.11.41 (February 27, 2023)
- fix encrypt define
- Merge pull request #116 from ArcBlock/update-protobuf
- Merge pull request #115 from ArcBlock/update-protobuf
- Merge pull request #114 from ArcBlock/update-protobuf
- Merge pull request #113 from ArcBlock/base58-fix
- Merge pull request #112 from ArcBlock/base58-fix

## 0.11.40 (February 21, 2023)
- fix pem keypair
- Merge pull request #115 from ArcBlock/update-protobuf
Expand Down
2 changes: 1 addition & 1 deletion version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.11.40
0.11.41

0 comments on commit 6a09343

Please sign in to comment.