Skip to content
This repository was archived by the owner on Aug 26, 2025. It is now read-only.

Commit 2e55f1c

Browse files
authored
Merge pull request #276 from tangem/release/3.5.0
2 parents c3570df + 3d2050d commit 2e55f1c

File tree

106 files changed

+5803
-647
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+5803
-647
lines changed

CHANGELOG

Lines changed: 140 additions & 426 deletions
Large diffs are not rendered by default.

Example/TangemSdkExample/AppModel.swift

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,19 @@ class AppModel: ObservableObject {
1717

1818
//Wallet creation
1919
@Published var curve: EllipticCurve = .secp256k1
20+
@Published var mnemonicString: String = ""
21+
@Published var passphrase: String = ""
2022
//Sign
2123
@Published var derivationPath: String = ""
24+
@Published var signHashesCount: String = "15"
2225
//Attestation
2326
@Published var attestationMode: AttestationTask.Mode = .normal
2427
//JSON-RPC
2528
@Published var json: String = ""
2629
//Personalization
2730
@Published var personalizationConfig: String = ""
31+
//Set user code recovery allowed
32+
@Published var isUserCodeRecoveryAllowed: Bool = false
2833

2934
//MARK:- Outputs
3035
@Published var logText: String = DebugLogger.logPlaceholder
@@ -248,10 +253,15 @@ extension AppModel {
248253
self.complete(with: "Failed to parse hd path")
249254
return
250255
}
256+
257+
guard let hashesCount = Int(signHashesCount, radix: 10) else {
258+
self.complete(with: "Failed to signed hashes count")
259+
return
260+
}
251261

252262
UIApplication.shared.endEditing()
253263

254-
let hashes = (0..<5).map {_ -> Data in getRandomHash()}
264+
let hashes = (0..<hashesCount).map {_ -> Data in getRandomHash()}
255265

256266
tangemSdk.sign(hashes: hashes,
257267
walletPublicKey: walletPublicKey,
@@ -285,11 +295,24 @@ extension AppModel {
285295
self.complete(with: "Scan card to retrieve cardId")
286296
return
287297
}
288-
298+
289299
tangemSdk.createWallet(curve: curve,
290300
cardId: cardId,
291301
completion: handleCompletion)
292302
}
303+
304+
func importWallet() {
305+
guard let cardId = card?.cardId else {
306+
self.complete(with: "Scan card to retrieve cardId")
307+
return
308+
}
309+
310+
tangemSdk.importWallet(curve: curve,
311+
cardId: cardId,
312+
mnemonic: mnemonicString,
313+
passphrase: passphrase,
314+
completion: handleCompletion)
315+
}
293316

294317
func purgeWallet(walletPublicKey: Data) {
295318
guard let cardId = card?.cardId else {
@@ -579,6 +602,19 @@ extension AppModel {
579602
func resetToFactory() {
580603
tangemSdk.startSession(with: ResetToFactorySettingsTask(), completion: handleCompletion)
581604
}
605+
606+
func getEntropy() {
607+
tangemSdk.startSession(with: GetEntropyCommand(), completion: handleCompletion)
608+
}
609+
610+
func setUserCodeRecoveryAllowed() {
611+
guard let cardId = card?.cardId else {
612+
self.complete(with: "Please, scan card before")
613+
return
614+
}
615+
616+
tangemSdk.setUserCodeRecoveryAllowed(isUserCodeRecoveryAllowed, cardId: cardId, completion: handleCompletion)
617+
}
582618
}
583619

584620
//MARK:- Json RPC
@@ -652,6 +688,7 @@ extension AppModel {
652688
case setPasscode
653689
case resetUserCodes
654690
case createWallet
691+
case importWallet
655692
case purgeWallet
656693
//files
657694
case readFiles
@@ -674,6 +711,8 @@ extension AppModel {
674711
case personalize
675712
case resetBackup
676713
case resetToFactory
714+
case getEntropy
715+
case setUserCodeRecoveryAllowed
677716
}
678717

679718
private func chooseMethod(walletPublicKey: Data? = nil) {
@@ -688,6 +727,7 @@ extension AppModel {
688727
case .signHash: runWithPublicKey(signHash, walletPublicKey)
689728
case .signHashes: runWithPublicKey(signHashes, walletPublicKey)
690729
case .createWallet: createWallet()
730+
case .importWallet: importWallet()
691731
case .purgeWallet: runWithPublicKey(purgeWallet, walletPublicKey)
692732
case .readFiles: readFiles()
693733
case .writeUserFile: writeUserFile()
@@ -706,6 +746,8 @@ extension AppModel {
706746
case .personalize: personalize()
707747
case .resetBackup: resetBackup()
708748
case .resetToFactory: resetToFactory()
749+
case .getEntropy: getEntropy()
750+
case .setUserCodeRecoveryAllowed: setUserCodeRecoveryAllowed()
709751
}
710752
}
711753
}

Example/TangemSdkExample/ContentView.swift

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ struct ContentView: View {
125125
.cornerRadius(8)
126126
.overlay(RoundedRectangle(cornerRadius: 8)
127127
.stroke(Color.orange, lineWidth: 2))
128-
case .createWallet:
128+
case .createWallet, .importWallet:
129129
VStack {
130130
Text("Create wallet configuration")
131131
.font(.headline)
@@ -140,6 +140,16 @@ struct ContentView: View {
140140
}
141141
.pickerStyle(SegmentedPickerStyle())
142142
}
143+
144+
if case .importWallet = model.method {
145+
TextField("Optional mnemonic", text: $model.mnemonicString)
146+
.textFieldStyle(RoundedBorderTextFieldStyle())
147+
.autocapitalization(.none)
148+
149+
TextField("Optional passphrase", text: $model.passphrase)
150+
.textFieldStyle(RoundedBorderTextFieldStyle())
151+
.autocapitalization(.none)
152+
}
143153
}
144154
.padding()
145155
.cornerRadius(8)
@@ -155,6 +165,16 @@ struct ContentView: View {
155165
.textFieldStyle(RoundedBorderTextFieldStyle())
156166
.autocapitalization(.none)
157167
.disableAutocorrection(true)
168+
169+
if case .signHashes = model.method {
170+
Text("Sign hashes count")
171+
.font(.headline)
172+
.bold()
173+
174+
TextField("", text: $model.signHashesCount)
175+
.textFieldStyle(RoundedBorderTextFieldStyle())
176+
.autocapitalization(.none)
177+
}
158178
}
159179
.padding()
160180
.cornerRadius(8)
@@ -194,7 +214,10 @@ struct ContentView: View {
194214
.overlay(RoundedRectangle(cornerRadius: 8)
195215
.stroke(Color.orange, lineWidth: 2))
196216
.onAppear(perform: model.onAppear)
197-
217+
case .setUserCodeRecoveryAllowed:
218+
Toggle(isOn: $model.isUserCodeRecoveryAllowed) {
219+
Text("Is user code recovery allowed")
220+
}
198221
default:
199222
EmptyView()
200223
}

Example/TangemSdkExample/Developer/StaticData.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ extension AppModel {
4848
"disableFiles": false,
4949
"allowHDWallets": true,
5050
"allowBackup": true,
51+
"allowKeysImport": true,
5152
"NDEF": [],
5253
"cardData": {
5354
"date": "2021-03-15",

TangemSdk.podspec

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Pod::Spec.new do |s|
1010
s.name = 'TangemSdk'
11-
s.version = '3.4.0'
11+
s.version = '3.5.0'
1212
s.summary = 'Use TangemSdk for Tangem cards integration'
1313

1414
# This description is used to generate tags and improve search results.
@@ -53,6 +53,7 @@ Tangem is a Swiss-based secure hardware wallet manufacturer that enables blockch
5353
s.weak_frameworks = 'CoreNFC', 'CryptoKit', 'Combine', 'SwiftUI'
5454

5555
s.resource_bundles = { 'TangemSdk' => ['TangemSdk/TangemSdk/**/*.lproj/*.strings',
56-
'TangemSdk/TangemSdk/Haptics/*.ahap']}
56+
'TangemSdk/TangemSdk/Haptics/*.ahap',
57+
'TangemSdk/TangemSdk/**/Wordlists/*.txt']}
5758

5859
end

0 commit comments

Comments
 (0)