From 9489d83568eff9867a269cf75c0178da6f7a759c Mon Sep 17 00:00:00 2001 From: ozgur sahin Date: Tue, 3 Mar 2015 22:30:36 +0200 Subject: [PATCH] First commit --- .../Main-SBPartialInfo.plist | 5 + .../Objects-normal/x86_64/AESEncryption.d | 4 + .../Objects-normal/x86_64/AESEncryption.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/AESEncryption.o | Bin 0 -> 15572 bytes .../Objects-normal/x86_64/AppDelegate.d | 3 + .../Objects-normal/x86_64/AppDelegate.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/AppDelegate.o | Bin 0 -> 70520 bytes .../Objects-normal/x86_64/Base64.d | 3 + .../Objects-normal/x86_64/Base64.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/Base64.o | Bin 0 -> 15820 bytes .../Objects-normal/x86_64/CryptoUtil.d | 5 + .../Objects-normal/x86_64/CryptoUtil.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/CryptoUtil.o | Bin 0 -> 39940 bytes .../Objects-normal/x86_64/KeyHelper.d | 3 + .../Objects-normal/x86_64/KeyHelper.dia | Bin 0 -> 1364 bytes .../Objects-normal/x86_64/KeyHelper.o | Bin 0 -> 20756 bytes .../Objects-normal/x86_64/KeychainUtil.d | 3 + .../Objects-normal/x86_64/KeychainUtil.dia | Bin 0 -> 1240 bytes .../Objects-normal/x86_64/KeychainUtil.o | Bin 0 -> 54228 bytes .../x86_64/RsaEncryption.LinkFileList | 9 + .../x86_64/RsaEncryption_dependency_info.dat | Bin 0 -> 20919 bytes .../Objects-normal/x86_64/RsaHelper.d | 6 + .../Objects-normal/x86_64/RsaHelper.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/RsaHelper.o | Bin 0 -> 22140 bytes .../Objects-normal/x86_64/ViewController.d | 8 + .../Objects-normal/x86_64/ViewController.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/ViewController.o | Bin 0 -> 45620 bytes .../Objects-normal/x86_64/main.d | 3 + .../Objects-normal/x86_64/main.dia | Bin 0 -> 220 bytes .../Objects-normal/x86_64/main.o | Bin 0 -> 3708 bytes ...tion-all-non-framework-target-headers.hmap | Bin 0 -> 1561 bytes .../RsaEncryption-all-target-headers.hmap | Bin 0 -> 1561 bytes .../RsaEncryption-generated-files.hmap | Bin 0 -> 121 bytes .../RsaEncryption-own-target-headers.hmap | Bin 0 -> 1561 bytes .../RsaEncryption-project-headers.hmap | Bin 0 -> 1730 bytes .../RsaEncryption.build/RsaEncryption.hmap | Bin 0 -> 1730 bytes .../assetcatalog_dependencies.txt | Bin 0 -> 176 bytes .../assetcatalog_generated_info.plist | 5 + .../RsaEncryption.build/dgph | Bin 0 -> 109078 bytes .../Contents/Info.plist | 20 + .../Contents/Resources/DWARF/RsaEncryption | Bin 0 -> 132995 bytes .../Main.storyboardc/Info-8.0+.plist | Bin 0 -> 258 bytes .../Base.lproj/Main.storyboardc/Info.plist | Bin 0 -> 258 bytes .../objects-8.0+.nib | Bin 0 -> 916 bytes .../objects.nib | Bin 0 -> 916 bytes .../runtime.nib | Bin 0 -> 916 bytes .../objects-8.0+.nib | Bin 0 -> 1755 bytes .../objects.nib | Bin 0 -> 1755 bytes .../runtime.nib | Bin 0 -> 1754 bytes .../RsaEncryption.app/Info.plist | Bin 0 -> 803 bytes .../RsaEncryption.app/PkgInfo | 1 + .../RsaEncryption.app/RsaEncryption | Bin 0 -> 96980 bytes RsaEncryption.xcodeproj/project.pbxproj | 373 +++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 23457 bytes .../UserInterfaceState.xcuserstate | Bin 0 -> 22776 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 + .../xcschemes/RsaEncryption.xcscheme | 110 ++++ .../xcschemes/xcschememanagement.plist | 27 + .../xcdebugger/Breakpoints_v2.xcbkptlist | 5 + .../xcschemes/RsaEncryption.xcscheme | 86 +++ .../xcschemes/xcschememanagement.plist | 22 + RsaEncryption/AESEncryption.h | 19 + RsaEncryption/AESEncryption.m | 87 +++ RsaEncryption/AppDelegate.h | 16 + RsaEncryption/AppDelegate.m | 44 ++ RsaEncryption/Base.lproj/Main.storyboard | 25 + RsaEncryption/Base64.h | 53 ++ RsaEncryption/Base64.m | 202 ++++++ RsaEncryption/CryptoUtil.h | 154 +++++ RsaEncryption/CryptoUtil.m | 464 +++++++++++++ .../AppIcon.appiconset/Contents.json | 38 ++ RsaEncryption/Info.plist | 38 ++ RsaEncryption/KeyHelper.h | 12 + RsaEncryption/KeyHelper.m | 200 ++++++ RsaEncryption/KeychainUtil.h | 87 +++ RsaEncryption/KeychainUtil.m | 615 ++++++++++++++++++ RsaEncryption/RsaHelper.h | 15 + RsaEncryption/RsaHelper.m | 146 +++++ RsaEncryption/ViewController.h | 14 + RsaEncryption/ViewController.m | 43 ++ RsaEncryption/main.m | 15 + 82 files changed, 3000 insertions(+) create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Main-SBPartialInfo.plist create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeyHelper.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeyHelper.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeyHelper.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/RsaEncryption.LinkFileList create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/RsaEncryption_dependency_info.dat create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/RsaHelper.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/RsaHelper.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/RsaHelper.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/ViewController.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/ViewController.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/ViewController.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.d create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.dia create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.o create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-all-non-framework-target-headers.hmap create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-all-target-headers.hmap create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-generated-files.hmap create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-own-target-headers.hmap create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-project-headers.hmap create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption.hmap create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/assetcatalog_dependencies.txt create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/assetcatalog_generated_info.plist create mode 100644 Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/dgph create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app.dSYM/Contents/Info.plist create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app.dSYM/Contents/Resources/DWARF/RsaEncryption create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/Info-8.0+.plist create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/Info.plist create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/UIViewController-vXZ-lx-hvc.nib/objects-8.0+.nib create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/UIViewController-vXZ-lx-hvc.nib/objects.nib create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/UIViewController-vXZ-lx-hvc.nib/runtime.nib create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/vXZ-lx-hvc-view-kh9-bI-dsS.nib/objects-8.0+.nib create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/vXZ-lx-hvc-view-kh9-bI-dsS.nib/objects.nib create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/vXZ-lx-hvc-view-kh9-bI-dsS.nib/runtime.nib create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/Info.plist create mode 100644 Build/Products/Debug-iphonesimulator/RsaEncryption.app/PkgInfo create mode 100755 Build/Products/Debug-iphonesimulator/RsaEncryption.app/RsaEncryption create mode 100644 RsaEncryption.xcodeproj/project.pbxproj create mode 100644 RsaEncryption.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 RsaEncryption.xcodeproj/project.xcworkspace/xcuserdata/kurumsalmimari.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 RsaEncryption.xcodeproj/project.xcworkspace/xcuserdata/ozgur.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/RsaEncryption.xcscheme create mode 100644 RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/RsaEncryption.xcscheme create mode 100644 RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 RsaEncryption/AESEncryption.h create mode 100644 RsaEncryption/AESEncryption.m create mode 100644 RsaEncryption/AppDelegate.h create mode 100644 RsaEncryption/AppDelegate.m create mode 100644 RsaEncryption/Base.lproj/Main.storyboard create mode 100755 RsaEncryption/Base64.h create mode 100755 RsaEncryption/Base64.m create mode 100755 RsaEncryption/CryptoUtil.h create mode 100755 RsaEncryption/CryptoUtil.m create mode 100644 RsaEncryption/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 RsaEncryption/Info.plist create mode 100644 RsaEncryption/KeyHelper.h create mode 100644 RsaEncryption/KeyHelper.m create mode 100755 RsaEncryption/KeychainUtil.h create mode 100755 RsaEncryption/KeychainUtil.m create mode 100644 RsaEncryption/RsaHelper.h create mode 100644 RsaEncryption/RsaHelper.m create mode 100644 RsaEncryption/ViewController.h create mode 100644 RsaEncryption/ViewController.m create mode 100644 RsaEncryption/main.m diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Main-SBPartialInfo.plist b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Main-SBPartialInfo.plist new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Main-SBPartialInfo.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.d b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.d new file mode 100644 index 0000000..7e602d0 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.d @@ -0,0 +1,4 @@ +dependencies: \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/AESEncryption.m \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/AESEncryption.h \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/Base64.h diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.dia b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AESEncryption.dia new file mode 100644 index 0000000000000000000000000000000000000000..bb0ec51b2047b4a032afb5d9dd79a4d1afd74885 GIT binary patch literal 220 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 literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.d b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.d new file mode 100644 index 0000000..a5fa52b --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.d @@ -0,0 +1,3 @@ +dependencies: \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/AppDelegate.m \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/AppDelegate.h diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.dia b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/AppDelegate.dia new file mode 100644 index 0000000000000000000000000000000000000000..bb0ec51b2047b4a032afb5d9dd79a4d1afd74885 GIT binary patch literal 220 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 YoM@AGBn}G@El+bx*K+^k5V_3%04xNZzW@LL literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.d b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.d new file mode 100644 index 0000000..b793589 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.d @@ -0,0 +1,3 @@ +dependencies: \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/Base64.m \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/Base64.h diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.dia b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/Base64.dia new file mode 100644 index 0000000000000000000000000000000000000000..bb0ec51b2047b4a032afb5d9dd79a4d1afd74885 GIT binary patch literal 220 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 F`EQePRaF20 literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.d b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.d new file mode 100644 index 0000000..8939a94 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.d @@ -0,0 +1,5 @@ +dependencies: \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/CryptoUtil.m \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/CryptoUtil.h \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/KeychainUtil.h \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/Base64.h diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.dia b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/CryptoUtil.dia new file mode 100644 index 0000000000000000000000000000000000000000..bb0ec51b2047b4a032afb5d9dd79a4d1afd74885 GIT binary patch literal 220 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

;S&-sRHH(407)I@OpaWnuNSg+^nij-5 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 l5Vh7|J(lGb1do@>fMsPC49}q*PU4-M9o4( zJQBl!BPKm~BE)d;Si{MSiA0SD50L1=gEtcsPyUuR+7t{26F2$0^Y`t0^Z%chP4vYs zJG=lL08rO4%EA(o6`~}DQ+rShV(IJQ8;Ql>^wGE zzyPwaf!RfjwID#)J?0y0!36F~szn*mCkdZ1C<$FlrTa8aGt>+bc3ZbpnP@sE@8SsGI^8q!o<%Y=xcF-|2Jf;N_5 z*8t?+J3)j|EF*+5S_ehw5JK-tP%}d5gFt11`R0a^)l}GPPr)jv0%%vQ;x~KJ{on@> z%KFHkAoB2Rhwzz&4|q>tyg2^f=bFP3Y&U>-y$a_#g+-mkxLJ>LEkM|!m@YvCq2Yr- zWrA(U8bMam{(`^fT3Jtt{@1zo;~rTUK>Oap)pzV6?B4cn=Z#R|*Zx$BOWb1rz^#hL z|L`cBK@*~Z?1wI#<#XIRit+OZ&N2^)9?Tw;pfDys4gi%4Mv8(>`wKerKa_SE=UrJ( PiS7aydK9bQbtb?sbEQBK literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeyHelper.o b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeyHelper.o new file mode 100644 index 0000000000000000000000000000000000000000..f00ca502326c9625c19a4326a187145d980cc130 GIT binary patch literal 20756 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≫gAb<9POulYA1{gs{5&A#?Lg{z5)%*W zJq%>I?*Yl*Ey(i?thZh03xL#j2Gb_>zXBx9cP{lm0;K+L0;#7?&?5Mb_y;B((WZf{~q%S%Rd98z8?ww zJ;ARF?h@o0i1F(NB3^5j2)_`>IL-nhf6=>`hZxUX4-#Jm(yk#O+xK-KS)kZUZ`R|%r;6peR@LjDe6{=H(K`dxxh#V|F>RLEj&3dCtN{=Z6x8+akG7Knv| z1AWIef}P7r3y_m|8RQ;j!LPqJU0#c6?SPUf1a#)Qh zdD3neJ0DmJ{1mVl2wNR9fR_V#A`pG&umdqAIM_Jy&q2>z;8|b}@ClguE20Q^|JBER9jpGRLQs80WY~Udvy2vpEq@IJoV&Hxty2P;;NcjQaCBSV!nBwRK zQoai~3%CJ@%drj*@>_xQ=L{g*=LVJltARL3s{B(91dsofTlwi?;1tQX11mrS5_kpZ zQ=sA3HG(#dAJT%h5upWb&j~GPJ0Y~7?P;L}ZNowf+MW^)e?syFm4BIkMDpoZ(t^srr0HLv z@-J!nmo)uKT2T3yH2ur`A;}k1{$>8%l7CS01#KG;>BOfX`&4@^^zuX-1Q1g4JSDzGm1B~bOuV%ho(>XK><;^pV3x(d0uk%+6ZJzk+A&rUf_7a`{b)o-S=(~mf zozQ|o(y-6` zdmAm1KTGmANxnzy3rc>OBrFf0#606a(lqUjIaT3Vsg?{WfX5 zV9dWaF_}RE`@bmVXA8Ym=qpJ>{`yaAeP59LTP5Ew^mm2cDe@g6&-EVl|DELjtrO~Zv z^!L+ft{0Q-`FUDC)(k26>(l5*)9CYQ^z1a6btTtl=)a>A#!e!)uyJleI6dLbZN5OK zP}s!t`U7=Qigo*VT4c2^5)B2`db^|eV=7y4azLNN7)^3pMk|*hTC6S-2_+pLokLb%^uCum8ydqrfS+{@Bl+2PUY1Hd;6Nbk&Z6@;T2u&MN}zUo9P9UwuyCCvujPAS@Y-~PiCHZ4h(gw(=)!F-bkOP z!`sn?)}+{?LEf$EmTRd~ETGO7LmwIN6IO8+%n_wxnX5`YKtUasewC!v&QI z`*o0NzjP-=Wn`?r2E%eRtkYGkxvq6QZ&qG8cEweho={q<#&iET4XDcO7p;db8>7Kh zi3X>}LRF?`wH^l1SbC}r@zPvRV@unbx|VvEhbpgWXiM^x$Y|%LdC}$8e;x_%{r?5J C92=1U literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.d b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.d new file mode 100644 index 0000000..f7bec61 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.d @@ -0,0 +1,3 @@ +dependencies: \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/KeychainUtil.m \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/KeychainUtil.h diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.dia b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.dia new file mode 100644 index 0000000000000000000000000000000000000000..29507d24be9d87b16c0a0b917cd5397ba3a6fd4b GIT binary patch literal 1240 zcmcIiO-vI(6n<^_|0xYN6%}zHVyh7g{sW2Gwjf1KG!zoyHnan5*zVSyS+s=1(uickWjX&=Yx8>=Yg>-?+~4e8&-Jcu z_Gc zO~fnb;^niqeaDB&Q%jAZvYPqmN@zaPAE>I!4S%yk^U*b5sIS`ZUQk*eDJ%K4v-OUa zUmI&EJzql)jElHhu@5))fxbsP zZ44zV<-cl}X(~uUn5sTm${(~{wybT!u>q{ZbIdKHe%t^!?JLw3no$9#FiwmKBC;7q zf;SThL50PGgijfkmLj?#$T%ZThm?~d9--!>m1er&y@aMxgz5wv(bS|WNRo0vgh7I; zE`mhWxnMK}f&4J`Qi~a%RAWC0tnC~sb0?r^%2#8%k9SRysq8(hO_k|sfW>Hha;~|ibwGjStK*G z=tF|eppl}WL@Z)n9U)0hbJ zE@9pP-rm``R|KlSj|%+ePtr7ttRRDg5*dqp7FAVn!b_+`<+ys&x^Y*3r~n`xu;Sof r#M_Q7_m;Sb%h`h|W-@%;J#s#6sI0?ssh*$n|EC^_FY9T^{jHu~AWJwj literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.o b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/KeychainUtil.o new file mode 100644 index 0000000000000000000000000000000000000000..6f16ff059418bdb21976cdff9f6fa0e24550adb8 GIT binary patch literal 54228 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 dXg=DmM#7kTl|wY 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 literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.d b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.d new file mode 100644 index 0000000..6460293 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.d @@ -0,0 +1,3 @@ +dependencies: \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/main.m \ + /Users/ozgur/Desktop/encryption/RsaEncryption/RsaEncryption/AppDelegate.h diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.dia b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/Objects-normal/x86_64/main.dia new file mode 100644 index 0000000000000000000000000000000000000000..bb0ec51b2047b4a032afb5d9dd79a4d1afd74885 GIT binary patch literal 220 zcmZ?qbaZFrVPG&|U|`^8N@2Rl_0)m?;RZ&|oP{z^66G#El)aPa*x!(ofZgaxNwRvwK^zHa+q>pfe|m5cVIyjKUCNYr~;_Zkx>!o47%Q6rOeLG_4aiZHOoWq(w^ARKl?VwW^@dx{1>bByEY4Ko78N?1}Bx-nDku zp@|w=Q3O~-Ls>%yQ&B*Vp{zwjvu%|Od)+-f9`|K}pt9TRX1eb3 zbFLJ?bbTiM`bIX1=nd&}&M-Fc{g*8G{Qo-G-UWAg|0j7kFjv7EGheA-C?2HHp_P2dxME3%Kv&IlM&PiSOIu-+I8m4e8(4 z(m!nZcK#L1MxIjw2IJib;IU|PbfO)=Gb)u5*C|-Ix9NL`#X|pK3DYC-uE9S!RZGaa z?%~lY(vV>O9j3(x4S9@>ZT7D%p75_?WP^Bb1@H=6#B-M_ZR34U;w?!3K9YFX5wARA z1OD-XzFeYKCV-@vJT3WbPlsL)YE zSblD!xn+vOQbi%0xbXjN%Rb9yCtfLv+o6Mg)Ux>uT_B_%-aP)*s$sj!WCa~j2RpKu zpd9wB9%wgL%yDtI_;@NB0l!aHxOsdso#`~+xK%ZChFi2uIbkQi#!qlptVEMtoB1+4 zTeXYsQm6SSzT>u0DHOA`s~#9%i*K`9?T&WoZt`aO9u2FlY-qLW`Wm(CXxFRjTD|XE zM6cBcuY=WA*0kC!*sN-`U$k2KS7EBvZnpC834o{$`#Kr_2;$sBsOI5>;}8*LOls z>d=*QT|WrvtdJ@!{0$nBaHK-4iYj~qRky;FUCQ3rK%^_y-~D*(&V}eMAcsbjuGsU@ z7oz)mCkBr6K8w!X%27H%Bg|7w41^$thakQbjbaZ)cCv{9AU=&EV`2Y*APVxIE57XW zWi&$UG-^fpE7pfvga#*+#H_<@Ct)q;t9D|HJ7-<1lHg|6UaC;OC8ixC-9cikY!uCr zviH*1et!wOb|^b~PM;2$16M-ZF;|L?XmxUOZc1ImTtHP1jwID#+QLt z3a({R8YPWia109aWbf8JbK&#z^Z`Ypf$#H7TES07AAcDfe#ei2_kh#7 zVO<9Idiudf!SR0(e-Rwhb{~+uUvjz!sUM8)Kl&{piVai6*o@?1dLQh9EP42llqCK4x|{C(0@I#qQFQd4&F8E)p7ej<}`?V_0wC259l8EzPlleJk literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-all-non-framework-target-headers.hmap b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-all-non-framework-target-headers.hmap new file mode 100644 index 0000000000000000000000000000000000000000..dc511c473bd75d50535b7973d9c1434f871ade3c GIT binary patch literal 1561 lcmXR&%*|kAU|^770}?>c047I?(GVC7fzc2c4S^9G0szu10!9D; literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-all-target-headers.hmap b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-all-target-headers.hmap new file mode 100644 index 0000000000000000000000000000000000000000..dc511c473bd75d50535b7973d9c1434f871ade3c GIT binary patch literal 1561 lcmXR&%*|kAU|^770}?>c047I?(GVC7fzc2c4S^9G0szu10!9D; literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-generated-files.hmap b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-generated-files.hmap new file mode 100644 index 0000000000000000000000000000000000000000..dd8b535d60fcd26f3dd116d7f78c86c46133d0f5 GIT binary patch literal 121 XcmXR&%*|kAU|^^KVi4efP_!oj{xJe5 literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-own-target-headers.hmap b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-own-target-headers.hmap new file mode 100644 index 0000000000000000000000000000000000000000..dc511c473bd75d50535b7973d9c1434f871ade3c GIT binary patch literal 1561 lcmXR&%*|kAU|^770}?>c047I?(GVC7fzc2c4S^9G0szu10!9D; literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-project-headers.hmap b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption-project-headers.hmap new file mode 100644 index 0000000000000000000000000000000000000000..dbd015dd8566a01ad13af719da46e860cf31f593 GIT binary patch literal 1730 zcmeHHu?oU45RHqtx%w4m5%<~_3OXrua|q>VgJ}|yh}6l&KXCP5y_142Zi21&;COe* ztnn6WF12dPm}>^@+QH zD~cd(#NPt_g`|P_Q@CLvs!7}%MAjytpcDb772~-F=eaqR2geie`(P{wUAV>uX*6GZ zk-m%AR>CnhIyj>gIII?>n`bu0csc`RAA3t^Uj3pHQs+S`Oj`&K^BFoZU2EFaJ7MNV Ag8%>k literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption.hmap b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/RsaEncryption.hmap new file mode 100644 index 0000000000000000000000000000000000000000..79acfc579afb70a811b74e6a0612f244811901c5 GIT binary patch literal 1730 zcmeH`u?oU45QgI-u5LbsS;W1z1wnC8>f{p2(FS7@l8DqvAHWCjZM_p|!C9~se>lE7 z68`*2sTGH^#~2&+85ysRK_LR5)l7JpPOyo|-ef^492QXJrI5NA=b$V&Tte@<-%2>eMh9n(DqyI29*dDKa|QuNan(m}qIK=X#Su#%s&yqJJft Xkq30llIBE(^gWF;m#Yjlvw8OdUS>j& literal 0 HcmV?d00001 diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/assetcatalog_generated_info.plist b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/assetcatalog_generated_info.plist new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/assetcatalog_generated_info.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/dgph b/Build/Intermediates/RsaEncryption.build/Debug-iphonesimulator/RsaEncryption.build/dgph new file mode 100644 index 0000000000000000000000000000000000000000..51ff5f4f30eba3df538e1451dd440f8e22615362 GIT binary patch literal 109078 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 + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.com.ozgur.Cipher + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/Build/Products/Debug-iphonesimulator/RsaEncryption.app.dSYM/Contents/Resources/DWARF/RsaEncryption b/Build/Products/Debug-iphonesimulator/RsaEncryption.app.dSYM/Contents/Resources/DWARF/RsaEncryption new file mode 100644 index 0000000000000000000000000000000000000000..dba37c44d416a13a62739ec9ebd0356a52de8b13 GIT binary patch literal 132995 zcmeFad3+Vs{RTX9@6F95nM`sCfownmWMNAJ30v609uyG;5!ZwzkSI$G0dWm3bw@#M z-4%DOTKBdtKTGRYt95U!wzag?R&8yu_2=I9eV*?*-IM}~p{1)K9?}=~i%(=F%^atl}n)z6c7p32Ucv1qyg!5jVcIAE_K4s5<;SdOUfbH$wr<(l z);+@e=eJFGL4GoX6eA^UxHLCQcq`T{+pvKF_Ku&w(}Z_QN+>UCWmD4sYp;CVo-~ZCJg-2w$SPdE>g{+t;mZZeO=*JskE3 z?SJZt*m=^%^h8xUm6~opX6USUd*1FqzmJ-dVNnR*)x8*yG;C+ zhU!`G@J6SEw`SSC;@9?D6W-=836JgUktyM=SQRdKz0+^k?`-;o3U4@mp`gSJ*V{Gi z8@l!g?++%t3852vg%?g*q@QUAmUS_-J=3q?k0!kENnazpj?VR6>-QGFs;>?&6m!N$ z;@7@*+3HqSjo$Y=!G;%ZR`y*l%>8QP(mT9H4KLJ=_PXD_#cxCFn$Ff$=stRf*Yt%+ zzh8tR6%G%5S~zL-ex+Szh`qxr{g(-^BNU5pc%b(d-iD3nhV~ZTHXB|z{k}$c?VFad zSKIS`FaPTBy5}(&UgxrPt6Mj){HBCA z_6!rhT^xMjZ)~0U{j#HmXS=aI!plF`gm>I`O$hlDzbquf_k_2meO>FyJ;FO{T13*h z(FSwYU%y^>42?c}-|tg4yjhb>I8S}e@H#dw=P-)(H6{HrPcrfQG-1Na91$)Rh6^9{ zei0tWQG0|J-D<*np~RdOo$~dzbd?C9UW_0n(K~*xEH>c{wP(E&3pG?JAsL|Iu@@rKJG_r=co*1UKK_dE_Hv2;QvXc> zhs7sARnd8Hsm1r$dGRcZcUrv8Vka>D)-@LIK)b~nhv|oew*%_|#2;I{%i`f6dA*(e zjeCp5E$9#F{~U{VTYQhjwU}7Y{pS{USnT5l7~XEQb95hV@eb5m;v+5IR%S4oS@GY3 zib(gHEZ$Xa@DDBCQfcse7VoYyI34{ZueW8m!8I1|7-8@s7VjQq@JSYzqJQP}zGd+} zm`o7AXmR5hgTJtNo5jO17U1=ES$vqqwdh}Y{+SkUvG^{FU$ppfi+5Z6Ydyc-od21{ z9Tp#e{+rh;9dFz(wKx|O1zzuci+73)#ZkcCrL54a1#r+IE%;H`9 z8+?n!+YT`Jj~4G(U~pEZy}ttuuCaK_LWAd9Tzjy=Yb`E4#NZn&Zdq#Z3l=vXW$gGxkyyCm{dTM{_;8DNTf9ZxR~q*_)ZOB@EpBWx?rFXWZ+E-F2U@&ky}@T&oV(HB z?_0cWv%$Z$_{EbA&PF@H`0Y5=;0B9xPcwLp#VuzVe4WKFo^9~s7I&Oy@Mjh;ywu=o zv?~nX!Fn8j8ZF*=mBH&Q-gdRY7h1dn4H5m{ZSg(V8vH9ge}}=vIVSvVHyS+I;@vkH zyo?xSP}hwvv-qB8jQh(Le_(NOF8rg+=sM0Qi+}N=@jnfCAlfpW@3hdp2>BZ^UD# z=K6JAo$J@EY3(fC1URdG<^1)_RvxvdYgg-ruIaNE&0e>n^MsDB_Vw%b;%8<1%7a^1 zw6 zI@hm-BQL#gk6(U~1JB!*sRch7N9BMPG~e@YRg;f%^hXO;<_)(>pq5wXSJhjq^%5vuR(kjFqhcRclWB zy7moi^OtR0x1tSkWPk@sO*D!6C1)PmzGltAtsB}`ubaN23pI0JS3&Kcy{@aZbH=h2 z$FA;Nzj56@fn2R*(!1ex5g4`pR4Xw*M zSG3LgzmMOBWt&=4Zna_6*S**En_4@M?`)S`>2=rtW~loJX=4YvhyOH&dnDt(9oilt ztU-_X|3Nk|*pzJe&r2MGGNsn^CI3H#wAYj}@n94Fe-VqX3}=rxtVHwKtMvTm5&3rm z+aors!%fQU&3J~h;XjYfzZ=*du|d6B#!juLH1DhR5}&3k?p4=UwRWv&Thz6zYa{!f zUXGouXp3idwytbl*VVpk&4xWZGR>%L?1CDH$q@O#DkOMLAu7JGVKxp8erD0vTD zwWxK)OzsnCkaS&y^1q_X4(w99y3`XH@=T82)=Nhyg$tQ+@S^EBi=zwta1=CeoebQt z;%$a;9L3;Dc4%Y9G+!1{a_qx5m1e{o zIwP5sUv>&cF6|x3RB38mhLLLTV8fS2j9GQf+{#|)c--$^ZZ$d(Xu&9HA=(iQ~uni?A1F%ysivUd+M{zxVV!kWHr zCC=EpXPZHE+@tt)giAEGvvip<8IG*YtuMcu&JD}#9Eg`-Z`E)t#)m9_z2>lNd+BGd zQ{L(|>(?KNHG9tVL*_4Tp1pM8feU6YSnSN5IWx3zW=-q3J(%%M z^MNz=o7p^X$@GJphc<_X;nmG%be`I@?7aY2Z)iQPeLWr-N?0@JPhYf%frZx?db{;Z zj(WNDRIpwSD3zw%?#U)VWLfEnQZS->M zeJf$--nSEW>wQbjYuk|Ztt-$IV{07S8K-$IW=gV*^xwmOQ{cZT@ZS{pZwmZ31^$}? z|1VR(O}OPjURpHBjTZ-RcV{K=kS0>?MuUc|Nm-Tt7!ZBj#>|y@*j|?AM1y&G^?n4; zEMxTm^fNDyFfHcJ%UkP5gRCr)juWqfdkG%yr4NNMH7g68*Uy=kXU=k*j6Cy}e5OVUjoas96bmQ{${U`d)4pV7D1=$iqdNIM|NH7v5xk9dq zf#W1{a4E;>lZO)~;}K_GIIygDy8{WYuQ}au@=d@d(0+IX==2YtkftXT^jr^H0xRSi zMR~3!N^wv8va+(Xd>hM>WV+zt`hW_AKF~#SI?kXngiwQfEoCBRWle=ymgl}D=>~gn zKD<>T`a{y>QbY4yqVk^no0k{P!3t)YNkV2?B{P(XW%95p3x%N%@_*O>cXS@jrCEpJ zD#NR-w@RPEm4X_fnb(uFBf}T1PboN~dYn=ns!fSvTxxofhN=91H*UYydDD`2gzTA* zf9wmvA9fqyPdCrtnX~-q<{3PDmOtG*gFO;^{ll|$g!c)yRG9E|bImU;)Xg(*+Ou`@ z%q14<=9$wh*3C26vmt-Fc}B6NlRxHu{y9~zubXR5#%2`$>E@c7`2-h#y1C|eCJ_u7 zI^GF8;@m$|!_&<-&s+bx`Q`*0o^HOm+G5>&bF9U>`Q}1(A8sBV53pD_-%PjR>*kws zi*@tO>DGTJs$!b>{&_!*uWrsc&wA9&Ik+MD)6F@Gb#snl-JGLXH|HqU%{c>Xc)B?U zdv4^f)^5f@f!OQcuW%m`=jH7hU){XJ%|-mv%{oun`_;`l-0Z|Z-K^85>4BW5nPJ^^ zv(8NGuA6n%TdbRPj<8ra>%47osokve2e}&JV>jy@ZQXUVj=Jk+onth7Wk zofhk69d*~uI={Eq+jgKi|9y*fvyPTu-K_JzmJhpGXN*lh-K=vmS^@s)=A4US2J7Y= z?2(Z_-JGMi!*0e=yxZafZ1}o4=R5X(Y%s~6M`1;r+8Z^0b@R?y=pXo}n|IQ&@q~Z6 zS!cA3pKjK9&W5j>byjQso@UZ#zTWSd1|MUwZq~Wf`q#}mui5MAW}O>sd`v8Qju*g; zIG27$~*{6@67k30f|KGRj=I~ecKzq;-b%Lf6%P)*C*lx`q{q_6;m3W8RID`qIewk^AS93* zpM_&2-iBk;@utJ!JeqzwOHP_+&btP-7psha7r##YRUF;;2RKIJ0m@r6UW;Qaz8{Wh z@ijQc;}_$Y9={96ZYS+AUi(SdURr*f+a;a&Z*X+u@8cMWbHijTo{f^>#RuS+<9N^D zj1e%S+3Dl(lWybDBz_X{Bk=3QJ8*R4XX6-&UyEZj{#_hn@mFw6i~kMBcszmfo$i>s z7!BKtm&IqZ%*T(y(X}p{#ic5~Rb1|%OZ<5pBi8)`x~G@K<7iE~;}vXE;*B`!`AcDY zUjO)U;_^+p#2>^_&;J?SGjikaiF*v2)7*F&j_Te3+w*ebv+?W14;A;-ay$h`_>vU7 z9JZHP5WgM2PW*@B{!8O7x%+pzX9e+qV~%(&j&6J*j(U|2*q)ygKUdtpE$%<2d;A?7 zqwzS}hFH7`$F%rd9HaK`kAdxF2l3%`B+(T!h)VoDCSWd4y5w@4rH_j2P6F&tfCdG3F{)w=g zY5%OuKOOe!eAquv_!q!FsSx&S3I8(nv%AW_2KF78l*B%D{rlAZ!u6k0`(JMMn`%c~ zH~V9NVZ1u2}DC{=(DFa_WeUZMuzV1R20Y605S+ZcdvDHsoMC&2CWHWA=)b!h;2 zOTi?748-t8TsSt(^@D)`a=Sku0zgTg7J-K- zTrTivKuNF_0^0#4ZCV9(D_kw`3WaR~A5hpX@I^q0 z<|a6C-4x!5`-S>6nKKVZV-4QphRP%z=srW68Hk3TZ(fx z3;Ye>&5Y!U0zUzi{5)A;fZdsrqo)Y00K9KBJa-G64Y&wH&)8`KmjcRlPZzijQ1b5# zf#)kcQ{a_=f8e=i349RnPlV?Pdy8Y++YrjC&A{8!+8-W_j%a+flIssqt8NEZsJXt zIY+>3>f1jQU^^JbukSE7?|9g(4}EJdf)({|S6uJ=--FH8wC^O}e*!jdqVJ3<|0VTv zkn6v$_Q7u6Z`D5JU0Bh)zbjtyIkBIHS*~2G)Aa|ay}|Xz!e$ZgySdDtrS=JB{vx%{ zDDzv@KC>)19yZHj-$LAaG&o&hk-)8h64PRVR{?&To=XJYr=AB0d|2T?fj98+B7gF^5L~xGUrczu4$fPaW!m9>X(-l><$kdU0 z0GYH!rj9%Y_&OTBB2!160+dUbI`S+a+oGaxNKmf>GLwr;mH8BqWvl3HaVqpas4M@GeIIhukv4j zE#d#KpZ#0)9}1oZ$iUl8;_W$rd;p2X%K!ragPie`p z;E(uaNh}#IW%)0Fj7-Uh$PmuC%&iIGIL}ZAEGp>fy zzrYp$Ej_&eU4!Rwt`)#6DK6koZb|IPiw<6REu7a7vx1}j6b%?;W@u)_`3gdn6S(mQ}-G4JUx)4WJ1#eqy$pkN5*$?*`9L_J?lqG-bBNTy~gl@zKg$7<1X9y2WfjB;<=?F1uW}_&D{mE#^w` zE8ecm_L$pW{M@X}#W5F|hqLZe=8~9;q5$T9l({tKqF{k}U72sjTq&l-pDOdMnA=DE zq~VPsiO*#*7c~ZFl`3<2%#|utJYJbAV)0DzGe?;#V{V2pOO?4Q=6b@cSLW)Nn=Z^r z%3Kq3%xi03$g!#TQJ7R8Bn5UJwKITS*d0m+sVy-L9-<7#B=1P7S zM~m&9-XytB;UdON||RR-@&}E%yY2_>M|I2kd5M9Wci!^NQpSm`jv- zRdNT+y~_MdatF-g%KTh%2h8irye7E==I_e-ZTjpP? z_P8?t7PTjo`47S7xMxU1ng4{^lgj*;)Sg`C?^1hOng5a6jb(mTnLT%UnLj}78D)O0 z+DDi9(_wRvHKe)BU#NCVncoJR6V@RsT>p639Q_ShRpwu)c3YW$HEfAndzt@$@|((n z=U{WTFa+6;8Q&{_9IXvO4F~+Sx}pgHdFB zFi;_Tqo|W8MMmTd1z9yTrzg++;b0igp-97tY9kGsU^DNAA`KU+J*CV)QvD#^R;Z11 z+o<-OGXF%_hoV;>I=9U4R=%msKU3{_W&T#R_bc-+R(t<4|0=cTm-%<7eL$Iiui6XB z{KsG~Kwmm^iJSKtY?is9OMe3^>c5Ml#QX3v|5LTsmj!7#v8+u~PXI*WV1AwW@ro>z@moYw+b*VY>wOGqf9B|7O@-Ja@Y5-w&H}=JFY? z{|szS7|Lh5{;RM#$S$Ad`nzB=Ey^*~dJi_Iu;p`H|6|xJbLDeg-ydqyp?qGMlT!fT zm1l&C12!y3(w6(E=8JIcLf&BdFwk)~y_){r^vU>1i=@xMPkJQ%AR;fZ1^#lH>7gRj zCSa)+7v>X)SgF^9A3juwReBe|c#^9 zY}hQM)ibIBT}7-eg|}#MF`W2#rn*d^E{aqS7I>uwB2%8=c7;R5b*I8|fiEbm5V#9) z4*JFFN`dbKN*t;L>OyGsFoC*aP|b-`H24&rS*@!vaRT(q9p~4K!v3{x~t` z1h|&QYkIEd>&z~Gu*;h#Px50&B;srP}jc=Hk-V7 zi|gM_n|_wL{`X-sKJoRg|0CGnqTS*8FDSp+^?wihdh#c`{s*w{qRD z|3!X~>tCn#V1(X;Ao-{&y~JySDNm*PCvuQPIrlR3k)he1Q&J87G0>wnyNNp31Bznt zy5b*$VQUnx*Etw7UzoA6sF`0quYSg1IL1^c{+Tl4b$+!=nF%_-VunjN6JrrGn|e?E zH0W%qZ>9A!$G@@MM5T;rqI>`oCU850g zQl>VRZYF1olo_p)vleB>=;UmjGIcsRJ6#zhlT6N>#PJvh=3EZ`oSMr*^-CY~)O@GP zza6eFh8{I{7x<6B=GuJCJq7-gu-T&2+*jp42b=Z3<^kXT6>Qe8n#ZgBzpDL2l^?CL zetzovWw0g8mkazlwO=VnwvIJdAcvyC95~4(t`vBv`n*cuG3t7?KyAZnt`XP?SGHj_ z*9trdkezwWbpp==lpEP0@M?wE3%pg~4FbOhD0g(Dz-JZSByg9)n+1NL@D_p5VfLylZYOjSainw3ERZ`g#)mo+77~u^GM4(jt~O;H=KG7`a}xQ(tNazP zc}E#X6!`04vscMD()TyQW;$dX<@+bYZl?dPo}|v0C^0z;P7+juK<$?@CJEGjDTA$6 zH24-gvq{gGBJdi8Qw3_zlQGSl3s<(Q8I1ye3dp7?W4b`?h%#mf)J)8nDNsA2j9CI- z#ks#={0}5_ymQcC@G*5pZlV!%&O31TYC{c%uggQVSRP8Oq@Tag&**TI#ib{%W{$>K z<0H6U1aG6!*(WZge==2L@Elbi10`GGF_^MqwDnJTcoIIxa7Y|+2C{)3^b&}OQ_A(E zSXxmmV|KFYXUyqc^)u%7uKF2Gy{mr4yxvtmV?V9>(cwq|7ytWf)lVohU#tEQWe(7F znUTsYkl7vjq67!HIg`P^Sd*Wd$>$lkBiEk~<{ub?)y(pJU7oF(?dKf=UMl^fWv~K& zJ&t^QT61{9KVI!45b|GU&R@8r}aYQ>|-s86$1T z=(@}r-5_OZb&al08FXD{jc%GU=(?g3pTm_w*A)?Fg)->6Tw%VU%vfEcyHpwU@W>ui zp_`OJ50Cr<^N=#=;gP{$o>pd}uF?Hg8T9ZdA~^g_8T9ZdL!?L9JDsd+bh*k*(KWiE z%1n*L&~4+aI%THmYTJRzG}_fRCy|N%Amxy=o6amrWbZG8QiUH(_(ORX4b&kEp9C2>uS9 zCALl`@J@o;MiSp<{JwyTSKp_nRZO-F_5J+3e$^%p^#uc9VML7ML<|M$i(S7KHlIe; zV^BB`_Qj}C^#feL1val$KhXC#t3Al~FNDo8Kz(VIe?4s8Tm2B<{}F7qHuXc%a!p0x zIWK`}$;1pdnP%E@WmfgHT$#gs|JOFm%;8nZVNB+TD*t!NkF4_l0-M*$9Oe6w8f#bk zeqXg~{Jc?W*Up0#BwM%42|cY_=EMSjHCzwDeP&MTX*DzFnO1WX+?YR^`&aqrz-B&V z&iDQ6VaxRo@cp}Cv(?EwsKEabZ03FD;sXC=wGS!q--F%4YnWKKXVsW zW`TDs+-u;LmRG=^+_Xe60lzXckQM!4W(abr>@u8@GaqDI?vC8dH-_0Rfdi8AdW3M3 z>o0{XGcNb$oQ#rId(pmJ~Z{k3Y}=KH6qeY@{}Q|)j2{%vaC;rmajeW&mL4mQUR zxp(>g2e6qCxpx=jIipPi<-X~`3j98bf9v~$)y6~iX=?x8_YYP3EfjRvOzhkbeE&Mw zY`Am(R^Z>O_TLNqpQ`;~f&T$)?vT#?$oHKw*8j%^eh%zO#3eOBPtsQr0? zlQRvVEvqzKHo@>&WmdWG9}b%jDzhqle-&)rF5ZGk)~T#2KW_tgmWQli=fMj68x;@t z{X5hi;rlz)9_i=3ruL|}VFh{rtGGH^$1w76lrU@X6kqLH-#-wx#9_4Wx57RXEq&G) z-|vFW!je_z=Y2!{&$tj)H17(TI2fPgk6OH ztaW~JaFE4L8uQV=pt^8VVpfp26sP9g4u4z5a=eI6fL{EaU>-xk8H?8PHMNKM!CzoA zN5@LX8)S{O(A2C-K(@DI%`@L|fUGrRWkMIsQ79dIa5Nx?H)G{_U9cKZt|(K`;CO}R zf%8QQ<&j`;DJliWd_;D zl}=7ID9;}d>H%he>5mllE8S$t^@sV%#UX!$Ssckwo zaqb+@fSu(SWT>os?jA8abtOKi!<(}JM z$I&}wmnD+>O|u6l{JX)k=gS^a=6G|E$K11<9VD{gH|s}m%ylPXgpuscp9OUdI)I4_ z(DT8*6%F#lg?`?fuvvyC9`p{ZsQ)339AQjcT9B;W6HT6`PcTuOX!5kLLX)RM0huoo zO`eVcWMe+j3c>$)gW@7&cQN7?tp! zfz47CppSYLHgh^aYw<2@Mm`wh`k$&@hdsUxHV$K5zZkZhi+(<_9D(Olg2|l_ULnw> zwtohYE(C>|7g403-sPYgW1GOz)elQTH+BZhw%Xs>oA zc8VYqB;AU}lQ1)JY*7Z2Fv+6gE@dzYGZV)Pl$ov*$E%f@ zp%cfum6@p%$0wDUCAovcua%jt6UUF0!7>nX2Y&LV*t?jk6UQQDundIUK{UO`P|o;j zK~`VyO_+R(AUDVR1SVe_NE9SE49XdS6TODwp4#aomXdEEKPlXv>pIS)65n3{S2iJ& zN(=mzusIT)RPN^;51X}Z((tojMg7Zg{3U{$gns)j*sRf$##H&-oX9q35_Tj%2A(6w zNf_n50-KM2C+%0@cm;S&!8aKCcnQuT61x#lnfn)bDb0^hwHvaK@%cUgpE7dmKz`pO z@ZJ1DNpHDs{xE=v=w%~A@Q5NY6;_!$4qR^jJRF}vU1OoiKR5|En`wo&oI^o*QwH}W zlD{0x)o_}E2lSiN9$%JRJe)EW=U&fqFW|Y8Cx*_w4h%;}lc)Lqov}VGpN0 z-S?k?y@d7*Og&+*rajyDcf&q`HWJI3W)geyJm2rH_I`K*RtOJ+*~Pj;`0!&019cKL zsjQP|B*EOW-a>wlpcALi#tHi$KnzU@?o@i=!exjZ!qA)|FLqIJJtD;BE4D4hJ#-Fs zRiLpGX1g|4jq2xOZLE$|<`QkJHY#(eHddD@^G$86?pNkp+F1Qqnai}X`jax3Yh(4X zGFND0#dk#{hS+6h8mqpImbpq-POFu?Xo`qdz*i8dJ?2u0pmzi0I+pWyK+MH(1uyMXmo6|C7?$_pYt}+j3bGlZU2emo9P?_&) zb9$pP-_yNvd|OD;`TJ6S5d3}W=OHOSV4hP3yUb92z$XY$PG_S?E+=Mm2OtH7JOtGGJ?m&a<8`Hg*x?z4^e%e$+NweEa#iT+}j z(|zt8a{guAU=jy`&-n`zIW{Xd^JLx(s*TT=JZ=Yw;UUisob(87+^TtxCt}~@`6j)O z!wGng=UUkE9?y+1%zHc@Us6qZ#WS%J%z%ME#c|NIb_+mD#yvv!l^IbL{g;gU9QVeTcjZl9n{jQGm9xP%^M;aHwaR3N&8pQY zS=DabnoQ;#%gl*vZ#1d9)}$`7O7do%f%kMfiK`JG^S(?P-j~@UDbp5U?wGvuMyGr< zBelccroFviCU29UGzs64c{f>$qEmhj&;GVKn?njF4&M_niBuJ}XWN3@D?Owjf7=w~ zmRSBAoOY)v$V;8_BEknu$f{wns6azLT|;(I4fm`flF|>Dlx{O2f7ezKr~DL#{ICgG z)i8dW4Eb044B3SBs0pjhDSv`t?KENSwqaBiYAmaeWs-V(jipmQXfAv{Y1#(W-Dpdm zy=vcQ7qZ;vQf5FlEnEu2Y+BIWQMZ68WG%CMs1o0UozsPDda>(rGg;@PmYojfcW{bb zAF6RT_)fosoNTt&52P)%CF&IN_6wPB&b?sy+tUhOgwSq7Cn>F6j2M72p+m0tPgKyZ?D1LiScgBoKML=7gR(YQ(WOfuPXPq)dQDJBEZ4@ve+HQBSHJ66qe8;$Gb z-LXc(nI@=h-6pqYo7}npEj|-G_i02zYR_{pOzla$2D7ID-6I>>fF>Af!a+-sNW&p# zE-qD-F*G+b>H9!1yr&F2sapbjC%k3UyZ#a6X=5w#O7(;7t|zG7Smtk2dsdl$C+v^t zA6r?Ugk6OE$e5q-UsFE|%Vg&$6Cr~OMA6`PaFWZJJ%sP5PqT+`Hz5O*J%o<;EbJ5= zhQw=N%sV@oSaM0;5jSNpBQgWr|L620FK%YxapxX>vQQOrhagJwQYKr$&`X(<0a-Dy zxP##O4O{>`=nx!Ad-cE`%lv1EuRq-Dgu9DoB7K&}BFQ&@vIp8Xe-h_{>1o$k4U_E} z(?#1gsf1|PoU!Tffx_C;XeAKz;6Ap|+E#{Z!Lj@>u&(Dm1lv{e=%L0j)M%X)2c>oE z8wPY#UMeSF0m!;_8&T%}2wE9?fGCUMa+LNXBL7u!TNrziD0`Qnrr4`QImTzBlXwiL z^fWQ=G5{SX^+S}kiK(K!M-vkPt4$0Gurx7DE!)JD!AxypMu8bn{wCuv#3VzDz5UnA z!7*Kyup5!8Zs=g!xhmw_YcSCpwY}aE$_Qy$8l+Tc%m;r!n#iOysxNApTUPk$-mIkvA#7AT{!f zQX_wuMqZM--3Gl?FLA`b72Bs6+h!A6RpB~yxW@JbG#Ou+)XP$1yD~Ml$E3vei(w|{ zQoY2Qe=D|sXKasi8Kle2PAm}Dj4;3Ml1dg(c4&LA+~el+WJZ=HP|Eai{n@IZPCB=ZjI z_qU_KNr~RI?}$r#az;w4bY@Dc^bK=UOHDg;wrPhJI_2l{s#m(VbGW_RUM(N1{pPAm zK<^{Dej+F9Rewfwm0ooh(bWu>ZQ+MR*XmWh2SCRTz}|;xiHBhJ31GYB{dxSJiHpj$ z-GH?%6PMrhii;VG*mikoWuu&I?s8#lKG8!aF7smxi5@m_X>^89-Jk7@%f`fYy+$@h z@DR@~XvR-&JTqv+FPot_-g?6rlfx;2SSs>dXM}qmT23z`JvUQZYNv1uLP@N~A@@QY zWbAPX3_JF?7N!|{c$mEDSuzi1z#hgPCC|Xmaky}Lp6ju2oJf093EO;bvd+XN>$e%q zY2dxALvk}e0g?{a^y*pY)srE!S7*ps?9~}sq6`JMumT5fG!EZHApRgbfpC5|2O*)D z!O_J@(7L(??oXpL-U<{^DZKJOf`!)AX&_xC8?cRm=Y%@WU07C6cAWhS1$0y{T>vBT z9^6>BRtmZ@i>Sr%Ekcg;;M5L1*`nhhS4gZYfb?$>-DU|!TPCt7cC-MlxDRy1e z>w6^`&SzgEoZ@6S-hl|G)OB~+^M_!ogt_k-`1z{%lqSPDl;I3@UDXHNkPPR%uMy7B zWH{F{oGRBRh01kWMGu|`trb>#5B0u=fhL+ zeE22w1~PQv^WhEnpK6~EUo!!=eLj2|5`Jpv`S36w*ghZrHVXCBp6A2A%K+?oJ}j{3 z`LKBIc|Lq(4m|ff9~Rj2e7JrvTzj4m%eg(zhXwXLAASi9@YJ5?!xB`_^WndsLQU;? zJ}mcHDoq8S55L7*=y^Vz;NA5+AC{Z#c|QD8OqQqiJRiP|$<*_FSYXfdVTokV^WmNJ z-1B@`T+Q=gBYlzu>604}RmM!VCNkl(LeeKw5z{Q}%Hm7-jCGckJ`uZHZivz+3^;3x zKuVwRhO$l*Na>U1bUj@lrB8;VN@txRko(8w5@!me^a<}i>l*?oeR3AhJxd^^PZkoM zEs)YDkD~3*dV|mk0CD2-LwiF$1%Q|lnbkVyj@gC7H^9d1oSUm_G9c!nrxgJDJ4_=0 z6o&v%GC&FdF}iUp0L0XahXjBGTLB=(G;Rfem;iAr03?2_0Fc;L07&eR0FdC20FdBL zBLF0}6#!xa#Wx!PAhE3gkl0oLNNg(r#H@<5%o_n9fh_aUfC4}gQ@J8_*@uuQANkH)&R_LJ3is#5h!{RwYoP$8Pgf2kEb4K$# z70(eD70+p>%fmQ_;yDtfod6Wi5%4qs#dE})iswiyUWN#b2y3#R6Ix0PQ`O1ZYrK5 z-c&s2F`mP20QKiwT!yMS*;YI!+lc3|#AWjxP&eSd7)B-=?|`DFc#puQYEHHl&&f98 zIgDbq*^)-_9D&$nhB2%6KAb3?<0r*){so4rIoVb`C)SS^ zb8@VBPL2`Jp_d%9YmeeN3b7H6;yDVj5su$|Mm$Ghl@ZTTSnG;-jzTM* zBM@VQMkAi1u*rz$C|qd7a}-+f9Dx`}v>5Rmg>6PWM`4E%&rui>&zX$ubTUdi*TFR7`##~$PutBt7~dPE zoxmvVd^?~*O70fE5(nMuH?8N z|5GDfDfSmex>9T_T`9IoSF$?iXP^n-V|oET0HrJ0(dDajt`1tq;w^lr~EYnDP1XWtw2gw3S2Lc(v^~R9Rev`DR*?7Kt2FwEAbj7=$BDbS2fDP8$fo@)l9l&*Z4@Eo}ir7Jly z%s*Ekr7PtI&lgDP%DJQ9x>X>hD^IEhe2maZa7vU|g~T^1C;gykpo0%lIbjLw7g9ON zM{xbD%8A%kzRZhgVDkoy&(ZoZgrm*#EFe)c3c>N|Bl@qb? z$YPiJnPyZ@gva9xs+@>D-Kd<1ZB`L4l@q33zg0%% zMC>-Baw6fh8U> z(6r*y& z9;#rfQ90qPqX3QZCGgMrMnR)dIa$YZryG?MP6G<8$_Yny1y<#RqoIOXuBeaJXrQyw zaxR}l11hjcATn+i1r~u^K8Xf9)s@R9(SQmp;%c6r?gA{r__y3VJ*5JRT-Q83<%{p^ zE6U~RX`l-iRbmxbuA^-g zSe~M76<9c^EwKtLY-&qdi~>sz;!v{8D6lXNC02pu7}{2WMR=>gauNBHjRMQVv`;k( zEEKRTu?j3yoGclQ)G`Vza_KPwslakNT_+Pd-ld2k6<7v%i7Q}Q1(us&8U>btp_W+Q z{b!>yP+BO*dkNl}VhAi@>H%%9V3V2t-6O~;`s*ESvUdi6RE|B;Eyc*?~ zvQW~9@=FBiT2^S3Ul@h55~KVwiu@p>{37;X#48&lm0wCr%q3}irF;8efyY@Lm0fP8P}r-qe(*{I`#3B% zm79$!lWq22!l62Ohl<1BTR~Nj4*ifLnhG0RE`k_ zZ+^&oam7@Q5e9F5a1`SfQ#nQ$B$G_`oy3!fpHYsffO3qsL!$h|cBjHB$8exsVU=Up z+*MfR81ZA3W7uw0SmhYD3l&y5Mr^AbBYv!MjD%^GW5l+~F%sq#h_F$P5qPCQD#wV= zs{~TTL0qpEsBLe>H3F#|!?w5LT7guKc^^CPE3Okr|YEF-(U_s~p4U29;JhhN)LM zQDQ>n7zwIDAeCbzgh>LmKdoeIYm{Ty{Zvj7NaYxTQw3^|Svk#|3s<)Lm5lJtr${7MR6Dwy5r1pkHewIKg$IL+{Rvt)*^)K8Dm18P%O@l%kl4g7P*h%6$@M@H0 zszMElyd1)@N);b>Ql!)<%TTW?SsB>QaH($?#&^__`3JlWYl8m>qGFU~hC^9K{U>{u z;e0{BD9cdfYB;AMP?llGGiVx!NRP5irBRk)<*ZCmmJudJSw@%?Wf@^olx2iTQI-)V zMOj9e6lED<4$$`_s4OE)kFw0)c)y}7Qvqd}~NUgKVGE&w<$}(Kt zsIba1Vq0YysWDbrh9$JZD$9s%m1S7ODy*^$=Z6(mSw?uPEF-p6mf_>33QjAGvJ4Ad z1=lByvJCI7f{naUmXS!a7cj~)Qv2EZ8f6)QB?3!F*!n#{;0T2S1+q;N&ura|vW!48 zN~N-l+>sfjYU!>pqf{!(NHokSmC7<#Gg+mgINm1MRF)Z>V+y;d%nbhWFZUFA6-IwX z?leVzMwk@+8DUcNXM{=7pAjZSe@2)T{TX3W^k;-g(Vr0p9iWFKa*L@yBTS0^j4U!GvX&je@2)T{TX2zlln8)qE|8cGb8ZWELm5nKf^jQ!s^e6ZS`kZ zS4V{OX9S1zXIMu^Sp6BXt^N!L{v*na{tPD^BcP~oGTKR&^buBnhUI#MEUn-bWQ?v8 zQ?Wo{^k+um>A$v}qBuamBdz`n<1jL$Kl4+ZHnQ00&v3V&nj$KO^T` z{TZ>X{tSD&kyd|3!nOJ{Y==e;W&6)KiT=zetUV;tOxw3nR)2KOnj))DQ)KjM*!~vD&{Xtk6yk|OVt<@r^l9p$Pjey4C@ZJWVNW}nhx(h0J`EGT z-s;nceT&hjVNmr}pGIt}Pb0R~rxDxg(}->LX~eerG#sVWTYVZPRK3-wVFK2N^l1eD z*67oSjhztGrxDxg(}->LX_y)HR-cBMS#R}e#J2i0Vq1M03WC*JeH!7dKFveqtv-#! z&+5~Noz$nPhCWSC*&Txq!6136tv(GW`_&ajpN6+vZS`rGoYhvJhEcB$>C*_d`ZQu& zeHyW?K8@HReHy_beHy`5pGIt}Pa|=#`ZNLX~e(Prx81(Pa`;_Pa}Ah(WhC#xLbXi>S3_g7=4=5!$DN7%yUJ*My_Hu zPEo%`pn2v?{ThKBQ$Y;_kO^DMF_qD;k!WyCW%O&^r^f2nh?~`~5!>q5h)w;Pj}R#J zYijKHi?&zu?|joR!RemSy`gkvGApTj!?YT0b#KHjHM%!qo2;bnjlk5b9Bs0ax;Nr# zvXZ(t0!>y@_eP+}O6uO^W7t00WF>WPm^-6QR#Nxo47#Rfcg}OHitMKmP zMYx*Gr_hmH3ft)3)Ild9Sti!u6qfort9z4hF7Pa~bw#e|-Z0p@fkyX6Y%F$B z_lA2M>#Xh#%S@fsy3<7bVPvEy{WU+nYLH=Ro|`j=HWEzK~(oOtpIJWdT*bd z^t#}cdJ*-u^wIX}Q@=pzT>(#2k{DZH!lUht-P^|~6OX~GQJNSBr3pT{Cc0;OmN_lcnu+h zB`r8zXPYIG7JQ_{O%Nh!VStsiFy5@BMJdMYM$)1jR#?)4&zmGPN?I7e0nmJSGm;jQ zAZekwA(9qnz-f||v=G}$TCm(sqNK$+JXa(w8X#$rJeQIdpTnuaN?HuYD7nE(S|n&s zHbrO{% zc#`!N@;if094Q+oX#InLq(#U}E4?snL+lWS21$#2BWc0LCqG5fLYVDgNef|8BrSwV zk+cxzQe6tBq=hgkk`}_GNLmP!B55H^ill`wDUue#Tp5T4d5 z@VjTip!%8zB>e7~FsQ!f0SUi*CJd^t3{>R1XTqd>_e>a6-we4^e)mimR9~~E#qXX8 zgX)_ue)!!pVNiX|niju%CJd@?n)u;&&xAqsHEUY@?wK&CzGh8}-#rrs)z_?P@w;cj zp!%9MEq?b*7*t>BY~;IV!l3$^H7$PkOc+#Ov!=!Go(Y5MYu2>*-7{fOeX;h5jOD`@ zVNiX|niju%CJd^tS<~Wo&xAqsHEUY@?wK&CzGh8}-#rrs)fc&p!1&!WVNiXM%V7B3 zGhtADk;`EC-7{fOeUZyx_}w#MP<@fhVEElLVNiXM%V7B3GhtADk;`EC-7{fOeUZyx z+Lb}|#daVtCnI|<_}w!(3)L4Z`C#r)2Gti!{a_wZ2Guu97(P;vvrv7Z1q46u zD}(Bb@&kt7Jrh5uz9>In_}w#MP<>H;!0=-u!l3%1{D9$i&xCnQ$`2TR_e_`{NcjQ7 z@16;>Q_2q*e#t_ZA4>TF!|$F6^CKxgVEElLVIG(A1BTx{6XppiKlmOOzk4RklTv=b z@VjTiJSF7^48MCO%+peS!0@|g!lZonOqgdR-{FVfJrm|9lJ8*n-7{gHm3#;DzA`D_ zJrh4E-#ruNdC60p#qXX8lk(j&VP2FRgdcwRM3|KCo(c1^B&__!Le=vY^&fXwpDQKBySZQ`Hs?L ztKcZ%SOrH8!X{eTxcdJw7toN@sII~H&`%TapTi*j5r>Hpu*$SAaNHjDzc7M zkagt4KsLD;L{2rbj!gBb!?X{itfMf)wGX7Mqc9`152UQ4FnG4XCqu5tItnuiRYn-f zIto**eIR8Wg~788nO%#lqcFAF2U6Bin9=G)=`)`?E@+6C``Tffs}O= zCPmg!m~pCkMp;K;#_Ir)vW~(`P|Y*SItnvUY6lOpRV%rx!0DC;OpqxM}FC^KFAF3LKJpBdVBQPxqInc8ARd!A0O!OO-R?>jTJ{1#jq0Var||c zlq03S{4L08U0lG6tDg*YQXFtzq{3SXOG*6cGF$JB(mINuwe8()fFeDjK-#kb1w zJ2*zHub;s7#vc^_HGZA=N8+A1sK>n;wl{wNcoTk|_!=DD_yr;NyT$#e`19ia3EgeT zgAc};(}H+4ex3Mq9NqXL9QDd;#Jz9)Byqn`+;7A2EhqkC{JibN-^I@#oOs3}$N3{Z z1BIV=ocLk*dDn@bj-U6O_UeiM#Syna1@0bZbp;#qz2^#jd-sPEPM1irY^6XkRJ=uVUcr|@kY6L<0OR~&L) zhL@e=TSEcp3di_g_<6hF%4Tu=n}359_-~@=WPsz}cK!GvC^m@Y_&>OL0c`R2UNx-1 zUx?$>X>fbr&udn<57vv@X*hDL`uLCW_5o}zV~vlxZuX-9Y+q4v-Rx%pmCZCr2<-1xTX_;!I$10KWk%)0~6D>Uy8{7RvDci>%xYvtU30Lopg6IgVp zO)~Q;K{cSbc8KdCfY0(m#|hjFIJXh7Q{dTv&l7GCcrnkV=PrSF0KP%jjRGG9CEN~s*A9&qY2p#WiRBP7S z@wwhzFj+OnALRWMCTrpN{k`{Lvcio&DzP5X&)I?ia;FUob^GUlc@R$1@Z!o=*gI+C zy%k;ZoHoV{z6qY$K5Zl}i)}OMD9Ws?(*my&ChO(2zKIukfgSMbP4_|%L@kWewO4Y8wmk`vha`T#CGk%T3 z7Q%}9hvWD-F4X!=Btv&8_>Sv42Iv-T#G@W%mqs-|#>wHg{Gj!JJ9d1KDQ~T+D%6vonX*Lvc^|Q2} z9;JTH)_!`HGUw<*POCEK#$sk>da^Q@@0*$FCCXsFZ)c{;V7_l=rVlBD`M#N%{!|&v z_sz`o_sU?tZ)T>!5jM`4@0*!vp)#27o0(~~GMMk1ndv-bFyA*b(?gWOeBaDW+4M?k zV7_l=rpKzEZ^fc!)_ICDm+7qY8f7rwH?z+BmAOJ^osTPHmg^Aw@0G!P-^@BcRR;5Y zGwbYsq>T^e`)1ZTRT;Bfhj3OZgZaLhb$&yc9Xjj0S()o~*7*ZvFyA+`&RxpfsI$&b zl)-%8%sLZC+4x|-Z)Tk%mBD=9%sLk+gZaLhbsnRPS*}BzPgMrrJ)Xjp$@E+XUzAJ z&R~vH2J?NSGnj44V7`xZ2J-`DcIy1`cgpK$?zK@g#vq~Av_mT2ox|P9vA1M#!GG%@&DG%muWz2jZ%=5~a`97F;lri&t zF#VU=I6o&T4`!S)Kb4dRGhZ3Z_mT2oI+b}r+Ep-DD1-SvY8;sFD)W-mI50m}2J?Na z^Wfzi=kNpvvHVk&n_s~bKW@AgT%@BO9R`f@%H=Tn8X+bn`LvXdA(flWxqvDUcZvZW zl|PY_uSQQsm7AA|@(pS+0*U<$T3Y!A-TE7}Ft&@R@F7NIdsFN!qT;*Lh#IXtoap|< zp!@R@J#pY+-V2Ul`n}syvJrLwA{xU+*i<1(N-V2NTp!pXiqRj2Rf)qh*i@Cc^1m_? zBTPEz{l_POlXN&3KQblSM>>p1Nr#as=`hNsgHyhC1;U(Qu9IuS|M^6{&ck2hIulZ^ zGcn~l4fZ-Fy(bxD(|d|dZ>KzGC9XHurCg-D%U=7;$r^{Lpu_iS^lojQw;37CxhA(- zObKYxt4ax&XRm5Xz~=h= zSyC`5O$C$6AEl3#<`%ZusDCm=Z^4az^)0MSxrNr0TUeEH3#;`OB+_k+bY%NnyxrA` z>vftqI8)8FGa5Ax-}oAF=uC;jhLkvTrNm*Q#z895CW9JHx@~60isJQijM2#kLZ(oX zu{)WJb?N!>Og}FH8I+vte=TdteQ@*}wP*dz3Ui30k;%zcr zl}si{mupPAJkafw|Baq+a(Qp=i#BE>W@!u;fZj)akQm;S62qHQVt7kR3~$vKN*j2) zjiHmENSqPHj6*y;*~C!}hD}@?`}lVtO22`(I7BfMZ^0N)zIiobdB4jr-C7%C$tY>H zJkVbi^ZQMFY#u&fkj=vf4O(c@_PYi(nL_t{8}q7n?Pc$pZ4#{NpO(1R60t8B$;Ws$ z3n^ljxE{9AzDb8d+#WZZ4(*%rj5eJ0q`9@yIVSA*T=VNL;p6r2t@SFbk||G`2-}Y7 zDT8ds^t3^c=-$ZdykIgv*M`5YNw2eidg^udRy<$Okfr&1(S~fQ!Al0&Bz)N*n}n}w z=9m93rw3p^BvOwwAk=}vY%dO zy!X}j`i_Py_xi34+1%@U2HAW4lR@@g-?#T_+N8gky7wsR-X9sIPfe6wv{89ue~r>l zdPQk(xBjWQkiGTK46?WWxj{>v(T5#_FtG+@Iz4-V3l7i=)n)AK-p5FJib`RGg5Maq z`Iv=E$B2@5nuQC;NE02mu&GX(A|t?y@lBo7dtaJER);!ii~={=8jb!vV_INiy3NM$ zN~{8+8NiV2*S%tznj|Ks1@_`?CZ>fJwwRa}S%_3QYO4DV;Yl_r8=d<5iMJzCEjBWZnCO~FVb9b) znpsnvw!41_N9tlXB~q8T8Yzjzw~|@*4_@^$_X|0v3X(c>=Z-_962;BCZks73Qrb;?eAVMtrF`vrxjasriCN+~nFzHrI}}V2o{mQ`lom98SzMq zZ|kmlv(?0+#>S@V&%KGmR~a8e)W@lo$hAb>D26#jZk3;s2ADs9mAxi04QAmiI{k!BB}-tw3d`?u(=Ux+7V0@I zXslu3FS)t`5ATk&t1G*0YL%CFAb{!aDM%A{3j@O$xf{)|{ch65@bWjh&&-H^@QiVi z^j(0CKDp$w$bgQ@8zn>r$R(FMLZ~J70MV>}id%E+S)$nn9Uc2U(Hw)0ihV&e*PtU~ z8OH%N8FWM}pJ=~bxFEiB5gSajzd=p0TA~A2i`%T&c%p+1YK+YyT1*t({%Ch>f5Jly z#78ie5*}(GKE~8Sc$k5hskRdyVc?zJvGs&U@}ew~<`Wrbzb)``d>!a?++oiL1n%Pf zVueTqrr!Y24+#93Hs(sHOG8i5`#79{4=ud_Tb71ig<+S5-iApv&uCK3^8+vg1~PdD zq?54#JqSm07}ft^USZiVWXvSR7MZp&kC-q` znQ5uxrv~s5l(`shL9D#)hjeXl4`7MjzOe3T!b#S3zB7<_DYqRs<!VHCy1^1v%p3E$cY+q9;67K!h3BoGUe7YI5Gx(aQ9e5K)b!cqfKsAP~g?indmS7VLo*N8sX znBvJbrU!V!R&%>rY0usa4q4(ZNoN`P5T>oCP0>#Q?CmyI%Eh;8)GECV42yTj-qkFB zZDm46x8L0z%c1K<{Wt<A`4AKZZ?_U zWa4qNN$Ey&psG8*t7d(OG{W^YSwyx&XXp_~6sX>F2@)LgFDr4qy}ya9>PlCa}}LvDdp zUAO-gMfz0c)nJwJVQX~(UU3zm&EAG9$JZt)vQ%xEwCJalKRpDroc-vwP|x}*FwT*= zpFmrx88kodNOJvqxubKx(4D*QG(?!tbfOewv--|Fj^Y?x+T8W$(4stH(i#c#FZG>y z28HR9a|9>68eyiNMUa6Cd8|~GdsZQloFxwuZMOw!Rijt1vN$U_<9&&(YB__a%Rufi zRC5Mbb6}3H=Sn0q^IsHWNRF!LOs;4_j;^WfY=`BTRXvBQaob6V1Iv<=ZMqXIWnL+Pm{D3o+sa&CD&<|30F0D{pRDW4$WQv)^W0PY0RO@ z=C0p#+>GPAoSwK}JZ@%^(qF3lpE+*kQRH5h^F25ADZZ!4vx$r#Fe}L#ballLH?_9>S)uq{+VNEUP$iMs;z!?>`Z>d;Z&|3 zP}{K+YEOqhn(dY|d0)uBa#Yj=%u&X>wvuPO(Y23PJDRXLEYT)BHxKVG&`s7OCgaa80|3bBI~Udh*mj=WmsVc7d3NCLJHCcAcg*WcGzYyA zHE7b1!zo?>e-yboBnJDSLd2Xf7zg~#N<0nS7#gjEr;i!1H+C&Su;Rs88)SbEZA-LmoI{oduIp{UPFk+7){g~(d@f)=Zv7r7>8jF z!vjA}V>h7=>-SMKwsDD!Y|r(8;uf|X4Y=!4@yJRX%z3l+?__IpvjkP2`%@ z#ja&}ZRFZVT(!{CM!GW5^1ztC5H23^B!&1D9C?^%PHOrN3Zkg#2VrMw`Y~7(HBA(@ zgPI=KNjc7uie05Dbkh}paRYvd&kt2>j-z75j*9KCD|S6)Ggnv4b2~Zb=j7a>a(etK zont%3*bn76-;rafBgZnGBRAzjm17>~e~`Eq8RNdD{A;DwI`5OO)n)jk_cHLFuU3^o z_I%2%TJ-|^&6fxD zy1#>qw#*X-+#qGSQ++2)asl%A8PL_E`%naC(oN3cSDkmntIm418YAW*!6D=DXK)q% z@S1uEENV^Nl8?s884>_w5Wnrz7jHY6k%t^jaDK(O9|Vya&YNpO0sWL9lBn!{B#0y$ zd)L1A<1Z22{SO@S2&_VM_odlS>)K9}h7S21z_OV3!@I4N3!@fVOsT2*sl}A@z+yVO zKPpKJ^A1>;3t*>(c?Zod8ZrhDd9iW;UaT}rS%b`|y9Z$PBLUhU5Nv>YvGQZG<63BX zv692!>SB7alI`>5#Y(m>7{f1C?t=Aa0Inr|3SnlGUAQ5ffom7i0ME*Xy1ZXk#ivqrR}Qkx6}u`+~SXOm@jXDqvE zVRok15=sz;m)+GvDqyv(x`)C^Z4MP1BxqnHy4KeP06kT#*4LFc%3z#x3Juwva)JmB z5rKk!t-g3~c6Az>fCGoa7y|lKQ#Hn13Sji5$I0lIx1t>Hl8uub zhgV?K>?QW6Vb?GE5hbSI%R3oljmId$-<+JUcOHnp{FWE$l~dH12*ndcv7=g3@uCHx zM0+yUSrm!};ysm++ToaT!G=ot=?zz)t}aMau%QV5o4$RDWk@QCTdS3`LU( zq}UaT#5zOqqS}Z**%FI)B#OedZLw&mKHQN4C>EdEseEjK>lYlH7H-beX;Txy_M-Zp zL^9M-R26QH`{O-D6>)z@XjLrUo+vsb<&P(iDvQNKQ(H8&Xi>-?L=FE-g-s>mMd4^5 zk_v{3V$DYc{!7Kk-e!%J2ZxhCndZt~&Wczn8sw4olPRpdZ+*$0&d`5rkY#T*nhOi# z{?4{=An}uIw?t2(=qKEEl^y=ppAItVy`OuXA;yw$Xcb}Qcq|eL#iw={8l15{sQ<-$;`Bb1EyAQZc$m6QV*KOCS0#0%>{ zyv1(;O8xQDR5BThRsxCZQ1u~yJkSO&6A++sQtleEFqBB9;-R`wAl4cUAH}8S92#P& zK${L#ABcxSQSGuVPa4$VZ;piQ>6(DDP$Z&5)y6twU7>h=s!_CeSI<>j<$-+mkLLdvuF7z8IUlIm35&+XDo^p z3IMK;Rk*T+rTzr9FZ{+PcIaNhx?^Wj)sJp5~Z8 z9)vd+9UW-(YS}_PEU37Z+R=~8<4>B&pdR5QN*+PmqKrB%4quW;gjDmFRj9@Q5z|%RE$UCf^Y(aNsn#Ls9M(g zqge-IE!O(BEWTw6OIljO(U943s4AKU`SGA#4C+Z&erXtk%N+Vk!ikhWQr^;n7P6O9 zjZ$|BtLtlH=-*JhA{FH(O(0qB$;JLo9`53%q#SX95kT!N3PnJ!AqY{uMnBKsfkIp6 z4&J4|XODc(B(G;;z9+xHGZbVb{O{2I!*}VQJK!OYN5GG3@Hj;C=6m+=diua;B<7CC zc$O&7|M`@todEbr5_i2X2{fT*&yuCUhTSr(1q@o?Px>(|82Onf4K5la1{6_fyyQ;C zAlTWnUyf(@e9y3a&lIm`w|viD`JM`IYK><^zGqjjXV?5Kw>|5boKOGZzpFPlzASf$ zCqKtCDc`eSzGqYc#axo_S?tBgDfpL4XH>qYGXJ?Xp7CDK?0ipMzNbFlGpoR}kJmFY z-!syin^=}Rm=b~bRs8n_IDffv1B76^7rgEngTf5kv}w(z{)punBct`Lp{o2h{*R#KuG9Rx-^e`3XZVKb|dWyLUBgJD}tK<@g`l+}j(#wl^?J z%IhsQ#CD@Bd($ey%ML1!$C-}8Y;@+!i(+-X_GeV+psg69i9a|J$zU+lBI~V<=mM2R zShG`OfSrI)eu)!xlL|Z&yq>~*&r~n1nZvxddCv5V{M>V3!NUY?Qs`u~LL5^NZJ5_H z-|IOb{~08ZbERiAP^^TyYBv>XHbNa)Kp1V9_qAtF^6cf!?dQ4Ple5t?yI?)xw*Vs0 z83T`TA!_`8nCE{b=E=UdtPcfJ@o=)|r^r9}FJY*e%Avp&mu+Gc#bD zC_sz}wH*V-sIITW;z64iV7$ftKm)PD1n1c{zwoniWJGFi>3GxW#-qF|ox^)n?2-sw zo-;-;+KB$1S>DuIA|9s~cxt_#Ir*M>`JVG|tQ$n)DDPTNK>;DcpdiAPV-+IY1Beh9 zb`Nh?$}<+Ib`I+fXJsjMEaQhDA;D+%^gx*QK2uakJ%&}o>vtxqSYH2y?s zq!q=px0%e1W-_m(C$oBzO6F5aW~LY9`faH$B9RO7ANAztdqxlO>{jsbm5`_KChw}r zD*TB=`_|>7^~(x~l%ADOe@{fy@8U(%pG@uEAaOpOqT*bfHO`3qXP@;99eJB)ABj>3 z{Vpb=@1rP91#5EqdydZW9Fu>WXB0y0PKppl`TrYY3_GRsKX3E+-zSfMqFm$uDe{z` zq+}rby806r?b)^}|DBnUz2&H*h57nZk%{(R)?TS611$Xop-2dv-jM7971tdcD!Z53 zsMRzdAsqW`JS`^^-@SWtQZIJaJ*XZh>z;Ycia86r$+`z=<6zyB+myNxW8B5ZCy>d< z=g5kWpP5F=%E#vdrg3AU zxKp^spiBY@yN4xD12m(Ug2$mvOd&&23-vfHhqQztrnH1z@c7Y4Gj@_Uh2nW~xN? zbbwcD@OTIKMFq~w%>_f~AePmYtcJ(LKT8O&pEOok&{&ycnY;(>!K>IFjjEb=uQM+MW`;=C|E ztBsR#U9zVtoKTtxj&h~(S;{IjcN*&f^Pn{n$p;cykK6OWRjJ7L%x1PSI3Q!aUX|DjNZ-koyDws&h1mNJ^^DCY=@%r$koX`xdO8&E3JY&3`z;KccuEQBF3axLb%6*4IUkAQ;({N9#`01OYa{oboH^Xnn zP?AT36EZY^;}*||9M2g!`JP==@#ZTGc@psx&PVwc4fC{!pT1lvcRl&7h2QLs-!Pi*-*nn5MX7bFT2V8V_JNDKTYmm&G^IKllEAd?-``(a*)d83ksAN z>N#krXR&y_1=UjKyqxHB=>bna6*A+ z?*dQ2>nY0g_uzb1Q@|+HcaG%#i((ZQtXaF!Q|I+e1&hqSdO)qC)A^UtH6J-wcBUNm5TPtk~n zJvH8kJ&i0#-+QQMI5?a`AEx|N?eskwxtlq^p=;KxS*xnZnQMtF%~ z7nYLiiz{-^%tOf!#3h*)+cBVe_WU$2eR)Lg$!pojH9!#~HhKKsjX*1F zH+g2{lelYj4p@$7<#=<^w<+ZQmZAeq0H@3@Ai4Tv=U>q)=!aTd$K=m) zpvM0rfBv_VKR;Ey(w`g^^iw7o|FiP6|A=CQAu1W$M)#StolUF-YR;nnTy&jX!OBJe z557``7*K0ZvRI15g zL4rgxei~M*0qu>Kcs*0{i3FR-mMLB=KO?-JHCS=Z#PU*J01D3QSzO>L^ODR63SbBG zatX|j_54Of^XcneavvwUuCm}@{HjQatelrTNTfgvfi!K%?|Pr4e?%{Ohf+o$k06eN z^ofbiLn(vIP^5uKiy^Qg9W)|r_sD-A$!>un+RunsC4IANatd%`^V7LGo`XUAu!IZg zS>y|yi9;LYUPlzviKy6#o{zSK>muG?ZcF%rf#RuYB=#nb( z<22Q_uTbQe7qU!OD0=T=|16v4KeO6eD(PFRrjljtbS-~Yy1b0KbW`l? z7{}6Vu9{eiw?z|>)=hoq0LqsIN-M-3tM+qF_IW z?eDk(&sg!-R~+O{ga2e~Wf_|RpdNP_6g0+=(CIfy>ppL-xufzC6qA2K?S^{eGC z7R#2Q{dpaS`XK&ejomYU&F8c`1>VH|4Q2KgTt%PjH23COg~s2fmAsk@hc)0(<_8@t zh118$b3djq;57{c+Xc%e+60*#F@hEzAlv%k z3_R*1ePlPcKT0+f`s303^&Z+fFEDJz@;w!$u)s8|pVR>l0mCIdHp zrH4r36q7@xw8^+BQ@CI_h?7pCa93z?r~}7rmipsSoFT$(pZMJh3dF;ufZ7t5Wbz6b zuMdED*n)%#o>~m%!}eC18g885{tE`I*qrG))aT_=JZ&U*isxM zTpA80+mHm^_@a{dHLP2cM3b=t);lVy6vQlSg3m`~FRl;KC<9ltttjP#TOAXH1AfSw z%K{ubGh499DBFs#M1xCzU4`cM7~kP$n0pbAM$Y6FjzLfe*NlB;D+TA`RcLFVqvCK^ zal#)-7Kcb38Ew8AedUgcLtw#J2jx}MQWc7}a_4N$5Kyu}J!t!2&qB%=;W2f08QxU~ zkuRg$M2Us1p=52U8ArVVDh($SD9ltIIGKZ#cXw9AV;%6Mf+6sSy$5bGHt-nAoEi>B zIa6E0y_z*}laa^WV+FwJI-UZUK?_64dYm4l1dIJi6zx%0Sa(%vSSJ0g2ssmzZORHO zRSFpocR>>Yu)0tSg>2xEzi@^0At=IBx+R5 zD#FolqOHo06J2en1!YykyEW>HbCKSZ6@7U-S2;=C zOZ|cN);JxyMvOhV|9Z)Rqf|iC#EjD3TNGqciW$`rGRt&#Z^5Y!4WW2PIEuzbalTFq zyowLZVG{4}ZVDVA6!|dXRi*h(4Rm+=f8Tr5q+nZvOacX)h5l{yf$L7a(&14`MR{<$$N7rn_hSKBT9YvW(=claw5)7HX>Q%Fw3-YrIApG}1fhiH8eQ8^pc}V8!6su6 zPA|Jk)oMpa<=v18C$^zf4{m>gO~$zXX{EwE^wWZCje5-g^%=sMh?PSN>F{lOxRy{d z&{m)HCsVZg9So&#S2M&z!1`tJP!O6xVSgmiWSpNK$k&Ne`N=W}&%-TrhfN6d00`0M z6lnBfEGLMI)FzUJi9DUW!eWGjKE*POF089BG3ivIkw7}8A{Zs1ZrrgT z9SVxeSWsS3(pc5tD_>SyQ(a!&V2noc_2q{&mRFaR`x;6X8WR9$tgf$ISY5urS5Z~6 z&{t7Y=PO;_P(H($mDSIf53kDVhVq5wb(~C9=AcNnaj~%so{n13KB&_yzua4dHaZ63 z5}_l*v7qr!cNAO2(UDYTe2BoUj53|xsi}4%Owss?S`{+&U0yV8&6vQ_Zg0Y3P@xpm zzS4H^ie`%>>ujcIO~&utfdy^a15=qnSW1bAE$V0zTG8yG6`5^DxYHdWBzINGf>msf z3R)}}1nrC#J)c)6TOES3EwaTjo5~h#H7_H!X!hh$GQwK2;Z_N)Lfxcd=Q6^#MYV4; zdWna@YWP9md5rUJH;k1i0FC`AD@^89A#oI%jEh}RXiQ={U@X-7!*Ob2Du(KRDbcsC z7$}gMEjl>5kLheHFNDF?j%Sh;h{m|RKuqA7qZnzHM1zQBMW8o@>=9I#QGm4h>KMNP zxl{}t_&o0bt%9lkbJp+>3_g24@q}M(e<>^8nYM#47X*W|{b=MZ_Zr5ruu&ruTL>TA zwuTi5MaGX9KkwjMR#F~p4VCcX680xBs22MZ?FPN&kc!e)D-Iq2M?QvL{E z`VpqyvT7_Kf5L#*6A5^kF2`=gf@srQ8mEi5Zot9+jSwjnMQjo;s|tK9OcKi z`cwwPu@0jx-GgutqkLl>dph*3r3p4@4{^T0PV*)p0e&n%Q)9X^irp7o8YkX6V;s-03Ty-rG zrWRj)gIi)c!ifYo+@B;veZ!Cx@e3!AG^^`FoqnuVx)Q@NP8%zg?lh#XG4K%M=wS4@ zaS;5ROh&`U!Ck;Jff;NE5)7hv^?^>~DLAAr{={J0p$B6kXui^#nkr)!EWT1)4`9rP zO^JVvAln6<8EfDO2aWakklfmbKPaX_R~+kGjf{KY;E~LK9K-Mlc*%`Y#zmM?>KKGE z1r$)(LK@M=9LwrsD_>+|9AUGsXL|+Kg`{yA?7+PB?8Z8LsoCh_CF3GEs_Pf0k~DZ&@@_;52qcF!j6&ci%=5Y`<1pMMQe9u2>SzYu zC>lWyKDS{kgB{$2xZ#7vY6DH3YpopIxVI!9tmgIxu)Ptg4V zuC6EbexAQw{)kb*Aqh`bMzJAC7>Bq47g%XIP~g>exE%%F$sVqgD#jLuWbw!I`tmAc74C7cUvEV>Y#DtD3Ftto#`v?zoU0<~bGPjfouHTn>!2lbrz9`fwh5XF5e=+=|zSGAtd& zuqhegvZRb>&&-#68U3cxn04LpWq30}*8!?d;}~CCc3G!(Dk4weS{m2jNVL8p%xK1O z746_9=Q0~04B zDIHC5ohNdwdhSPwaMuF)Dg1oC=145i?u&r4823lOZD*#eF%OsD zYd`RK1K3?*(KSK~& zGa!^C{YD{qO9n-RsVe;bY*mGCfI|x3#$dDXbc=I(;U7a;sd)6@v{_~n@+rZ%@i^OQ ztPz#_99*0T73wwivaOn5GeFk9kyP@aF##VtrBMwxH&&yn*#F2G26E%+)_4627{Ph?hs(C(Ot7;xR9;KRRsIz&-WNe=MRF*ek zlL`(9NJhfz`(X2_Zp<*|!|v0LRyYtw?&L5|f{WVr3J$I)ut(vjfgF@;w~<1iZD-Cf zUV+tGIo{(aikPsq@D~iX0rmnpNF)eu*)XP)U2k5vk*Qry1h>UwXff3ZfH1Lm1}s7> z9*C|tan(!cLPgjGuTd$&f`MrAyWyLIb>?t%N&y{w4YgQ z8dubcntDB*?W*l=h67{j0etLZ>Ls{M>XmLJx8|86-4EcUN!H^)$tsfdRLgn?TZLqO z*k*s5?LxBt9d<>sZecK!tlwK!dI-fyveFwuPRJy5ijb_+Var0Y&du)C3@=CB!W7mb zZ;xlECU38V%R$~g27r^i-2w>Op6A*3VmJDL4{DOPL*XzdolNnm0J-m%HCmVqRy6O( zAry&d-X*(`P0_p)^T{DJZyoGBR+qzKR*4}i0TBYX)$S*tC_q*})37-T5Ug}qA7o!= zoXLQUH19>(y&ki?(#heCy?GAw%7jrHd%BaJ=8tmLu+v65AAsF~MLOTcE+L&y#Z`tj z()l`aDysTv*fWsMFJ%S~;ys6hq8@X3Bk*6g`Oq@wzFw>u7Ihe=TyXN}`DEvkQx>?%xv zi|Q}y-MfvwGj0l2^L`_ZpJaTP87`ZGfA!`$b0U>J%Z{O75=~Y2j-fCk^gKZIj$y~i zrd@UnySM@K7ywpRFNAyLR)h&l!cLY}G86DDColt_>*5~_@fe42>hM{@n(MxfIhL?-VG-(8@d!OSQVjw<3l6oC#TtKSUk47x{qnI?(&A_CIF~ZxD;kK;VT`xj^{HlhL%}$OLFUB` zf}?H&5T(&qzZjoLAgg@FyaO{-qmqGX)o5UFwrcp;x7TXKI0#q6xYx3Cl^(a;x=Jqs zB)qA(F=0O0u|EqLRj@Wznl&|^bh@SHptKD<90V#{t0c+pB%Qo}2_YSX+NTUqG&cz+ zgy!BAHk-^~0-Q_>ne-E_8ziJ*QlIvALh9dxZH(F#(QTpThL2w7ruB}VlS@obAyXsJBevYG^nk9kD?N>B)tH``q}HU@6)6He=4duGz1nC_UfV{F zSn!Unr&mPHzMw}NRbTwgkpM9-=owu(Fhhfh=;=ef9iw*+&m4edKHdezhFW9lCgj#&~N`}$8>hbF zYyI7*(%CRtV7~zcO21dtS6tTLJ4T7UMTK9hzUQj16;jyqLK|ELpZw@OP6C=tN^X9=s}YO5Jd1V4D(yG}@Vf z^T0rtb$Y-p^Gk#xEru`95i}sgPERJose&|6daSHx46=A+<21A@wn$Z|MTF8CP#11( zb3#gEc=@G+CD%GoL#&hC4$P88Xr38dM(Qa`XjKV7=#x22MI_w0C>9SN1r>s3?DpC*y^VL>5FMG6FJSsQZWNlbhmk&mU zEgX$5n^Q)T4ZwrV<}Qg)2bs*m^wl5(BP1QvNJZeiux;nDAhs%+0jx^s4y_C3hBtOD z4%5MoP%uMUltnMzlvOX@oTb~}!H!Xtvcnp}kfUdSgES+3OUuj7r7^?XfF&smE`35bUlpq7-$r!*Fa zt`1i{J*@>Y>CF9|#r{!mLr9XGZ)pTaKiuw`PXCc9>IUA5H_wX6;qtXFcHc68GyoN&UP4s(G10Rp0K6;@ ztWgk~@|4}7D`0sq#v1I5Ky3ul3{Q?Z($S^2qS{L=%ONc>X}VdOOOna69t%G;clPM4 z08&b)nG!!7&c-j`$3+o?h;&wXvn>Nzz>U%Ns9GR0M5=`r4n265C9?Kz>`a7%A-&LK zNT&+t{?JC9A-(GK7Dg{Y)eqF zgk>ahSUb4P-$_qUCQM!_5Cu-!5ymxE`SIGZML7%K(+ENLj85Q`cjGl=pluCyI4k9O z;Dju(SYH!{Uz1S&NTjDEcm(M6gf;P$HXE9-1xJHJL2idApKCRIUDQ*)r1?Ig;ftCt zBeDd_M{hti%S(+3gyeqn>Aoe4>ReyO&h+5`Y9t8ubXu3H@R_~hcoj63O4P+-?$P0M z^$GR6AwX{YI98U5a6FL&u_`ZR8opq-10(|v5jb!KW__DK7+WP#@mdWHLONOs4O*XV zjN0t=AiP4F#6&Y-rxc2VAQjG1g0TWRj#8|`83bg8riyj43Y88MJ2({TEQtV(kp{m_ zcI=~r6hS$_fjf`sEGX59p%rKWepysQL&0#;qWlml^XrqUN!(-C)=&;TaUYJ`BoC&A zDC5%Q>r9i4_yV*y#vJ2HS4L%j$xyT=QM9T(Dx(T_7`_(04<&EI7YFSCBGep^Cf#ND z{4J=pZN8wvNwyG9S}?0>qNwI;58?IAjt*Ms3?B%LcpS4Fq3q9v!iO4{rhvR`TM_ZM z(i(4#7A*Sup;qh&73(kzK8mmonS}=4Q6fS6MO#=p%G`;Lm(oxwpw@Au4yxN2SmjY# zc!EYaL2)wqaQsARkBA8(q0CPBh*mWwK$8 zD+mQ32!)XWUP&B_03Knb;&8}Ja4S4xa7s{uv6FlkhoULM4-JeDD1Z~rX*czap zEvvmIP-SYQq~ulHS~){Aov=|HM@I}CoQrk$kit`Xs2Q2TGlf|${8`Qah$o=KhyS~u|-OsX7Dq*u=Q$Yk0i(&yb23#Hq0>o0K?O&P#JBB z8BjfR9Yw(SOr)B5i26YrfQbhcZ5-S{n*gH_+>~kgn$08kEYFwAiP_4%gsF(5*d7L~K~Ipbsv(N;dnU21d8MDs1p; z5k^}W57#}eL(x+cl~T&a%?QT*s}d!N9<*>g7R8zu z>0vq`?YI!u_SmWfF+c5IhHDg{R&n6uI;=s^Xl&+9K3~G3?4tUC@&T9j7?LJa#~>#d zgliUL07P3=y<52YNX#5>;(^X+i=`sLIxHPH^#hC^S2o6Y(yR$yX(d;&>x`63)VRf= zN-YjjC^KZ5C5$K$l5`r7Uh=>*iF78)M<-*oVjY;Z;1IE(1t1xz-9``WqDiN;=*kxI z(zA-Lr7_w<#Bp|M%XLhjZgfna0W%Y3meDZ-?ip~;fO`hqGvS5~WyegoXTm)T?pbip zf_v61rD z3+d%%tm+*hCkeK+EffVg%xexR5sK60k(`mNcEJ#hM4Z&3EQ6uuR4Xu3qD`#z?TjIy zd{AwhM#_&iP$?{|YI0R3>Ox1Ra2|@#O=Yx1X~l;VC7`;Aw5w@xmJI5Zp#4BUgHXp1 z26iMQD6AkPO8Av zAynZGJhmD}FENutFDaq!0FEMqSY#+QG$lc8FNBN6DM6u#YU0%6yumQks*=!2VcsB} zIPhZ%%|#oGg|hAdV$qwj(&#t|G$6 zBPLN2$N9hz_+VH7sE3e0!Xe+Z00^BnPBVq;1YylbG9x{U{D}qNqDAQScAXx2GL)!} zB^zjkBgV2hNYG_8CNLjj_VBa`lhRivq^RPmKsVAQJm!o97|xnhlC}Z%6nIl;HG;0{ zQraupz!=OBX;K=j)taDWRDC?%koLmcv$R4up^MNTh{n;WcXg}Kq5cJU z-VAa7KPta)Y zL%cMf388{-PK=fY>D#&@uUc%KrBL1E-IKw&M^dA=hi6IffliZ z0e%Kb)dl{F-ZBH*0Bt0wD>N-x)68MOBjL%V!IBm2;1u(ME)L)|gLdz*G-LY`36U~6 za*3s|UXeZ2jkj&VD-j=cKAw5Lt77r?1O)-@g2HElp_rZE=2D>M6i6!UizBI4FlPt? z97zlToaDnTew`{16@h35vkdI83c=2_QZUqA3>#3DgCWj>C=g{^$+wR{G!_T((Gs%} zDzr>TFnfcvgR#L;j%Xm<30XJqjZJP-m4xTjBLR&Sj;&ll+T_MMsZZ^}Z0%eU2mdIE z{w78m7zn&u_XS!s&q<%y@rVsy4 z!F4Y6w0_VonvhGEc9M38Jrvm!SWZEg>LF6E#EDoJfj$lDZG&bG*qpfU3#2$K=uPaD zTB*v!{RCMH1f+6=#0=sOoi7&^w0B4*eO-tLyyDt`{E$HyPJkHaf&tk@gV@+p-%#Nw z1f@ZCAM_7YCfGJgMSOt>9qvb~>PAF6s6!J(3&@cPt!IH5qab`F!s!W2g=e$;5lH-i z2AqCaCIvuyYNuC~2_ZkrrSl|+1?3|wl7JBNVs8d}Qf$bYG^3n(AbSglRSZ2V0rZ&= z?ElMH5tHg{DXg)Jt7^f-No6hMKgiI46a@2D9Rgti0ywhFIE4}p#x3RvX!sB?Gd6CL zvrjfP*wZVKwS)jCPa4JHo1V@~`h{WwVX7E>KQKEY6dpN3js)S?PL%gb_?BLKDI&l@Nxf zb=w4RkF^Mx0c`37M10y87D>1yL5GEIiirFXJc)&x6_G56YBwpdrRYdI;2@ZPwBex@ z4pW;q93X_$ah(Jf7_?O)l)&|R_=cOqP(BB78;(b?L^rgB1MMLq)hIfyHo-=pf`ggC z%qUWBWR94OFPwZ0Cj|A#aAq2dtweu=#ucp~zif7}6~f3fKu18Equwz>1qSs82h@Jb zgi~z>^@O=&<88C7fe93F0y{dB#9az8l_i0=2OLpwhLbwN1*49lEQnH2n_(i=vL%us z4TG6&5=`B25u1S3d=Px2U+O(5`y; zGF8qe%}e4viU@QrfI4aj1#!2VulE-5wZvmbg`!qDUHT(f*+gZ5Lx9W1ozBHps7-Nj ziS!hr5CQ~86q$I$6ir7jnSdI<3F8KhZyP5veZk*llF3eKQXX`i?^&pZESs!o=Hie?d5>8;!n=T**b2PIhOaqT% zS`@PIw*)IDiGSVzaZ-tS%^Oqkrs|0VqtRi4I6r30@;;Q;7a!%L`R&y8LJR}ZL9qgu z-{hU~z$IBjlu2xKfi-e?e5o-b7m#9U<3^(vw<>@kCNeX6E|Z5jyrmlyIxyr5+@iO= zWyFmZelZsvc&Jo2XB4EqwsX_!5DhVV+fo_KriKtz^`z|BxYcSI{{>apY*5+BN|q(Gt+cwyfMhF?Xu-~chJ-MeWKYC12q|I9%)&HK)mmC6JY&tXGux9{ z3#m>^4F>x>a6%9-9&4rQ8^Io|72yE3>7ZXB(j=w;ibGQq8Wa#41z6+9Ry-?l?j#y) zGD4(j?HhH=j|ZmROD$YHUfM7Ou~N60^p6dI0xhzW3^JD661@ZBEQ@qhH3nEI(kdcF#UKPS@MF(G{XxVreHFh=JnBLTpl}iR za!nmzx<{d&w~Hzr6&#y*#kuCxbs{V~QzSy7p1n|n%BU0TxCHXLQdC&h*o9Cb5CU%m z>U=a5S0!*QQ+o$EZ)$;Kn2Z-YMDkNb(H{2V2~4l$=(P+nOkZgRlt~a|B7k=$B>}Za zXe3*2`2eBexD6Lipr}ze+L?kZp6C~idt5^fyDmx_D}Xsn1xHE|D#D?NoiD3ISQZOH z^$g)$E#Ig|aJhxO=M219aj4yq z(%{a>syVoySvfO>OI=wAhI-3fwFi-<+YYh1INcBUi$xUaVQ62C9giA`x^;94%2(ES zgSk1<*4(Y^mgZ%*UCT{N4AmjzfZzzC+_jJNKv3Vu=8w<{VQ#1(0gOxMIz344iUE&~ zAYEr-dVw#e_5}{$B69-)-T_!$V7k(HBnk)m|2B7mRVgfA5%Op^&p0bB@ieImnUFgF zG*3?146Nv~u=Ach+^-0PC(BPAksnFbS173NHWGZcQkemRAVjQIM1h;>z$si)g_srd zlvXprY%Vy7Z#z;QhsLlO;q7IIzuO5o%JfprPhky$N}0$>HiB@MSYXpB%?zr6&K`97 zql$$KCZ6cTg7cH{)pY}^DrwgNLdPys3aTc;n5k*e6<76fgMBTe`cw}MYq}InSiHnq zV?uzHe0uZa#A(wD?Eo<5NFH48CjlUF*F+<0i3^?-nG#X*i6qBYYjBow`?3|hjrNyu zZ1u5&p|l#KepY0|J0w|Z(*n(8jQa#g-EQ41J`4ynqcyl8O;<2Iq6q>X0tx&;FH^%n z=~&0lphZp60t{g!j6tor_LZ_rlQF3xi<+|oq}7+R9O&1Li~l2ZbT1S=2ptph5< z*zA||9#K4vhBj1;r~z<$h*$;z+W}EID{welQiSAIs1oS2^&ABv!Usw@Q42{wBJL^>!X zX+#2t#8zq9r8R{}IZH`#G2KE?E|HL;W`&8QJi`enAuD@4gW8}ymQNgzC9#?n4LC?M z8HLccorWI^r%9idR{;xDPNcL*C%}$&=@~*20tTe0_9Ur2h#nM88#}`b%4~MouH=CI znAU`%p5&TZeFH+AIwl^I5ld01xI&r|3pYcJS%1*II+A)33D6dc02T$Nw2%Vr)sWTA@U94LC$JP+172a$!4Z>wzQZ zyk50Kop(~HH}mckq9!HFsgJcJS3%gaK$JVN1cSrQPkz)xl_ews`Z5;~FM?nbLgr7OY3>4a=QQbMPLl32dNP}J%mNtzyrGW1OS3*tLq)-!?6&!v;1q3&@J*=wW@U=w+ofwM-+1C$V1`iF|!Rj*stQDLFwVf1j#4@+F z#7J^RHNBXn#2OCr8Ve>|O|*uN5kUlv%{{iEAl^a3t98(5#@j!&G_jyk#3y!aSz_7e zW|3vJk+$45Q3x#JNdd>AW-}n@BJhd8#BAj`3JIW^2bu*y8+fiNu({wH-aXsFq=Hh1 zQ7QxzZ|fUY#WLrIffS0PcDzPIi-d*5oFxbXW}T4ID(P8);Yi$R<{Vh(Guxr)%O&l` zzTBFDhAcZ6FCtkM<^tr%bo{3VTv+fPz@{d0-KC^LgDcQu!y#pDp+Gw(0wc{jELd6*yRdJ)tcw?NT64L#r-^Y6Y(eM8nc~9LHTMrqaJ{u4Bm2zSxO>zz^)C z8LT>o31S6Ol|x>Nt)T(R-*u@93CfbtgG;rx2`*B>gb$(Ry9#JEEEk8xj{0U5_pK{F zA8GLVv;ff(dHH-5Ah&CwNamx5ee|V|IvpDb9nC^RgX@RcuWy9J8kBZXOBV^l(xBD# zX&|hUZBzm#(6C24GUbn$ZW>vpLl*@@+=M|^7>+{U$(Dvc!1_;S5C|Ya=U{%eE~Te* zuy4kl-Vk&Fyfox*uM7F<#&x?NHX_tB zT`-b(p3B5w2`*%<)JJNB(uS!EPLZ`MEf}?yRfn4yGoslBirZzy(wH3#ZK!l^SrV{wDn z3y=nY+6uj>#S1_gcG}I@v@+JBS-F^W$ZRvyUabV0p#o$f>khdao~9w@E=iGZuh_i{LO3s`Ti&WaN>>>zV{wTM$WxT{Mre{`I?bcD z+2}Ps7E><_XOenG{GE;TrT%7o5A}jj2({=fNECV(P->#uQUhDscv%%vB~R*VlVB%{TR?O?}pMIC>-S_$MZNkQzIwqSx`r4VEEsNe`HW@T7 zxVX*~GF8>tq)oP18LF8*uvzI0v3?*?ySFPDlH!|_L3fG+m{wkg?++(U!`qcGk9h0p zQ>lPd!?SI!jmx$)Pg^A^>MMBAq47)FOQg z6vn4Y=EG_#EErnea8tGWmhbHufd}jRwlVtLZ@cQJv($sP_7|HNWVYp*h(>3-!J2{QBT3314>M&gM7jG(U3+m{o(8rBEHD8b5cE;25rHQb+UB%} z>R5n|-hswV)QI<%YZEwl*5kj(DQjTRv_$%&Noj!LT_t-&muGK@q(yWD25H0;0~V5n z?zeoi`$0pu1WhpOnAe4y~m z@3B$03l1owaj&3gMw8*MhKreq0alUtW0Na(M_F9&4Lh8K8R$4+V?)Ip!hPgMMp%4h zP?*=z)7<4rY+h$q548gvl(H5B>&Y8BZArJtZ_iu=*}Xt<-FPG4!%tzt8IB(*_I0L6M1(cItj(-qY|r*_Bw$_SWa6ZivxmjV@oQ7fA+*E zUrr6%7VAA`TWXmCWKRxxyWVQHCFS%>OPN)M zcCzfQK(5D~9ZvAZ%pI1&@zeeI)2~(sa%qdja%Ld-E^Rf&wH# zJ4|2>+2{*f#*~}?fH(238)Cwy?mZz6(-323xBY@)o1Fz(*!I~#a@fWWsSANM!N=bq ziqRf)Mv1N_Rxy=RT_D2;9u-K^t8c>+>k8~h7kAo_gv}n)>F)>4(^~-Of78WuSrcf8 zwc_R)%BJ>*lB$N<3|JR@<5$-7z&~O>#SaFA$P^stP>7D2(!hf}helD>gdtDehS2uZ zf!ww}aVxNS+p?bYPJlJ(op3C&pm<5esFL)VP$j27nmQcK?p+l_vw$m0r|sz6h$NyU zZ2Z$%^hY6e<@29P8Kg1|CTNk^Z%I0;#8?94W~J8K&}{i|qWT9yBpmpOh2zY3 zQX&noA$0%+F(cR*omMm((3JO>+I?nJB~G-eT?xh{Yn+P$gnjW-{JR8CtA-dUGC90a zJUWh{RUE19Fq_aH#00Y7PVCnS=@O)YIA;u6)xuU_j%W6eO-L3b1~#6^LDjNAo5nJf zsudbKziuC-Cx9c|E}%{EeaG@`(0cyrW?91F zQfu7eqK@yCg1Usbi?qnGmf|uWbzKiY)N|Gm93oXMS+*WX7?N}kiJ3e}wpksl3dy3| zsUJ*HdM}|!gPAm8dg(pCHAY2VuCN)DB(Nfo@SVPpwrf2JIb{-uxEi8t8k*$A>mOuD z296Xf{Rp^lZaSR686td{ujdR~4^<;e>4%fDp&bMHB}gY0I~qI%S%VXFbk=~clYw4~ zxPT6zkjYvNHOV&6mmEf*T_UEW5-6LWw7-dCt#KooS@EE4#F6SsobV@2TR%xCgcBgm zW0TqNkcHj}6m+0k%_KEOhAGhjivg-`SVc{cgwdM-Xy{OYY`&HZnNRNNqJmGpiYBqB zPMdu%xJ#pV7kG)%&7fwNx{bWWzYki4&@eF*D;mOZ{=eF??+X@G+z; zDpwt>Hnu7hUo8EEqmtYL+$dm&P&$ySNgIZo(1aY#Nhk!$A|OpCR)t$afu2A_qM%_h zvs0|tW@~wtAkbV;!jSTAOfV99*F%`5g=TOf9(N#;(E@q2Up!fs;uEVl&KY*T5U7f_w;fXW+xFMhs`T!7DnMx0wTBruHJL()A%k9SQLA8XVLCx@vje!ZRhrEZcZHeOK zO-D$b2GDs>908d$r)^0x6G7Hn5z0!;oC>mX>D z0M31v38yll&(R3H=sWaMT$@NU4vOjWTIz>*5!g=`hf?Jr)~37HH_$~uwD78Fi_>e-0F>!OldnoIkN;%ITXTJ5DWxi7AuKDtHuIKz#%y~C61nV`qbbCut2-rpYHn#CmYamglJgk z&*v&=>Bcc;V!@J94GsqDnyf(iK@Vv-lGiO^>>Ab;Y6qy--{sY#WcZgEeV>g#IHqz)kD&0=lOG z)gs!07Da_;tP3_w54zvLhC!XUtc7I9Ry~mz6DpD#M!gK@D%J;bs438xC0fRskd}lQ zFl$?1!Pj#KNa&60O{AurV~7+uXp|A!k$iY%uK|~yuF}JjgzcIfDwPu&$^lGH%eq!C zSE6!7QI!(DH!Fk@0WASm_-x_gs_S~(BiFW#sF3RvWswtV0=S4Zn6`&~2!?2&4YXrp zG8|!9k{wVOGN)_=G{}ag=W{PTiyq$$LliT(JT2b9)NYRBtKeox5jO~i9 zVq-jQcd33vN!)qTl`;Q`q5YppN2#f0Xd6o3F~qk4h5h)rnOaLQs7Rc*u@FBhsuGha z5w{C7Qq{IPRnisOhTz#NPwb-~RrPI(xE=Z1Yx;wEy7M7o&4nDcp|aZ(dwWZQ6>l5M z?#@xYA}>P<8)%T_+feuIiM_ogApts6*~56ojR={oD7!mHED3&+b` zk3o~-;*=2CK|+~8cit^T&I)~r2zHk{B*^_xvJ8iJh*13391wR5x(5aXII(;9 z-q%nuE?tR-n{i20q8NKYB!oP-CX^Ad5-}(dsP}SwY__oV0pAzrWI_?TnWZgrDVV;@ zntNtn64uK#Gunc-&z!tyq9j4XT6yTIW%5%rCysu(@T#;14<$%0?8&(rtd}5qKpJ3r z;!Y|4o3-RwxzAR{=H{c&l_RFNv$UjRVryzh zPej+m2E(h3GWEq%yC|j}VP-T9Kpei_R!5P$ZuLu@+q3^GBR#p8x%;!6g^Ue}DOF!$ zs$7wJ4mdk0+~rveTJaY4KGxb6ut0~gYo1bO)mLZu+mr%cncQ=;dDcU@mV*kGncX|B*wQ@>B0o? zW~bSlk_H+uBN(Ih$S}$fq$~Z60RIgKyPXNznjQm{`UfA9q~XLB)Uk?99XisgvXrE> zjujR>>EdmTOgL54@=X0IXeHvLx7Pn-7XsDd-YuICGA4RT>uZ@#9Zh?nJkE;J-qJo4 ziy>m7T3CBD*?;yPhD4xUBs`%e(0|a$+{eMMaqei6~qEhvRVXXtX34#2Sh7ax7tFkNTdD z=2#@LUHXgWp&Hg+G+l-C6l)W1_Q4IJxK9-IECv)$ILO7B`djjdxTBOrrblX@Ca~I42^;k2(a*RI4_xKTr z+<5t%-FV~L=nI1O@Y2QwaKA`HRzR^O@WOR#CM z&w!Z;GYe)PnAtGJF#E$C05cEfK$udPa+pOh2g6ju)WFoiG{8`LOYx;T9SYL~&@t0H1dbVf9*S?EAzrOR* zJ!gG2{i6CWkG%1M3nqLR?e}S3th@NnPhC>;&a01h96$T9%Xa#F-d^*9XU#q9XPe_i zI}U%N>AT&=4G)h#;Khl*D}8eBqDMAO8T97W^IF#~erM%{*WP#AK;z}dj%a@S?eo9C zs^OwXR-Lo#rnlCeyy3W^B@gB9zU$`p{dO%IJ7UtxJ4AE;Pk7{Dx81aXJfvc zxMjzdOaF5AH)kfw{xPOH{8VmF)oUl6-uc_JU%0a>|MPu+IsVn#YjX;w+`n?m(B}Dj=$uX z>3jb5)Z6}^e`n=8f862XYfnpkbnC*SpPcyqA&1T=tND7j=J-AJ%^y@;`P7^V$M<>l zmZ=vNKl9{}t8Zy;eC`jg99X;Y{{3H@T>JGclkQnF>ZAKpJ-Z(hdZ*~3QRT-y5r1y# zU5~DKb=`!Uh7KO~=an;F9(mtgcY3E4pVM>iZau62@Xe}oPCWO!lb)Zm_?16C`QTm; zwKmq>G_!rbm#&d&u<}UL7%lpE?$DcL){sY@b z^x1g+>+|#L79Mu$$V+e8^Ugzx^5#Ez<8zlkb@zsU?)&Y%TXz3s?`xxzZn$Ls10oxi zPVIMl_bJOCKI`XWZ#(0W6KA~m$vNMgaOp7%mt6Dytb2daC-_?9$;RVnlnp=oanI}l zP4ydo`)(q#?(W8SM$J6(mfts?_{fRTGcG^p(ziF(e>*yH&7L1#9X$NL;`-CR+hM=c zwp_OB-F-fP;FAGIuR6Sc&AY!}F?PzA6W4bQy>-id2mGV)#nMABSh?k#Ib-_WdG6>V zSN!>g10Ndv+m{DFyy(wm8-G6Sx=*ePd-1USSeRKb3t$>xf-p&#wJ_(wTnBRx%&%Zx zfq55Z3rrpmiWg=q%q*A%Fbyz4m?X?vnDbz+gLwev8JJBln_<3y>D$jRhQmyNnFF&3 zW*JNyOgGFrn2TUGz&rr+49q5&%`jiU^aU~-4l@B}4$LB$WiV|p-7xE5E`r$r^8m~< zFq>dD!+ZhLcPGS$nE*2fW)aLXm^PShm~}80!EAte0OlE(O)#5bzJTcq#5){j0?Ztk zMKH@?+F-h2*1=o^vjOG-m}g)%!EA>40;cak#D|#xGY4i7%rclZm~NPLFc-mWfO!Ds z8JJBln_<3y=?g?Y9A*N{9GC`}AWRZwEzEf^*TLKa^DCHFU^c^i0n>L7;=)XTnFF&3 zW*JNyOgGFrn2TUGz&rr+49q5&%`jiU^c{@&FcV%%k6^xm8Gr?BG|b*G zb79U3$$B^Id?0814#t8&>)#zWv(xydQ`}Y8i@O*L1^KVMQ{3lvh-J*Z0DyDt>?{RWsl_5+EHGX@+LGBp4KpQCcP0IZVhz0V`QQ_CCHap@D z39yUm<9lgg$8Wx?O;2#O=~1pRFb5e^`h%|F=*HEqG4ZsD-%s^fUss5=?K-6!E6RprrhW_CdQ_4r)o8c%~%{P*sX_%jwu_;{sC zuU*`M%fwv}7x%au#C<@kxW6T$7QgqDzgP9|>8|=TsP?`B^`_s6YP>F0IHJkbUK7;>%+H8{3}#`SE}~-jcb04RsEsM z=TY@RxAN~2*L)b}>dy`}9yER%?V8UYtMq@X`unpMXa7EoTnHbHm+Xwau@NHoUp5Hf zeph|wp}+IswF2!h9Cd#hCb>|;-mpO8>h))->dQVVtzWy^A{S$l^3rqdES2|D3K>7A z#?CU;*Iz4KtJmA{3Ri!*Uh*G>{As-?#d`C#S_4N%B#&Ly8oS0-rfXf}t4fXUPRu*{ zO;_XNI5j^0;2OUNsrFo<=F3ND52}+M&qGvy{Np4}&iJ=#1MO~BH+ z>f;ZprHp#b`KKzg?!#`^9Dh#X6paJlRBbwrm=5@TrN)e&6L-7vyGONIP_@}FUE_GE z>T`_~-*ok9lM4qeRrzbWuH5B*9c7|E9Z!YB??}u^a%&tMSM}F)Tii9KKU8BvuTd|l zKG8U$(bY#^E4Q9QLohceKixi>mxQi2&V(5bLqEb3#7oLGcEG=#VC%#1T;;a|zQi*j zXkTUTufCd>G7#>aVFttO0z+w!fEfj|D-4C(4c|hTy@}tX%y2Cl9!?VeeHV&-?1D zV}~1W%{}F@@~`6aPMEnz)wuPqgr5I;O2>t>zFWQLw5M+hB5Z!o1w~(WUU1wo-QN!{ zTyemcfx`2T`Rik|e);@)N54Fw@8dfT{o?ZeyUc%W#C<0pxX}eDi)VL@b0n`_l+F!+q}9D-rec5dw*k`y<*VjPb;sS zbllZfU3KGgUp8&7AM)=9ubq-J`{Wz;pMKKaYx@_@n(^*;fxWxSkDmDc37e;_Ubjk3>-Tu`sZWdk zu=DvPzd0d!OUoY3CyXfFd&aPzJ(f8Bce76ZXj3@$e$)O-b2={{d)Q4?H&>24>R|6a zi#L9E{>=xxKc`_)-T5=Rmm4RRJhXb=UZ*_TzQ^8suDb5E6K?dL_V+$($Ir}vv(5;w2FTi{XGXaz6AeacuSumf$cz48jh6%tN1#=n9V=x0S**al1z`OTnO`9vIAjU2y;8ki!k59EXhavz+4aWN0{$n_Vr>v z2(upMZkShL{tdHpfniL8se?(voDTCO%zH4q4n=#zL}1Q>xdUc1OyMw;8|EaK8(}uW zdiVn6F?C7zv&=%!M!y!n_IdEzIsfcuQfH8CV4Hz2u`mO}hz2NA1b_<>96^&u0dp zc&DPiw3g?f9}##;`MSRCOH3<;xKV|ej}XZ4yMb?aKz_iXi#I%0$Gt=7tdege>4%13` zOvC7)QrwFfG8PQ}@x#iWK@!SJA$CSh^6koBzw6Z#>n3QF-_ ziOJeJ`dSY0P;1LA1U_AXFS~}pOLCT7MBq~7Nag52^TT?>(wq(TXntj-5HC%Y5c9@! zHl-IoH1@F$(@G&eMvDSj7?o%w6r^E&MbXalP3w^hOzX)Pn%29nGp&Q}F|Cx^0hnXd z`nLklAhqdtyf-T;36pg{NtmpcNy22kt;P)d1X^E3`=jJR0VbpM6_oOL0eB`4-#^JX zZ2$9%FO8eU?LyYZF4MXaRsw}McIPA+((^`-5prEsEH?6naYg#FZBQOi8|N8I6 z;C~MCy>(i|v{DEUs(^uPRNTg;yZG@_RulL!M4-I)z|_X@Dw+J3Q%*U^v>p~PtuIKK zDZq&+h6+nbyo`ZIDZhCNXSmaM?*L7K$ic*-B3(0$!NW?H-W5F2v{H!QW13M!@97L) zh5sb7|UG~D@Lo1Q>I%zPn2BpEs`i3+Z zSt*I-3OPM7o#S=B^V+P7*O*ocu_GoPmH)DVJP*8A-WGfvH64rc!b%|~!j92tER#vI z^tGeUeHKF$P_kB`M9Ml(rV>HlMKdbsx#$UH4c}*4DdAnmN!B+4U!zhhKK|>Q6IYs6 z3bC+OLL^S+0rtz~58O2AH0~9$Qiy?SjDC^JAuikR<;@>6Fu6dE*KKFG3LfH(o@C;oE1I<#$iRDuFb}dY9j{J_@S}K=G!cGpH3Gl!8v$ zZSr5{OF_v>A@)E!Q_8QRosrx*6VLeKEm%=+vhLDoLU)B#K`Gw9CQ8cZjbZSD@4meA z<5ts3A@)<#`!Q*P#6vfFMoJTqbrR~0{K&cwtSACmDP9oSlf?%ZGW>n%Zr_buYFa5o zkLsXdqZnL#*0-ZBUTIn>#4prT&$*U!`O|JszDwZQ^Canc`*3KZ`NG*lx=kyEn2y;< z&9O5|fbT&^-Sq1Vq@l^Wq?wZ=s~=VsfZ~naLsBNX0fl}(FP78iFw;sQmM)g*wz-ni zIOVGXj9U-@h=9C|_0s;!4_kZN3mE5U8nRM|iQ@$oZxkGH`BVE1I1cqd2(ms>Vp``2 z<{)Tp(1g}pV_MhTYFb~r+q6<1d+#ZwI1Hl!#eec2AIvOmGOZM1HY!UC!p0n)E7RZV z|In>6+sJz4d=vW00@Jz>qi-zQ6al`%f}pGg*PGS=76b*QJbtc5>+3RFpH56a^k5mS zWTg_=oD^MF^H> z7_VP_$c^#};^+nn*C38~*xgTb zcb1vfw$+F?ad??~!+& zb1lX&pk#d)y{W9_hnv=UGEOJ}W&NTm=Q=6pAz!{b;xj26StHV*WTn7IU}>UqR-k71 zemM4+%CFIFC>&WoN4F{Kcd)7e6tAjU`sZR^Og*Vxo-8Kt6RPWXD&krdl@5Jm@?z6U zAtoOn?K~eC4)yN#{Nl!&yG$#E@F4vOxyNu6dU(|8`HV09ltFVOpDEML>d5yx*X~FfNP}&|qUB{hd%e;H5E^ zRVFV%-;$mnYdv~ig+1D`h8LO857Fc*z~na5dek+hwOo3Q61x!SMuolU9@Dz)KGRC2 zELIJ-Od9U#!~b0Tr8FE_Da3m))NlvoQL}h94IWlS;JHYe#(s+osmhaw=T*tzAuEOW z3N4NPHx5NjhGHu_yX2JPWSEe335ukk6!;Rf78=?ZgVsXhPm8tO`D&?Yy#*swK~G;| zTCWu5EK!^ z%QPqyFBy4mxf+a5UqQqAVT`>pCgxjworu|R5(S= z><(mMxG>Cc#PEt=Qk*{1z`Z2~dXyW;aAA61?8H64C0VAjQDRX7h z#Hyu$$Va$4!C1=ywUvH_7zO%`#~>kc>$v4X=g>I~hhtCIFcXc@kbb2hGJrXOD%{TW z54%@84J0EiSQua9%8@X>c1!9c{3xm+8JQS0q_-L{(LwH&6XDrE(Lgd9G=l;LI9_Ob zrq<(41IZ}MkVd!3sNDW5yp`tZm^}>biEDvlevmz&1|y^)8At8HC>f#5l{snnx77xc zF*IHnopM81ljU1>0KON7b*Zd7sfZooEORSoWeHM;{b;}IA z3#bVU_c10Li*As~=6q1-GZqUHeuQLXJt3o2gp~nDdxcly$d7vQ~Tj9$>56HH6%A>Iu{{V{& zLNa2)gy9{e%)iyniE%74kc>Uj9E$=-RJ#23#kqS?9WIve7)sKx22c~|*Bwp5m)2Vt zVKDw274_a%Wd>e5VxR-#tqJriK|U{>qmU2Xu#H?-TKl4b<8Xo68hX&cHJJ0-$`G&O z{)s5oCm2jzYtrv8g+yZdX-G!3UZ=hAvXhrCxO-;`aQ5Q?NG}XXtKuw@uny#)IPbY}{ z^XEzB74r=wV+I&-u%^lL%g~BbS#d%p^adFnCG0JJg!BtQmr#rqA#1&U_S^yeFlx3S@C?xRBn#(ZHQbNHYNE;T2rKyjlt=1(n|Y+zlKfpJ)*nvf%_ zgWRlAV?8K06K4ChDS>b^eZ>8?Mnk0Vi-Eh@!N*ZBARcYZ~yIRoQ7oF zLh$Z5uaKQ*@%r_HcaK(O5YEjra0wuYw9>CVOd>mF+<%BJ8gwpIMJ6O81%)#A2AMlS zdpar?$=o3%W4fLh-^iGpJl!$H6{}(plCgQ1#PFBNdgSGWCwI(K3_>ziqeHAe6sd52 zdwX!o0h#24Yv!x^2|obT1p0NNBlK$*zlg?^UHQ0Ua2^2$uP`tI5JXz(cURw!!~GQF zqs7;469Cas!lenunhmI}^t+Ea!F*52*^#(qK`|PGe1z|!F&gFrf=DaF2_PG9CL9~GbF&5gIddfih zO^Xyi-%+Z%D-|ILHb9UGyJZ_|Pe5&@UjW9H6E_dzimQ6=-nz8`$fw~>S^TulsxsEA z*pfAYA-Z7|qEpsF@p}|G0h=i{UfsoJU|i9dn^(N=`YT7m!HEWj0%`*NmcJ%fl8La$ zk}}pcVnLaKe_%yxYY{r2A^np3NN<~D{j{aK0`AEAAtYlmh8a`H$|_J9K5Mvq@x&Gt zgOH4k$nA-9scbB{CCz{DC{q0*{8n}oLXv0VDU;#KWepY_EF7{qPlY2SgYT9&nEr@~ zbH>E2kxz#!24Q`cf%gD4fqp@&q@(*}xHsR7j-}cCdYR4Ur>C4$^WA@{;O0Du@9}t? zLl^q9aK47+hgZxqZfR=YCB}5H`oGcYdC0OA^ED=4>2?0IGKsHRBPR4)$XAejEz4Jx zGkPy-KLq|+91n2>BS8!fCyuo`SpX8o;8=;{PPBBHa!5*K+>(p}ECtp~Ng1W0!w%ya zp&XAXI4GTY2M47Gl*Ler>XuINcN(mha#6}T`1+qxPD%$Up`?VR1&3Su#rq5AJYV}$ zu0%NnWh!o&!7cdz-}m{Vz!UzD*YBE-1q(Z6IFzMPibOdgB`TECQrbs(3?*fhRZ%)Z z`5WaJlwDEALHQjeP?UvGYC|YG5p>Hae?orN7J>uM zMHX76K73u|14KC%C6ScAQd&Ye4P``>mAR!a{28A8q|}kp3Cc$(wWVx>@-0fnDBE#M SCC8(;%t;xM6S{yH+73vvWl3!Grl%H6X;*wgNnVy$elA7WQ)K(dgpP5&J&=)TtjI1~eXi{c= z-bGfncmZj2+jPq!qI7dAbTi75DUlUmM6S{yH+73vvWl3!Grl%H6X;*wgNnVy$elA7WQ)K(dgpP5&J&=)TtjI1~eXi{c= z-bGfncmZj2+jPq!qI7dAbTi75DUlUmE7aO(j;v+2`aQu zi3=?f@Kg9zj9qBe3y1k^&3vAj&ofoJFt4HpZ^ISO^KPL%L3@Gr2u-3rL;H=vn|MCG z=6QqeFdv%U$n?g>?B;o4@`>4*_RT@wJ2d%`>3<&dzYee( ziS45*>l;=5=V7KH{o;b_igE4hM6o(lcUF1SEGFMfy%^^PX(HNxWn;g{GG3|f$ z$sL@~l-x$#Cl3$@N^hec^d7gn%Ay#{GBk*IV=?jv@Mzws&Z-TwI<)@*|E{s2y^EI9xG literal 0 HcmV?d00001 diff --git a/Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/UIViewController-vXZ-lx-hvc.nib/objects.nib b/Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/UIViewController-vXZ-lx-hvc.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..8d2b39e8a0f576aa6263cd17f530dbc740ec8dfd GIT binary patch literal 916 zcmZ`%%Wl&^6g7{68QzbNKtf@`j%A;cMU+%^T@bsmeVYtS$I*C_)VoZaG;v#}srsTt zfq;dnV$fYv@VM_XKAG;x)?Ka1nTmn+l|$f1j>W)GsA+jX}4X(3pwFLEzOTYhXbB zFRMfQ{i2AH806wcOJ(@^xg}?#2vQ8oI8)htBGy@>Ep4tQfg`KIi;cfbnKUehz$#EI zFnz4baO0Z)I?NQLr`EYDDO0{mByB*IrMAdD>$xf#mCG{OWDs9+UJOF9bq2DqO4H8) zd5RO-BRC>wmpnuqk_U*}7AF>WEcVGA7cLjx%svddX+f! zr{t!MIyF&cs#YLvB?3EMy4xwXA`25L<0*M=Lz;BVb{1p?aZ1dVj>v7qePXt}tN9De&XCH?IqL=9N*iae0rj@x spsq&jOwebhm0ixtDe$SUBrcpY#_OzZu{EN=N>fSe3h z{5nfn$l)myandpLr0RQuGXe2BMdz!H3Ph{8a&wkE0jsYVhh{? z#RA92tqeD+`VYfQLHfZa*Cb`iSBa!`sIb&7xoDsb|t-du>c^+w)BN|ICzJLS5lbj3f9$N+z6xEL?Qn zJjZOH6;2~)Bplr++`}{i0cZ77a?O^R2Hx4kkj!D?fZRpwlBMt?tA(feP)D67V7J9G=wU*+b rPAzsOm@{r=Gq0R6UiFp4AI=%!ab8NAS@KVQANBVC^EkkyWuowX4st+WqY zcKl9k$H8DHkQ6r#RB^*MsNx13C~h1mF5Eam74(dxShkUBdUv{ey1(w8?zPO~pr}l< z88}4vcdxX$5v9oH(Z4A*-(LLS2B*)xR9HL_;bOy;w6C2ntIt(_>n)okyk?K^4v z%WUDRto=>a`Zj7FWYKp~Y|Bjmf zw9y!|`>=oWy`Ga0o0e zCxqh%o+IJDY35H|c7m&>FL@t`YbEmn1d{nWNt-&B30@n48SqBSA3#N_Xx23!kNL{H+v}~rc*{DP!>nPE>}ei)ZV|dIC@OUU(gqkZcywT(xA^HjWoTf>71sik%Sc}N$ZwJSXC!|EBWk?0r0Jffi<(|5ByYZo|4+&3o=u~N(NO1& zEn>uljT0F0UjAR834IVjB($KZno!&HEYi>E%SborOGwvr4(5$zW5HN8cIcDH+ocB5 zHhltVTv#-VmzW2^=&TPSF0806HrO}>ctLO?D9^|JDBfv2eP~zB$X%)?VVmMe)P+$g zN;HauK7#LeXs0kIgYHR=m$zBiQx!e=J7}KQOnhE1tafw`M3*Pdx9AHf{)AGb^BDPU z^4bo47&ob*peq=OE}YsOhuJURrjMg;T!_`kyxG8p$8KR&7!9Qd*gL(sK$cLZdcEH1 z0`64@W9T-QFkv0p+_THUIzs literal 0 HcmV?d00001 diff --git a/Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/vXZ-lx-hvc-view-kh9-bI-dsS.nib/objects.nib b/Build/Products/Debug-iphonesimulator/RsaEncryption.app/Base.lproj/Main.storyboardc/vXZ-lx-hvc-view-kh9-bI-dsS.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..337892d95fe776987c61f935268f5e6644c6d259 GIT binary patch literal 1755 zcmZuy%X8aA7~jSg5#n9m?;f~tVTS$#Bu?9)AyqO_91a{9+4`C+m9_3_m0(VmElZA* zCUM>mC?pL~4&3PUNN?OYz;NTnff;5v!3_?4yS5XP)Smsx+THK<`yRH;+%PZB(m6Os z2zeOS>$ooBdJ|V0SBmR{3?Yx=^ZY}EG^=TxMy+PjSWctODA|hRy{NUH)(_LpRE{GG=CM9IHN zG7#0O*{HsiH!WJ2rU5N@@ILijHXpnPmD_52xLAY$PpC&lWrX?H=uF5RL76Y_H1lST zg}xiK@}?aY<|xbuP0N0(P!SMpCJMDNOtXsAXMdrK1 zLU39L1x#PuRC0J%-I#DF@0uDfJ2yf&_%LsdITaR)(U7`;J_Uk1)EB`Nn}iaZ12jAw z3dSLzpFq#86gR!{tkbaU$7!8!g{Z2H} zdrz^~=X1-lCpcvsQ{2XkI>qZVT&8t|d5rJ;pYIb}OO~xJ*kz{(m^Ae=!b)Z4qdOz0 zKqROQv%Gqm+_k<8b!lAe-Z2G~Fgs&T0lXCz%?WFmBzu;Ho|}Vi3%Te-r+}o~x}jmq zd}X|XxM94CST!C;j1=xEY$}ZPSQhJ%fo(=siHU*#Yx{=mzgxy5 zh%H0*>8|lIVxl#S$MD%O&MV9!#`-q0B&!8k6`Xk<@Ej9@m3kJmJ4z@enzWP1PrzO+Vl95_6J0uh98)qzIxk)9@pkPfukh&i5 z5kqS8el)bHx4U=T?%s`|y74?7e`Y+3xPWxrCU5K;PvT2*?DyG-9^`q$cmkyw#tRCc zQyR|h?HVt3Pjr0tqCL&b7bLrd7W z*&ULV{>gkd)IpE`{@lmGnSP4_n}-aACh4ei>$8 zrSaEk@@+HwF3G-6vmcV^$5!j7u=R5o{t_m?hS6`$=I?3ik8ttNG`ihv{S_v6qU3Ir z{hdbtq)im2*NTQoOEc7`C6~NQJ%`Qv?~wYwIvy#Pi4PL$Qc)je-bGpoxGgC2q)xkN z6jKr-GFSEmPN|U zb4G;Vv=j(3bLOhD16`#tX;a?2YNBRe4#@8NMPuBqvp|dm)FHsh7u=?v@Tb`nsj@i& z7moyjapKdDNS{^;hi+}wj!kQ7tN^<)PKXBqyiFa4cNPIYYTGdntGKBwtva+1REf6rD&WbzM!5;(w2&4n$^b19C0T~ACR(;(QK%5F!SKx zD4CpE21d66MqpVtE z9?%&D2Ou&wZO3~hzBunxG6hX4;SG#qrFc1vwjqm!x+2!FDehkE);Aa6BfYv^GZ5zJ~o9p-#;DO?^it@Jdk2C52b?_|4Ps{S=*)&YuS7k-jSLhE|^Z=WK*K|~&?=b-giD}z`f~v-gG}~%z1sz7JCqOW zuqCaaR%2Wm^oAf>Xh286EcGgA1%6%#gbibTgmb%&Rzextp|P5u@Xy7xx?=fDHL-Hi ZyD$X;vW92_q}{nYa9cZ+FSOVD=wHb~A*28R literal 0 HcmV?d00001 diff --git a/Build/Products/Debug-iphonesimulator/RsaEncryption.app/Info.plist b/Build/Products/Debug-iphonesimulator/RsaEncryption.app/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..553c99423653fd0c346fada922b8d3bb15efd15a GIT binary patch literal 803 zcmah`J8u&~5Z+y0NqA)Km`6eq0tv4I>)Zex0zae^h8(^#C<1a?-;K{p?#13-gz2bg zDJhU5D;+{eNc@KsG>C!Fl`+Hl1zjEqI)A0d5V}xdT-evkv#U5g2x(8h0d*LMHlmK_u#D(^6Z%#dv7SNc1}q6K;e1VAILG zY($*N5wjNwIfP9qcMIkJkHeG1zW*Wz;1-N=BL3Eh| z%Yv(kSvH&6FdBnL)wV4Rkuh^72QBaPadZ{Q^dE5hG zUM_1^=Hi`-St)A|TM4U&j_AkPLgSmWbMrQxZ|l3QYbYZGKrdNuE=u`UkmM)>;q_&QtvNGH484 zLQTZbGxQR@MqB6$`iV=pg6sG`euO1{fj96Q{1(5*TlfS1h(F=a_#6I?e~<~Hk$Yr? ctdW?cYbO?4Y^|a{EARJv&OE!%ZZ2Sdzt8)5 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 XMDAH1fNji$0bHN@>P$axS&{z%=ttLZ literal 0 HcmV?d00001 diff --git a/RsaEncryption.xcodeproj/project.pbxproj b/RsaEncryption.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6293f39 --- /dev/null +++ b/RsaEncryption.xcodeproj/project.pbxproj @@ -0,0 +1,373 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 4644B4741A73D6A300DB4B59 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B4731A73D6A300DB4B59 /* main.m */; }; + 4644B4771A73D6A300DB4B59 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B4761A73D6A300DB4B59 /* AppDelegate.m */; }; + 4644B47A1A73D6A300DB4B59 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B4791A73D6A300DB4B59 /* ViewController.m */; }; + 4644B47D1A73D6A300DB4B59 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4644B47B1A73D6A300DB4B59 /* Main.storyboard */; }; + 4644B47F1A73D6A300DB4B59 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4644B47E1A73D6A300DB4B59 /* Images.xcassets */; }; + 4644B4991A73D6B200DB4B59 /* CryptoUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B4981A73D6B200DB4B59 /* CryptoUtil.m */; }; + 4644B49C1A73D6DC00DB4B59 /* Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B49B1A73D6DC00DB4B59 /* Base64.m */; }; + 4644B49F1A73D6E800DB4B59 /* RsaHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B49E1A73D6E800DB4B59 /* RsaHelper.m */; }; + 4644B4AB1A73DCBC00DB4B59 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4644B4AA1A73DCBC00DB4B59 /* CoreGraphics.framework */; }; + 4644B4AF1A73DDE700DB4B59 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4644B4A81A73DCB700DB4B59 /* Foundation.framework */; }; + 4644B4B01A73DDEE00DB4B59 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4644B4A61A73DCB200DB4B59 /* UIKit.framework */; }; + 4644B4B11A73DDF400DB4B59 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4644B4A41A73DCAA00DB4B59 /* Security.framework */; }; + 4644B4B41A73DE3600DB4B59 /* KeychainUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B4B31A73DE3600DB4B59 /* KeychainUtil.m */; }; + 4644B4BA1A73E04700DB4B59 /* KeyHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4644B4B91A73E04700DB4B59 /* KeyHelper.m */; }; + 4647D1E61A82592600BA9256 /* AESEncryption.m in Sources */ = {isa = PBXBuildFile; fileRef = 4647D1E51A82592600BA9256 /* AESEncryption.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 4644B46E1A73D6A300DB4B59 /* RsaEncryption.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RsaEncryption.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 4644B4721A73D6A300DB4B59 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4644B4731A73D6A300DB4B59 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 4644B4751A73D6A300DB4B59 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 4644B4761A73D6A300DB4B59 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 4644B4781A73D6A300DB4B59 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 4644B4791A73D6A300DB4B59 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 4644B47C1A73D6A300DB4B59 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 4644B47E1A73D6A300DB4B59 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 4644B4971A73D6B200DB4B59 /* CryptoUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CryptoUtil.h; sourceTree = ""; }; + 4644B4981A73D6B200DB4B59 /* CryptoUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CryptoUtil.m; sourceTree = ""; }; + 4644B49A1A73D6DC00DB4B59 /* Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Base64.h; sourceTree = ""; }; + 4644B49B1A73D6DC00DB4B59 /* Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Base64.m; sourceTree = ""; }; + 4644B49D1A73D6E800DB4B59 /* RsaHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RsaHelper.h; sourceTree = ""; }; + 4644B49E1A73D6E800DB4B59 /* RsaHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RsaHelper.m; sourceTree = ""; }; + 4644B4A41A73DCAA00DB4B59 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 4644B4A61A73DCB200DB4B59 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 4644B4A81A73DCB700DB4B59 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 4644B4AA1A73DCBC00DB4B59 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 4644B4B21A73DE3600DB4B59 /* KeychainUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeychainUtil.h; sourceTree = ""; }; + 4644B4B31A73DE3600DB4B59 /* KeychainUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeychainUtil.m; sourceTree = ""; }; + 4644B4B81A73E04700DB4B59 /* KeyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyHelper.h; sourceTree = ""; }; + 4644B4B91A73E04700DB4B59 /* KeyHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KeyHelper.m; sourceTree = ""; }; + 4647D1E41A82592600BA9256 /* AESEncryption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AESEncryption.h; sourceTree = ""; }; + 4647D1E51A82592600BA9256 /* AESEncryption.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AESEncryption.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4644B46B1A73D6A300DB4B59 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4644B4B11A73DDF400DB4B59 /* Security.framework in Frameworks */, + 4644B4B01A73DDEE00DB4B59 /* UIKit.framework in Frameworks */, + 4644B4AF1A73DDE700DB4B59 /* Foundation.framework in Frameworks */, + 4644B4AB1A73DCBC00DB4B59 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2E17377C1AA64D700039A077 /* Helpers */ = { + isa = PBXGroup; + children = ( + 4644B4B81A73E04700DB4B59 /* KeyHelper.h */, + 4644B4B91A73E04700DB4B59 /* KeyHelper.m */, + 4644B4B21A73DE3600DB4B59 /* KeychainUtil.h */, + 4644B4B31A73DE3600DB4B59 /* KeychainUtil.m */, + 4644B49A1A73D6DC00DB4B59 /* Base64.h */, + 4644B49B1A73D6DC00DB4B59 /* Base64.m */, + 4644B4971A73D6B200DB4B59 /* CryptoUtil.h */, + 4644B4981A73D6B200DB4B59 /* CryptoUtil.m */, + ); + name = Helpers; + sourceTree = ""; + }; + 4644B4651A73D6A300DB4B59 = { + isa = PBXGroup; + children = ( + 4644B4AA1A73DCBC00DB4B59 /* CoreGraphics.framework */, + 4644B4A81A73DCB700DB4B59 /* Foundation.framework */, + 4644B4A61A73DCB200DB4B59 /* UIKit.framework */, + 4644B4A41A73DCAA00DB4B59 /* Security.framework */, + 4644B4701A73D6A300DB4B59 /* Encryption */, + 4644B46F1A73D6A300DB4B59 /* Products */, + ); + sourceTree = ""; + }; + 4644B46F1A73D6A300DB4B59 /* Products */ = { + isa = PBXGroup; + children = ( + 4644B46E1A73D6A300DB4B59 /* RsaEncryption.app */, + ); + name = Products; + sourceTree = ""; + }; + 4644B4701A73D6A300DB4B59 /* Encryption */ = { + isa = PBXGroup; + children = ( + 4644B4751A73D6A300DB4B59 /* AppDelegate.h */, + 4644B4761A73D6A300DB4B59 /* AppDelegate.m */, + 4644B4781A73D6A300DB4B59 /* ViewController.h */, + 4644B4791A73D6A300DB4B59 /* ViewController.m */, + 4644B47B1A73D6A300DB4B59 /* Main.storyboard */, + 4644B47E1A73D6A300DB4B59 /* Images.xcassets */, + 4647D1E71A82595400BA9256 /* AES */, + 4644B4A01A73D6FE00DB4B59 /* RSA */, + 2E17377C1AA64D700039A077 /* Helpers */, + 4644B4711A73D6A300DB4B59 /* Supporting Files */, + ); + name = Encryption; + path = RsaEncryption; + sourceTree = ""; + }; + 4644B4711A73D6A300DB4B59 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 4644B4721A73D6A300DB4B59 /* Info.plist */, + 4644B4731A73D6A300DB4B59 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 4644B4A01A73D6FE00DB4B59 /* RSA */ = { + isa = PBXGroup; + children = ( + 4644B49D1A73D6E800DB4B59 /* RsaHelper.h */, + 4644B49E1A73D6E800DB4B59 /* RsaHelper.m */, + ); + name = RSA; + sourceTree = ""; + }; + 4647D1E71A82595400BA9256 /* AES */ = { + isa = PBXGroup; + children = ( + 4647D1E41A82592600BA9256 /* AESEncryption.h */, + 4647D1E51A82592600BA9256 /* AESEncryption.m */, + ); + name = AES; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 4644B46D1A73D6A300DB4B59 /* RsaEncryption */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4644B4911A73D6A300DB4B59 /* Build configuration list for PBXNativeTarget "RsaEncryption" */; + buildPhases = ( + 4644B46A1A73D6A300DB4B59 /* Sources */, + 4644B46B1A73D6A300DB4B59 /* Frameworks */, + 4644B46C1A73D6A300DB4B59 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RsaEncryption; + productName = RsaEncryption; + productReference = 4644B46E1A73D6A300DB4B59 /* RsaEncryption.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 4644B4661A73D6A300DB4B59 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = "Kuveyt Türk"; + TargetAttributes = { + 4644B46D1A73D6A300DB4B59 = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = 4644B4691A73D6A300DB4B59 /* Build configuration list for PBXProject "RsaEncryption" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 4644B4651A73D6A300DB4B59; + productRefGroup = 4644B46F1A73D6A300DB4B59 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 4644B46D1A73D6A300DB4B59 /* RsaEncryption */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 4644B46C1A73D6A300DB4B59 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4644B47D1A73D6A300DB4B59 /* Main.storyboard in Resources */, + 4644B47F1A73D6A300DB4B59 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 4644B46A1A73D6A300DB4B59 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4644B47A1A73D6A300DB4B59 /* ViewController.m in Sources */, + 4644B49C1A73D6DC00DB4B59 /* Base64.m in Sources */, + 4647D1E61A82592600BA9256 /* AESEncryption.m in Sources */, + 4644B4BA1A73E04700DB4B59 /* KeyHelper.m in Sources */, + 4644B4771A73D6A300DB4B59 /* AppDelegate.m in Sources */, + 4644B4B41A73DE3600DB4B59 /* KeychainUtil.m in Sources */, + 4644B4991A73D6B200DB4B59 /* CryptoUtil.m in Sources */, + 4644B49F1A73D6E800DB4B59 /* RsaHelper.m in Sources */, + 4644B4741A73D6A300DB4B59 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 4644B47B1A73D6A300DB4B59 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 4644B47C1A73D6A300DB4B59 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 4644B48F1A73D6A300DB4B59 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 4644B4901A73D6A300DB4B59 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 4644B4921A73D6A300DB4B59 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + INFOPLIST_FILE = RsaEncryption/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 4644B4931A73D6A300DB4B59 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + INFOPLIST_FILE = RsaEncryption/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 4644B4691A73D6A300DB4B59 /* Build configuration list for PBXProject "RsaEncryption" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4644B48F1A73D6A300DB4B59 /* Debug */, + 4644B4901A73D6A300DB4B59 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4644B4911A73D6A300DB4B59 /* Build configuration list for PBXNativeTarget "RsaEncryption" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4644B4921A73D6A300DB4B59 /* Debug */, + 4644B4931A73D6A300DB4B59 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 4644B4661A73D6A300DB4B59 /* Project object */; +} diff --git a/RsaEncryption.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/RsaEncryption.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..d154c12 --- /dev/null +++ b/RsaEncryption.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/RsaEncryption.xcodeproj/project.xcworkspace/xcuserdata/kurumsalmimari.xcuserdatad/UserInterfaceState.xcuserstate b/RsaEncryption.xcodeproj/project.xcworkspace/xcuserdata/kurumsalmimari.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..017dd11469c3b2fe8f70a6763e71476102643a2e GIT binary patch literal 23457 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 literal 0 HcmV?d00001 diff --git a/RsaEncryption.xcodeproj/project.xcworkspace/xcuserdata/ozgur.xcuserdatad/UserInterfaceState.xcuserstate b/RsaEncryption.xcodeproj/project.xcworkspace/xcuserdata/ozgur.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..d6196db12e2f8db25cd5dbb5e2b2b5dea460205f GIT binary patch literal 22776 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 ZeYLOGzFqsFD||zVpOR(X;hWlz{~z)|-tYhb literal 0 HcmV?d00001 diff --git a/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/RsaEncryption.xcscheme b/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/RsaEncryption.xcscheme new file mode 100644 index 0000000..a16ce2e --- /dev/null +++ b/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/RsaEncryption.xcscheme @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/xcschememanagement.plist b/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..3756ccc --- /dev/null +++ b/RsaEncryption.xcodeproj/xcuserdata/kurumsalmimari.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,27 @@ + + + + + SchemeUserState + + RsaEncryption.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 4644B46D1A73D6A300DB4B59 + + primary + + + 4644B4861A73D6A300DB4B59 + + primary + + + + + diff --git a/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/RsaEncryption.xcscheme b/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/RsaEncryption.xcscheme new file mode 100644 index 0000000..f87d6a6 --- /dev/null +++ b/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/RsaEncryption.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/xcschememanagement.plist b/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..36b6b10 --- /dev/null +++ b/RsaEncryption.xcodeproj/xcuserdata/ozgur.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + RsaEncryption.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 4644B46D1A73D6A300DB4B59 + + primary + + + + + diff --git a/RsaEncryption/AESEncryption.h b/RsaEncryption/AESEncryption.h new file mode 100644 index 0000000..ed007ad --- /dev/null +++ b/RsaEncryption/AESEncryption.h @@ -0,0 +1,19 @@ +// +// AESEncryption.h +// +// Created by Ozgur Sahin on 01/07/14. +// + +#import +#import + +@interface AESEncryption : NSObject + ++ (NSData *)AES256Encrypt:(NSData*)data withKey:(NSString *)key iv:(NSData**)iv + salt:(NSData**)salt + error:(NSError**)error; + + ++(NSData *)AES256Decrypt:(NSData*)data withKey:(NSString *)key iv:(NSString*)ivString; ++(NSData*)randomDataOfLength:(size_t)length; +@end diff --git a/RsaEncryption/AESEncryption.m b/RsaEncryption/AESEncryption.m new file mode 100644 index 0000000..c1b8657 --- /dev/null +++ b/RsaEncryption/AESEncryption.m @@ -0,0 +1,87 @@ +// +// AESEncryption.m +// +// Created by Ozgur Sahin on 01/07/14. +// + +#import "AESEncryption.h" +#import "Base64.h" + +@implementation AESEncryption + ++ (NSData *)AES256Encrypt:(NSData*)data withKey:(NSString *)key iv:(NSData**)iv + salt:(NSData**)salt + error:(NSError**)error +{ + + char keyPtr[kCCKeySizeAES256+1]; + bzero(keyPtr, sizeof(keyPtr)); + + + [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; + + NSUInteger dataLength = [data length]; + *iv= [self randomDataOfLength:kCCBlockSizeAES128]; + + size_t bufferSize = dataLength + kCCBlockSizeAES128; + void *buffer = malloc(bufferSize); + + size_t numBytesEncrypted = 0; + CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, + keyPtr, + kCCKeySizeAES256, + (*iv).bytes , + data.bytes, dataLength, /* input */ + buffer, + bufferSize, /* output */ + &numBytesEncrypted); + if (cryptStatus == kCCSuccess) { + return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; + } + + free(buffer); + return nil; +} + ++ (NSData*)randomDataOfLength:(size_t)length +{ + NSMutableData* data=[NSMutableData dataWithLength:length]; + + int result= SecRandomCopyBytes(kSecRandomDefault, length, data.mutableBytes); + NSAssert(result==0, @"Unable to generate random bytes:%d",errno); + return data; +} + ++(NSData *)AES256Decrypt:(NSData*)data withKey:(NSString *)key iv:(NSString*)ivString +{ + + NSData* keyData=[NSData dataWithBase64EncodedString:key]; + NSUInteger dataLength = [data length]; + + size_t bufferSize = dataLength + kCCBlockSizeAES128; + void *buffer = malloc(bufferSize); + + size_t numBytesDecrypted = 0; + + //IV init + NSData* ivData=[NSData dataWithBase64EncodedString:ivString]; + + CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, + kCCOptionPKCS7Padding , + [keyData bytes], + kCCKeySizeAES256, + [ivData bytes], + [data bytes], dataLength, + buffer, bufferSize, + &numBytesDecrypted); + + if (cryptStatus == kCCSuccess) { + return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; + } + + free(buffer); + return nil; +} + + +@end diff --git a/RsaEncryption/AppDelegate.h b/RsaEncryption/AppDelegate.h new file mode 100644 index 0000000..d3ecd01 --- /dev/null +++ b/RsaEncryption/AppDelegate.h @@ -0,0 +1,16 @@ +// +// AppDelegate.h +// RsaEncryption +// +// Created by Ozgur Sahin on 24/01/15. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/RsaEncryption/AppDelegate.m b/RsaEncryption/AppDelegate.m new file mode 100644 index 0000000..7374e6c --- /dev/null +++ b/RsaEncryption/AppDelegate.m @@ -0,0 +1,44 @@ +// +// AppDelegate.m +// RsaEncryption +// +// Created by Ozgur Sahin on 24/01/15. +// + +#import "AppDelegate.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + +@end diff --git a/RsaEncryption/Base.lproj/Main.storyboard b/RsaEncryption/Base.lproj/Main.storyboard new file mode 100644 index 0000000..d912f9d --- /dev/null +++ b/RsaEncryption/Base.lproj/Main.storyboard @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/RsaEncryption/Base64.h b/RsaEncryption/Base64.h new file mode 100755 index 0000000..cbaeb6e --- /dev/null +++ b/RsaEncryption/Base64.h @@ -0,0 +1,53 @@ +// +// Base64.h +// +// Version 1.1 +// +// Created by Nick Lockwood on 12/01/2012. +// Copyright (C) 2012 Charcoal Design +// +// Distributed under the permissive zlib License +// Get the latest version from here: +// +// https://github.com/nicklockwood/Base64 +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// + +#import + + +@interface NSData (Base64) + ++ (NSData *)dataWithBase64EncodedString:(NSString *)string; +- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth; +- (NSString *)base64EncodedString; + +@end + + +@interface NSString (Base64) + ++ (NSString *)stringWithBase64EncodedString:(NSString *)string; +- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth; +- (NSString *)base64EncodedString; +- (NSString *)base64DecodedString; +- (NSData *)base64DecodedData; + +@end \ No newline at end of file diff --git a/RsaEncryption/Base64.m b/RsaEncryption/Base64.m new file mode 100755 index 0000000..b3d73db --- /dev/null +++ b/RsaEncryption/Base64.m @@ -0,0 +1,202 @@ +// +// Base64.m +// +// Version 1.1 +// +// Created by Nick Lockwood on 12/01/2012. +// Copyright (C) 2012 Charcoal Design +// +// Distributed under the permissive zlib License +// Get the latest version from here: +// +// https://github.com/nicklockwood/Base64 +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// + +#import "Base64.h" + + +#import +#if !__has_feature(objc_arc) +#error This library requires automatic reference counting +#endif + + +@implementation NSData (Base64) + ++ (NSData *)dataWithBase64EncodedString:(NSString *)string +{ + const char lookup[] = + { + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 62, 99, 99, 99, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 99, 99, 99, 99, 99, 99, + 99, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 99, 99, 99, 99, 99, + 99, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 99, 99, 99, 99, 99 + }; + + NSData *inputData = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; + long long inputLength = [inputData length]; + const unsigned char *inputBytes = [inputData bytes]; + + long long maxOutputLength = (inputLength / 4 + 1) * 3; + NSMutableData *outputData = [NSMutableData dataWithLength:maxOutputLength]; + unsigned char *outputBytes = (unsigned char *)[outputData mutableBytes]; + + int accumulator = 0; + long long outputLength = 0; + unsigned char accumulated[] = {0, 0, 0, 0}; + for (long long i = 0; i < inputLength; i++) + { + unsigned char decoded = lookup[inputBytes[i] & 0x7F]; + if (decoded != 99) + { + accumulated[accumulator] = decoded; + if (accumulator == 3) + { + outputBytes[outputLength++] = (accumulated[0] << 2) | (accumulated[1] >> 4); + outputBytes[outputLength++] = (accumulated[1] << 4) | (accumulated[2] >> 2); + outputBytes[outputLength++] = (accumulated[2] << 6) | accumulated[3]; + } + accumulator = (accumulator + 1) % 4; + } + } + + //handle left-over data + if (accumulator > 0) outputBytes[outputLength] = (accumulated[0] << 2) | (accumulated[1] >> 4); + if (accumulator > 1) outputBytes[++outputLength] = (accumulated[1] << 4) | (accumulated[2] >> 2); + if (accumulator > 2) outputLength++; + + //truncate data to match actual output length + outputData.length = outputLength; + return outputLength? outputData: nil; +} + +- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth +{ + //ensure wrapWidth is a multiple of 4 + wrapWidth = (wrapWidth / 4) * 4; + + const char lookup[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + long long inputLength = [self length]; + const unsigned char *inputBytes = [self bytes]; + + long long maxOutputLength = (inputLength / 3 + 1) * 4; + maxOutputLength += wrapWidth? (maxOutputLength / wrapWidth) * 2: 0; + unsigned char *outputBytes = (unsigned char *)malloc(maxOutputLength); + + long long i; + long long outputLength = 0; + for (i = 0; i < inputLength - 2; i += 3) + { + outputBytes[outputLength++] = lookup[(inputBytes[i] & 0xFC) >> 2]; + outputBytes[outputLength++] = lookup[((inputBytes[i] & 0x03) << 4) | ((inputBytes[i + 1] & 0xF0) >> 4)]; + outputBytes[outputLength++] = lookup[((inputBytes[i + 1] & 0x0F) << 2) | ((inputBytes[i + 2] & 0xC0) >> 6)]; + outputBytes[outputLength++] = lookup[inputBytes[i + 2] & 0x3F]; + + //add line break + if (wrapWidth && (outputLength + 2) % (wrapWidth + 2) == 0) + { + outputBytes[outputLength++] = '\r'; + outputBytes[outputLength++] = '\n'; + } + } + + //handle left-over data + if (i == inputLength - 2) + { + // = terminator + outputBytes[outputLength++] = lookup[(inputBytes[i] & 0xFC) >> 2]; + outputBytes[outputLength++] = lookup[((inputBytes[i] & 0x03) << 4) | ((inputBytes[i + 1] & 0xF0) >> 4)]; + outputBytes[outputLength++] = lookup[(inputBytes[i + 1] & 0x0F) << 2]; + outputBytes[outputLength++] = '='; + } + else if (i == inputLength - 1) + { + // == terminator + outputBytes[outputLength++] = lookup[(inputBytes[i] & 0xFC) >> 2]; + outputBytes[outputLength++] = lookup[(inputBytes[i] & 0x03) << 4]; + outputBytes[outputLength++] = '='; + outputBytes[outputLength++] = '='; + } + + if (outputLength >= 4) + { + //truncate data to match actual output length + outputBytes = realloc(outputBytes, outputLength); + return [[NSString alloc] initWithBytesNoCopy:outputBytes + length:outputLength + encoding:NSASCIIStringEncoding + freeWhenDone:YES]; + } + else if (outputBytes) + { + free(outputBytes); + } + return nil; +} + +- (NSString *)base64EncodedString +{ + return [self base64EncodedStringWithWrapWidth:0]; +} + +@end + + +@implementation NSString (Base64) + ++ (NSString *)stringWithBase64EncodedString:(NSString *)string +{ + NSData *data = [NSData dataWithBase64EncodedString:string]; + if (data) + { + return [[self alloc] initWithData:data encoding:NSUTF8StringEncoding]; + } + return nil; +} + +- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth +{ + NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; + return [data base64EncodedStringWithWrapWidth:wrapWidth]; +} + +- (NSString *)base64EncodedString +{ + NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]; + return [data base64EncodedString]; +} + +- (NSString *)base64DecodedString +{ + return [NSString stringWithBase64EncodedString:self]; +} + +- (NSData *)base64DecodedData +{ + return [NSData dataWithBase64EncodedString:self]; +} + +@end diff --git a/RsaEncryption/CryptoUtil.h b/RsaEncryption/CryptoUtil.h new file mode 100755 index 0000000..22a95c5 --- /dev/null +++ b/RsaEncryption/CryptoUtil.h @@ -0,0 +1,154 @@ +// +// CryptoUtil.h +// iPhoneLib, +// Helper Functions and Classes for Ordinary Application Development on iPhone +// +// Created by meinside on 10. 01. 16. +// +// last update: 10.07.21. +// + +#pragma once +#import + +//needs: Security.framework + + +@interface CryptoUtil : NSObject { + +} + ++ (BOOL)generateRSAKeyWithKeySizeInBits:(int)keyBits publicKeyTag:(NSString*)publicTag privateKeyTag:(NSString*)privateTag; + +/* + * generate a public key in ASN.1 format from given modulus and exponent + * + * reference: https://devforums.apple.com/message/21365 + + resulting byte array for example: + + //64 bytes + { + 0x30, //SEQUENCE tag: fixed element + 0x47, //total length + + 0x02, //INTEGER tag: fixed element + 0x40, //modulus length + + //modulus array starts here + 0x78, 0x74, 0xE4, 0xD6, 0xF2, 0x99, 0xDD, 0x4C, + 0x3B, 0xFB, 0xE1, 0x15, 0x92, 0x5A, 0x65, 0x40, + 0xF3, 0x3F, 0xAB, 0xEF, 0x78, 0x4B, 0xF5, 0xCA, + 0x97, 0x69, 0xAF, 0xB5, 0xFF, 0xC1, 0x0C, 0xE0, + 0x39, 0x69, 0x68, 0x01, 0x32, 0x3A, 0xF6, 0xB8, + 0xCA, 0xC4, 0xC6, 0x7F, 0xA2, 0x4A, 0x21, 0xB2, + 0xC1, 0xE7, 0x8C, 0x7B, 0x3B, 0x64, 0x77, 0x0D, + 0xF6, 0xE1, 0x93, 0x04, 0xC0, 0xB9, 0x5D, 0x83, + //modulus array ends here + + 0x02, //INTEGER tag: fixed element + 0x03, //exponent length + + 0x01, 0x00, 0x01, //exponent array + }; + //128 bytes + { + 0x30, //SEQUENCE tag: fixed element + 0x81, 137, //total length (if length >= 0x80, it should be represented as 'positive' by appending 0x81 ahead of it) + + 0x02, //INTEGER tag: fixed element + 0x81, 129, //modulus length (same as above) + + //modulus array starts here + 0x00, //if first byte of modulus array >= 0x80, it should be represented as 'positive' by inserting 0x00 here) + 0x9F, 0x8C, 0x20, 0x2F, 0xDB, 0xF9, 0xE8, 0x02, + 0x59, 0x0B, 0xC6, 0x36, 0x56, 0x34, 0x7C, 0x4F, + 0x4F, 0x03, 0x7C, 0x2F, 0x06, 0x0B, 0x3D, 0xC5, + 0x53, 0x7C, 0x92, 0xD7, 0x2B, 0xF9, 0xCB, 0xBF, + 0xB2, 0x17, 0xEE, 0x1C, 0xA1, 0x19, 0x0D, 0xC6, + 0xC9, 0xF7, 0xF5, 0x85, 0xC7, 0xB3, 0xBE, 0x8D, + 0x28, 0x2E, 0x8E, 0xC9, 0x80, 0x39, 0x60, 0x3B, + 0x31, 0xFE, 0x1D, 0xAB, 0x28, 0x55, 0x01, 0x0B, + 0x43, 0xD6, 0x55, 0xAE, 0xB1, 0x32, 0xB1, 0xE3, + 0x1A, 0x8A, 0xD1, 0xC5, 0x4A, 0x17, 0x42, 0xC3, + 0x07, 0x16, 0xF1, 0x00, 0xB1, 0x10, 0x00, 0x3C, + 0x6D, 0x68, 0xCB, 0x95, 0x3E, 0x94, 0x12, 0xBD, + 0x41, 0x03, 0xDA, 0x11, 0x1B, 0xE6, 0xD5, 0x0A, + 0xF3, 0x6D, 0xA8, 0x0D, 0xAF, 0x69, 0xB4, 0xC6, + 0x07, 0x0C, 0xC6, 0x62, 0x1C, 0x87, 0xB0, 0x05, + 0x60, 0xFD, 0xDA, 0x6D, 0xD2, 0x43, 0x6F, 0x41, + //modulus array ends here + + 0x02, //INTEGER tag: fixed element + 0x03, //exponent length + + 0x01, 0x00, 0x01, //exponent array + }; + //256 bytes + { + 0x30, //SEQUENCE tag: fixed element + 0x82, 0x01, 0x0A, //total length (if length >= 0x0100, it should be represented as 'positive' by appending 0x82 ahead of it) + + 0x02, //INTEGER tag: fixed element + 0x82, 0x01, 0x01, //modulus length (same as above) + + //modulus array starts here + 0x00, //if first byte of modulus array >= 0x80, it should be represented as 'positive' by inserting 0x00 here) + 0xA3, 0xDD, 0x97, 0xC9, 0x15, 0x3B, 0xF9, 0xE4, + 0xE7, 0x1C, 0xE2, 0x82, 0x10, 0xD8, 0x81, 0xD5, + 0x7F, 0x04, 0x2B, 0xE4, 0xE3, 0x2B, 0xF3, 0x71, + 0x67, 0x1F, 0xC9, 0xC8, 0x55, 0x43, 0xCF, 0x32, + 0x66, 0x81, 0x45, 0xF1, 0xBC, 0xCE, 0x90, 0x54, + 0x8D, 0xD9, 0x79, 0xD6, 0xB1, 0x45, 0xF7, 0xD5, + 0xE5, 0xA3, 0x21, 0xAC, 0xCC, 0x14, 0xE0, 0x54, + 0xB3, 0x89, 0xE5, 0x6D, 0xBD, 0x4F, 0x30, 0xDB, + 0xE2, 0x0D, 0x6E, 0x97, 0x64, 0x33, 0x60, 0x63, + 0x81, 0x7E, 0x36, 0xFC, 0x3A, 0x85, 0xD2, 0xAF, + 0xD5, 0x3A, 0xA8, 0xE0, 0x36, 0x27, 0xFA, 0x4C, + 0x75, 0xEF, 0xC0, 0xC2, 0x47, 0xA6, 0xC9, 0xD9, + 0x8C, 0xCB, 0x92, 0x70, 0xEA, 0xF5, 0xB7, 0x68, + 0x4B, 0xF5, 0x33, 0xC2, 0xDB, 0x8E, 0x2F, 0xDE, + 0x91, 0xCC, 0x75, 0x30, 0x7C, 0x75, 0x08, 0x76, + 0x4D, 0xE8, 0x98, 0x6F, 0x4A, 0x61, 0x66, 0x29, + 0x19, 0x38, 0x8D, 0x32, 0xC2, 0x5E, 0x6E, 0xB8, + 0xE1, 0xD0, 0xE8, 0xBD, 0x39, 0xEF, 0x02, 0x76, + 0x48, 0x09, 0xE1, 0xCC, 0xD6, 0xA9, 0x4A, 0x33, + 0xAF, 0xC2, 0x53, 0x7C, 0x16, 0xF1, 0xC5, 0x96, + 0x1B, 0xB9, 0x9B, 0x23, 0x86, 0x78, 0xC3, 0x5D, + 0x2A, 0x43, 0xFF, 0x57, 0x64, 0x55, 0x05, 0xC9, + 0x2C, 0x21, 0xEF, 0x99, 0x74, 0x4F, 0x6B, 0x8D, + 0x13, 0x65, 0xD3, 0x1B, 0x63, 0x24, 0xA7, 0x84, + 0x0F, 0xCA, 0x59, 0x06, 0xE4, 0x37, 0x28, 0x1B, + 0xA1, 0xA9, 0xC4, 0x25, 0x69, 0x03, 0x48, 0x8B, + 0x2B, 0x78, 0x4E, 0x6A, 0xB3, 0xE1, 0x4A, 0xC4, + 0x64, 0xF6, 0x2C, 0x2D, 0x5D, 0x0D, 0x6C, 0x46, + 0xC8, 0xC3, 0x4D, 0x68, 0x03, 0x7A, 0x67, 0xFC, + 0xBE, 0x0F, 0xBB, 0x3C, 0x06, 0x20, 0xE3, 0xC4, + 0x90, 0x62, 0x9F, 0x22, 0xF2, 0xD4, 0x7F, 0xE3, + 0x6A, 0x38, 0x7B, 0x6E, 0xF7, 0x58, 0x80, 0xAF, + //modulus array ends here + + 0x02, //INTEGER tag: fixed element + 0x03, //exponent length + + 0x01, 0x00, 0x01, //exponent array + }; + */ ++ (NSData*)generateRSAPublicKeyWithModulus:(NSData*)modulus exponent:(NSData*)exponent; + ++ (BOOL)saveRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag overwrite:(BOOL)overwrite; + ++ (BOOL)updateRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag; + ++ (SecKeyRef)loadRSAPublicKeyRefWithAppTag:(NSString*)appTag; + ++ (NSData*)encryptString:(NSString*)original RSAPublicKey:(SecKeyRef)publicKey padding:(SecPadding)padding; + ++ (BOOL)deleteRSAPublicKeyWithAppTag:(NSString*)appTag; + ++ (SecKeyRef)RSAPublicKeyRefFromBase64String:(NSString *)key withTag:(NSString *)tag; + ++ (NSData*)decryptString:(NSString*)encryptedString RSAPrivateKey:(SecKeyRef)privateKey padding:(SecPadding)padding; + ++ (SecKeyRef)getPublicKeyFromBase64String:(NSString*)s_key withTag:(NSString *)tag; +@end diff --git a/RsaEncryption/CryptoUtil.m b/RsaEncryption/CryptoUtil.m new file mode 100755 index 0000000..67a8ad0 --- /dev/null +++ b/RsaEncryption/CryptoUtil.m @@ -0,0 +1,464 @@ +// +// CryptoUtil.m +// iPhoneLib, +// Helper Functions and Classes for Ordinary Application Development on iPhone +// +// Created by meinside on 10. 01. 16. +// +// last update: 12.07.16. +// + +#import "CryptoUtil.h" + +#import "KeychainUtil.h" + +#import "Base64.h" + +@implementation CryptoUtil + +#pragma mark - +#pragma mark RSA key-related functions + ++ (BOOL)generateRSAKeyWithKeySizeInBits:(int)keyBits publicKeyTag:(NSString*)publicTag privateKeyTag:(NSString*)privateTag +{ + NSMutableDictionary* privateKeyAttr = [[NSMutableDictionary alloc] init]; + NSMutableDictionary* publicKeyAttr = [[NSMutableDictionary alloc] init]; + NSMutableDictionary* keyPairAttr = [[NSMutableDictionary alloc] init]; + + NSData* publicTagData = [publicTag dataUsingEncoding:NSUTF8StringEncoding]; + NSData* privateTagData = [privateTag dataUsingEncoding:NSUTF8StringEncoding]; + + SecKeyRef publicKey = NULL; + SecKeyRef privateKey = NULL; + + [keyPairAttr setObject:(__bridge id)kSecAttrKeyTypeRSA + forKey:(__bridge id)kSecAttrKeyType]; + [keyPairAttr setObject:[NSNumber numberWithInt:keyBits] + forKey:(__bridge id)kSecAttrKeySizeInBits]; + + [privateKeyAttr setObject:[NSNumber numberWithBool:YES] + forKey:(__bridge id)kSecAttrIsPermanent]; + [privateKeyAttr setObject:privateTagData + forKey:(__bridge id)kSecAttrApplicationTag]; + + [publicKeyAttr setObject:[NSNumber numberWithBool:YES] + forKey:(__bridge id)kSecAttrIsPermanent]; + [publicKeyAttr setObject:publicTagData + forKey:(__bridge id)kSecAttrApplicationTag]; + + [keyPairAttr setObject:privateKeyAttr + forKey:(__bridge id)kSecPrivateKeyAttrs]; + [keyPairAttr setObject:publicKeyAttr + forKey:(__bridge id)kSecPublicKeyAttrs]; + + OSStatus status = SecKeyGeneratePair((__bridge CFDictionaryRef)keyPairAttr, &publicKey, &privateKey); + + NSLog(@"result = %@", [KeychainUtil fetchStatus:status]); + + + if(publicKey) CFRelease(publicKey); + if(privateKey) CFRelease(privateKey); + + return status == noErr; +} + ++ (NSData*)generateRSAPublicKeyWithModulus:(NSData*)modulus exponent:(NSData*)exponent +{ + const uint8_t DEFAULT_EXPONENT[] = {0x01, 0x00, 0x01,}; //default: 65537 + const uint8_t UNSIGNED_FLAG_FOR_BYTE = 0x81; + const uint8_t UNSIGNED_FLAG_FOR_BYTE2 = 0x82; + const uint8_t UNSIGNED_FLAG_FOR_BIGNUM = 0x00; + const uint8_t SEQUENCE_TAG = 0x30; + const uint8_t INTEGER_TAG = 0x02; + + uint8_t* modulusBytes = (uint8_t*)[modulus bytes]; + uint8_t* exponentBytes = (uint8_t*)(exponent == nil ? DEFAULT_EXPONENT : [exponent bytes]); + + //(1) calculate lengths + //- length of modulus + int lenMod = [modulus length]; + if(modulusBytes[0] >= 0x80) + lenMod ++; //place for UNSIGNED_FLAG_FOR_BIGNUM + int lenModHeader = 2 + (lenMod >= 0x80 ? 1 : 0) + (lenMod >= 0x0100 ? 1 : 0); + //- length of exponent + int lenExp = exponent == nil ? sizeof(DEFAULT_EXPONENT) : [exponent length]; + int lenExpHeader = 2; + //- length of body + int lenBody = lenModHeader + lenMod + lenExpHeader + lenExp; + //- length of total + int lenTotal = 2 + (lenBody >= 0x80 ? 1 : 0) + (lenBody >= 0x0100 ? 1 : 0) + lenBody; + + int index = 0; + uint8_t* byteBuffer = malloc(sizeof(uint8_t) * lenTotal); + memset(byteBuffer, 0x00, sizeof(uint8_t) * lenTotal); + + //(2) fill up byte buffer + //- sequence tag + byteBuffer[index ++] = SEQUENCE_TAG; + //- total length + if(lenBody >= 0x80) + byteBuffer[index ++] = (lenBody >= 0x0100 ? UNSIGNED_FLAG_FOR_BYTE2 : UNSIGNED_FLAG_FOR_BYTE); + if(lenBody >= 0x0100) + { + byteBuffer[index ++] = (uint8_t)(lenBody / 0x0100); + byteBuffer[index ++] = lenBody % 0x0100; + } + else + byteBuffer[index ++] = lenBody; + //- integer tag + byteBuffer[index ++] = INTEGER_TAG; + //- modulus length + if(lenMod >= 0x80) + byteBuffer[index ++] = (lenMod >= 0x0100 ? UNSIGNED_FLAG_FOR_BYTE2 : UNSIGNED_FLAG_FOR_BYTE); + if(lenMod >= 0x0100) + { + byteBuffer[index ++] = (int)(lenMod / 0x0100); + byteBuffer[index ++] = lenMod % 0x0100; + } + else + byteBuffer[index ++] = lenMod; + //- modulus value + if(modulusBytes[0] >= 0x80) + byteBuffer[index ++] = UNSIGNED_FLAG_FOR_BIGNUM; + memcpy(byteBuffer + index, modulusBytes, sizeof(uint8_t) * [modulus length]); + index += [modulus length]; + //- exponent length + byteBuffer[index ++] = INTEGER_TAG; + byteBuffer[index ++] = lenExp; + //- exponent value + memcpy(byteBuffer + index, exponentBytes, sizeof(uint8_t) * lenExp); + index += lenExp; + + if(index != lenTotal) + NSLog(@"lengths mismatch: index = %d, lenTotal = %d", index, lenTotal); + + NSMutableData* buffer = [NSMutableData dataWithBytes:byteBuffer length:lenTotal]; + free(byteBuffer); + + return buffer; +} + ++ (BOOL)saveRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag overwrite:(BOOL)overwrite +{ + CFDataRef ref; + OSStatus status = SecItemAdd((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassKey, kSecClass, + (__bridge id)kSecAttrKeyTypeRSA, kSecAttrKeyType, + (__bridge id)kSecAttrKeyClassPublic, kSecAttrKeyClass, + kCFBooleanTrue, kSecAttrIsPermanent, + [appTag dataUsingEncoding:NSUTF8StringEncoding], kSecAttrApplicationTag, + publicKey, kSecValueData, + kCFBooleanTrue, kSecReturnPersistentRef, + nil], + (CFTypeRef *)&ref); + + NSLog(@"result = %@", [KeychainUtil fetchStatus:status]); + + if(status == noErr) + return YES; + else if(status == errSecDuplicateItem && overwrite == YES) + return [CryptoUtil updateRSAPublicKey:publicKey appTag:appTag]; + + return NO; +} + ++ (BOOL)updateRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag +{ + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassKey, kSecClass, + kSecAttrKeyTypeRSA, kSecAttrKeyType, + kSecAttrKeyClassPublic, kSecAttrKeyClass, + [appTag dataUsingEncoding:NSUTF8StringEncoding], kSecAttrApplicationTag, + nil], + NULL); //don't need public key ref + + NSLog(@"result = %@", [KeychainUtil fetchStatus:status]); + + if(status == noErr) + { + status = SecItemUpdate((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassKey, kSecClass, + kSecAttrKeyTypeRSA, kSecAttrKeyType, + kSecAttrKeyClassPublic, kSecAttrKeyClass, + [appTag dataUsingEncoding:NSUTF8StringEncoding], kSecAttrApplicationTag, + nil], + (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + publicKey, kSecValueData, + nil]); + + NSLog(@"result = %@", [KeychainUtil fetchStatus:status]); + + return status == noErr; + } + return NO; +} + ++ (BOOL)deleteRSAPublicKeyWithAppTag:(NSString*)appTag +{ + OSStatus status = SecItemDelete((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassKey, kSecClass, + kSecAttrKeyTypeRSA, kSecAttrKeyType, + kSecAttrKeyClassPublic, kSecAttrKeyClass, + [appTag dataUsingEncoding:NSUTF8StringEncoding], kSecAttrApplicationTag, + nil]); + + NSLog(@"result = %@", [KeychainUtil fetchStatus:status]); + + return status == noErr; +} + +/* + * returned value(SecKeyRef) should be released with CFRelease() function after use. + * + */ ++ (SecKeyRef)loadRSAPublicKeyRefWithAppTag:(NSString*)appTag +{ + SecKeyRef publicKeyRef; + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassKey, kSecClass, + kSecAttrKeyTypeRSA, kSecAttrKeyType, + kSecAttrKeyClassPublic, kSecAttrKeyClass, + [appTag dataUsingEncoding:NSUTF8StringEncoding], kSecAttrApplicationTag, + kCFBooleanTrue, kSecReturnRef, + nil], + (CFTypeRef*)&publicKeyRef); + + NSLog(@"result = %@", [KeychainUtil fetchStatus:status]); + + if(status == noErr) + return publicKeyRef; + else + return NULL; +} + +/** + * encrypt with RSA public key + * + * padding = kSecPaddingPKCS1 / kSecPaddingNone + * + */ ++ (NSData*)encryptString:(NSString*)original RSAPublicKey:(SecKeyRef)publicKey padding:(SecPadding)padding +{ + @try + { + size_t encryptedLength = SecKeyGetBlockSize(publicKey); + uint8_t encrypted[encryptedLength]; + + const char* cStringValue = [original UTF8String]; + OSStatus status = SecKeyEncrypt(publicKey, + padding, + (const uint8_t*)cStringValue, + strlen(cStringValue), + encrypted, + &encryptedLength); + if(status == noErr) + { + NSData* encryptedData = [[NSData alloc] initWithBytes:(const void*)encrypted length:encryptedLength]; + return encryptedData ; + } + else + return nil; + } + @catch (NSException * e) + { + //do nothing + NSLog(@"exception: %@", [e reason]); + } + return nil; +} ++ (NSData*)decryptString:(NSString*)encryptedString RSAPrivateKey:(SecKeyRef)privateKey padding:(SecPadding)padding +{ + @try + { + size_t decryptedLength = SecKeyGetBlockSize(privateKey); + //size_t decryptedLength = 2048; + uint8_t decrypted[decryptedLength]; + + const char* cStringValue = [encryptedString UTF8String]; + + OSStatus status = SecKeyDecrypt(privateKey, + padding, + (const uint8_t*)cStringValue, + strlen(cStringValue), + decrypted, + &decryptedLength); + + + + if(status == noErr) + { + NSLog(@"FINAL decrypted text: %s", decrypted); + NSData* decryptedData = [[NSData alloc] initWithBytes:(const void*)decrypted length:decryptedLength]; + return decryptedData ; + } + else + return nil; + } + @catch (NSException * e) + { + //do nothing + NSLog(@"exception: %@", [e reason]); + } + return nil; +} + + ++ (NSData *)stripPublicKeyHeader:(NSData *)d_key +{ + // Skip ASN.1 public key header + if (d_key == nil) return(nil); + + unsigned int len = [d_key length]; + if (!len) return(nil); + + unsigned char *c_key = (unsigned char *)[d_key bytes]; + unsigned int idx = 0; + + if (c_key[idx++] != 0x30) return(nil); + + if (c_key[idx] > 0x80) idx += c_key[idx] - 0x80 + 1; + else idx++; + + // PKCS #1 rsaEncryption szOID_RSA_RSA + static unsigned char seqiod[] = + { 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, + 0x01, 0x05, 0x00 }; + if (memcmp(&c_key[idx], seqiod, 15)) return(nil); + + idx += 15; + + if (c_key[idx++] != 0x03) return(nil); + + if (c_key[idx] > 0x80) idx += c_key[idx] - 0x80 + 1; + else idx++; + + if (c_key[idx++] != '\0') return(nil); + + // Now make a new NSData from this buffer + return([NSData dataWithBytes:&c_key[idx] length:len - idx]); +} + ++ (SecKeyRef)RSAPublicKeyRefFromBase64String:(NSString *)key withTag:(NSString *)tag +{ + NSString *s_key = [NSString string]; + NSArray *a_key = [key componentsSeparatedByString:@"\n"]; + BOOL f_key = FALSE; + + for (NSString *a_line in a_key) { + if ([a_line isEqualToString:@"-----BEGIN PUBLIC KEY-----"]) { + f_key = TRUE; + } + else if ([a_line isEqualToString:@"-----END PUBLIC KEY-----"]) { + f_key = FALSE; + } + else if (f_key) { + s_key = [s_key stringByAppendingString:a_line]; + } + } + if (s_key.length == 0) return(FALSE); + + // This will be base64 encoded, decode it. + NSData *d_key = [NSData dataWithBase64EncodedString:s_key]; + d_key = [self stripPublicKeyHeader:d_key]; + if (d_key == nil) return(FALSE); + + + NSData *d_tag = [NSData dataWithBytes:[tag UTF8String] length:[tag length]]; + + // Delete any old lingering key with the same tag + NSMutableDictionary *publicKey = [[NSMutableDictionary alloc] init]; + [publicKey setObject:(__bridge id) kSecClassKey forKey:(__bridge id)kSecClass]; + [publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; + [publicKey setObject:d_tag forKey:(__bridge id)kSecAttrApplicationTag]; + SecItemDelete((__bridge CFDictionaryRef)publicKey); + + CFTypeRef persistKey = nil; + + // Add persistent version of the key to system keychain + [publicKey setObject:d_key forKey:(__bridge id)kSecValueData]; + [publicKey setObject:(__bridge id) kSecAttrKeyClassPublic forKey:(__bridge id) + kSecAttrKeyClass]; + [publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id) + kSecReturnPersistentRef]; + + OSStatus secStatus = SecItemAdd((__bridge CFDictionaryRef)publicKey, &persistKey); + if (persistKey != nil) CFRelease(persistKey); + + if ((secStatus != noErr) && (secStatus != errSecDuplicateItem)) { + + return(FALSE); + } + + // Now fetch the SecKeyRef version of the key + SecKeyRef keyRef = nil; + + [publicKey removeObjectForKey:(__bridge id)kSecValueData]; + [publicKey removeObjectForKey:(__bridge id)kSecReturnPersistentRef]; + [publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef + ]; + [publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; + secStatus = SecItemCopyMatching((__bridge CFDictionaryRef)publicKey, + (CFTypeRef *)&keyRef); + + + + if (keyRef == nil) + return(FALSE); + else + return keyRef; +} ++ (SecKeyRef)getPublicKeyFromBase64String:(NSString*)s_key withTag:(NSString *)tag +{ + // This will be base64 encoded, decode it. + NSData *d_key = [NSData dataWithBase64EncodedString:s_key]; + d_key = [self stripPublicKeyHeader:d_key]; + if (d_key == nil) return(FALSE); + + + NSData *d_tag = [NSData dataWithBytes:[tag UTF8String] length:[tag length]]; + + // Delete any old lingering key with the same tag + NSMutableDictionary *publicKey = [[NSMutableDictionary alloc] init]; + [publicKey setObject:(__bridge id) kSecClassKey forKey:(__bridge id)kSecClass]; + [publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; + [publicKey setObject:d_tag forKey:(__bridge id)kSecAttrApplicationTag]; + SecItemDelete((__bridge CFDictionaryRef)publicKey); + + CFTypeRef persistKey = nil; + + // Add persistent version of the key to system keychain + [publicKey setObject:d_key forKey:(__bridge id)kSecValueData]; + [publicKey setObject:(__bridge id) kSecAttrKeyClassPublic forKey:(__bridge id) + kSecAttrKeyClass]; + [publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id) + kSecReturnPersistentRef]; + + OSStatus secStatus = SecItemAdd((__bridge CFDictionaryRef)publicKey, &persistKey); + if (persistKey != nil) CFRelease(persistKey); + + if ((secStatus != noErr) && (secStatus != errSecDuplicateItem)) { + + return(FALSE); + } + + // Now fetch the SecKeyRef version of the key + SecKeyRef keyRef = nil; + + [publicKey removeObjectForKey:(__bridge id)kSecValueData]; + [publicKey removeObjectForKey:(__bridge id)kSecReturnPersistentRef]; + [publicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef + ]; + [publicKey setObject:(__bridge id) kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; + secStatus = SecItemCopyMatching((__bridge CFDictionaryRef)publicKey, + (CFTypeRef *)&keyRef); + + + if (keyRef == nil) + return(FALSE); + else + return keyRef; + +} + + +@end \ No newline at end of file diff --git a/RsaEncryption/Images.xcassets/AppIcon.appiconset/Contents.json b/RsaEncryption/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/RsaEncryption/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/RsaEncryption/Info.plist b/RsaEncryption/Info.plist new file mode 100644 index 0000000..a763ad5 --- /dev/null +++ b/RsaEncryption/Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.ozgur.Cipher + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/RsaEncryption/KeyHelper.h b/RsaEncryption/KeyHelper.h new file mode 100644 index 0000000..5404d48 --- /dev/null +++ b/RsaEncryption/KeyHelper.h @@ -0,0 +1,12 @@ +// +// Created by ozgur sahin on 20/01/15. +// + +#import + +@interface KeyHelper : NSObject +- (NSData *)getPublicKeyExpFromKeyData:(NSData*) pk; +- (NSData *)getPublicKeyModFromKeyData:(NSData*)pk; +- (NSData *)getPublicKeyBitsWithtag:(NSString*)publicTag; +- (SecKeyRef)getPrivateKeyRefWithTag:(NSString*)privateTag; +@end diff --git a/RsaEncryption/KeyHelper.m b/RsaEncryption/KeyHelper.m new file mode 100644 index 0000000..38a8e97 --- /dev/null +++ b/RsaEncryption/KeyHelper.m @@ -0,0 +1,200 @@ +// +// Created by ozgur sahin on 20/01/15. +// + +#import "KeyHelper.h" + +@implementation KeyHelper +- (NSData *)getPublicKeyBits: (NSString*) publicKeyIdentifier { + + OSStatus sanityCheck = noErr; + NSData * publicKeyBits = nil; + CFTypeRef pk; + NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init]; + + NSData* publicTag = [publicKeyIdentifier dataUsingEncoding:NSUTF8StringEncoding]; + + // Set the public key query dictionary. + [queryPublicKey setObject:(__bridge_transfer id)kSecClassKey forKey:(__bridge_transfer id)kSecClass]; + + [queryPublicKey setObject:publicTag forKey:(__bridge_transfer id)kSecAttrApplicationTag]; + [queryPublicKey setObject:(__bridge_transfer id)kSecAttrKeyTypeRSA forKey:(__bridge_transfer id)kSecAttrKeyType]; + [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge_transfer id)kSecReturnData]; + + // Get the key bits. + sanityCheck = SecItemCopyMatching((__bridge_retained CFDictionaryRef)queryPublicKey, &pk); + if (sanityCheck != noErr) + { + publicKeyBits = nil; + } + publicKeyBits = (__bridge_transfer NSData*)pk; + //NSLog(@"public bits %@",publicKeyBits); + + return publicKeyBits; +} +- (NSData *)getPublicKeyExpFromKeyData:(NSData*) pk +{ + // NSData* pk = [self getPublicKeyBits:@"RSA Public Key"]; + if (pk == NULL) return NULL; + + int iterator = 0; + + iterator++; // TYPE - bit stream - mod + exp + [self derEncodingGetSizeFrom:pk at:&iterator]; // Total size + + iterator++; // TYPE - bit stream mod + int mod_size = [self derEncodingGetSizeFrom:pk at:&iterator]; + iterator += mod_size; + + iterator++; // TYPE - bit stream exp + int exp_size = [self derEncodingGetSizeFrom:pk at:&iterator]; + + return [pk subdataWithRange:NSMakeRange(iterator, exp_size)]; + return pk; +} + + + +- (NSData *)getPublicKeyExp +{ + NSData* pk = [self getPublicKeyBits:@"RSA Public Key"]; + if (pk == NULL) return NULL; + + int iterator = 0; + + iterator++; // TYPE - bit stream - mod + exp + [self derEncodingGetSizeFrom:pk at:&iterator]; // Total size + + iterator++; // TYPE - bit stream mod + int mod_size = [self derEncodingGetSizeFrom:pk at:&iterator]; + iterator += mod_size; + + iterator++; // TYPE - bit stream exp + int exp_size = [self derEncodingGetSizeFrom:pk at:&iterator]; + + return [pk subdataWithRange:NSMakeRange(iterator, exp_size)]; + return pk; +} +- (NSData *)getPublicKeyModFromKeyData:(NSData*)pk +{ + //NSData* pk = [self getPublicKeyBits:@"RSA Public Key"]; + if (pk == NULL) return NULL; + + int iterator = 0; + + iterator++; // TYPE - bit stream - mod + exp + [self derEncodingGetSizeFrom:pk at:&iterator]; // Total size + + iterator++; // TYPE - bit stream mod + int mod_size = [self derEncodingGetSizeFrom:pk at:&iterator]; + NSLog(@"public size: %d",pk.length); + return [pk subdataWithRange:NSMakeRange(iterator, mod_size)]; + return pk; + +} +- (NSData *)getPublicKeyMod +{ + NSData* pk = [self getPublicKeyBits:@"RSA Public Key"]; + if (pk == NULL) return NULL; + + int iterator = 0; + + iterator++; // TYPE - bit stream - mod + exp + [self derEncodingGetSizeFrom:pk at:&iterator]; // Total size + + iterator++; // TYPE - bit stream mod + int mod_size = [self derEncodingGetSizeFrom:pk at:&iterator]; + NSLog(@"public size: %d",pk.length); + return [pk subdataWithRange:NSMakeRange(iterator, mod_size)]; + return pk; + +} + +- (int)derEncodingGetSizeFrom:(NSData*)buf at:(int*)iterator +{ + const uint8_t* data = [buf bytes]; + int itr = *iterator; + int num_bytes = 1; + int ret = 0; + + if (data[itr] > 0x80) { + num_bytes = data[itr] - 0x80; + itr++; + } + + for (int i = 0 ; i < num_bytes; i++) + ret = (ret * 0x100) + data[itr + i]; + + *iterator = itr + num_bytes; + return ret; +} +- (NSData *)getPublicKeyBitsWithtag:(NSString*)publicTag { + OSStatus sanityCheck = noErr; + NSData * publicKeyBits = nil; + + NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init]; + + // Set the public key query dictionary. + [queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass]; + [queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag]; + [queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; + [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnData]; + + // Get the key bits. + sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPublicKey, (void *)&publicKeyBits); + + if (sanityCheck != noErr) + { + publicKeyBits = nil; + } + + + return publicKeyBits; +} +- (SecKeyRef)getPrivateKeyRefWithTag:(NSString*)privateTag{ + OSStatus resultCode = noErr; + SecKeyRef privateKeyReference = NULL; + + NSMutableDictionary * queryPrivateKey = [[NSMutableDictionary alloc] init]; + + // Set the private key query dictionary. + [queryPrivateKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass]; + [queryPrivateKey setObject:privateTag forKey:(__bridge id)kSecAttrApplicationTag]; + [queryPrivateKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType]; + [queryPrivateKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnRef]; + + // Get the key. + resultCode = SecItemCopyMatching((__bridge CFDictionaryRef)queryPrivateKey, (CFTypeRef *)&privateKeyReference); + NSLog(@"getPrivateKey: result code: %ld", resultCode); + + if(resultCode != noErr) + { + privateKeyReference = NULL; + } + + // [queryPrivateKey release]; + // } else { + // privateKeyReference = privateKey; + // } + + return privateKeyReference; +} +//assumes utf8 encoded string +- (SecKeyRef)_getKeyNamed:(NSData *)keyNameUTF8 +{ + OSStatus err; + SecKeyRef keyRef = NULL; + err = SecItemCopyMatching((__bridge CFDictionaryRef) + [NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id) + kSecClassKey, kSecClass, + keyNameUTF8, kSecAttrApplicationTag, + kCFBooleanTrue, kSecReturnRef, + nil + ], + (CFTypeRef *) &keyRef + ); + assert( (err == noErr) == (keyRef != NULL) ); + return keyRef; +} +@end diff --git a/RsaEncryption/KeychainUtil.h b/RsaEncryption/KeychainUtil.h new file mode 100755 index 0000000..a2b10f5 --- /dev/null +++ b/RsaEncryption/KeychainUtil.h @@ -0,0 +1,87 @@ +// +// KeychainUtil.h +// iPhoneLib, +// Helper Functions and Classes for Ordinary Application Development on iPhone +// +// Created by meinside on 09. 07. 19. +// +// last update: 13.04.02. +// + +#pragma once +#import + +//needs: Security.framework + +@interface KeychainUtil : NSObject { + +} + ++ (BOOL)saveGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group + overwrite:(BOOL)overwrite; ++ (BOOL)saveGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + overwrite:(BOOL)overwrite; + ++ (BOOL)updateGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group; ++ (BOOL)updateGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key; + ++ (NSString*)loadPasswdStringForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group; ++ (NSString*)loadPasswdStringForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key; + ++ (NSData*)loadPasswdDataForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group; ++ (NSData*)loadPasswdDataForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key; + ++ (BOOL)deleteGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group; ++ (BOOL)deleteGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key; + ++ (BOOL)genericPasswdExistsForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group; ++ (BOOL)genericPasswdExistsForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key; + + ++ (NSData*)dataFromDictionary:(NSMutableDictionary*)dic; + ++ (NSMutableDictionary*)dictionaryFromData:(NSData*)data; + + ++ (NSString*)fetchStatus:(OSStatus)status; + + ++ (void)resetCredentials; + ++ (void)dumpCredentials; + +@end diff --git a/RsaEncryption/KeychainUtil.m b/RsaEncryption/KeychainUtil.m new file mode 100755 index 0000000..349532e --- /dev/null +++ b/RsaEncryption/KeychainUtil.m @@ -0,0 +1,615 @@ +// +// KeychainUtil.m +// iPhoneLib, +// Helper Functions and Classes for Ordinary Application Development on iPhone +// +// Created by meinside on 09. 07. 19. +// +// last update: 13.04.02. +// + +#import "KeychainUtil.h" + + + +@implementation KeychainUtil + +#pragma mark - +#pragma mark factory functions + ++ (NSMutableDictionary*)dictionaryOfGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [[NSMutableDictionary alloc] init]; + + NSData* identifier = [key dataUsingEncoding:NSUTF8StringEncoding]; + [dic setObject:identifier + forKey:(__bridge id)kSecAttrGeneric]; + [dic setObject:account + forKey:(__bridge id)kSecAttrAccount]; + [dic setObject:service + forKey:(__bridge id)kSecAttrService]; + [dic setObject:(__bridge id)kSecClassGenericPassword + forKey:(__bridge id)kSecClass]; + if(group) + [dic setObject:group + forKey:(__bridge id)kSecAttrAccessGroup]; + + return dic ; +} + ++ (NSMutableDictionary*)dictionaryOfGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key +{ + return [KeychainUtil dictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:nil]; +} + +#pragma mark - +#pragma mark C/R/U/D functions + ++ (NSMutableDictionary*)searchDictionaryOfGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [KeychainUtil dictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + [dic setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit]; + [dic setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnAttributes]; + [dic setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData]; + return dic; +} + ++ (BOOL)saveGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group + overwrite:(BOOL)overwrite +{ + NSMutableDictionary* dic = [KeychainUtil dictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + [dic setObject:data forKey:(__bridge id)kSecValueData]; + + OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dic, NULL); + if(status == noErr) + { + return YES; + } + else if(status == errSecDuplicateItem && overwrite == YES) + { + return [KeychainUtil updateGenericPasswd:data + forAccount:account + service:service + passwdKey:key + accessGroup:group]; + } + return NO; +} + ++ (BOOL)saveGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + overwrite:(BOOL)overwrite +{ + return [KeychainUtil saveGenericPasswd:data + forAccount:account + service:service + passwdKey:key + accessGroup:nil + overwrite:overwrite]; +} + ++ (BOOL)updateGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [KeychainUtil dictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + NSMutableDictionary* updateDic = [NSMutableDictionary dictionary]; + [updateDic setObject:data forKey:(__bridge id)kSecValueData]; + + OSStatus status = SecItemUpdate((__bridge CFDictionaryRef)dic, (__bridge CFDictionaryRef)updateDic); + if(status == noErr) + return YES; + else + return NO; +} + ++ (BOOL)updateGenericPasswd:(NSData*)data + forAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key +{ + return [KeychainUtil updateGenericPasswd:data + forAccount:account + service:service + passwdKey:key + accessGroup:nil]; +} + ++ (NSMutableDictionary*)loadDictionaryOfGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* searchDic = [KeychainUtil searchDictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + NSMutableDictionary* dic = nil; + + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDic, (void*)&dic); + if(status == noErr) + return dic; + else + return nil; +} + ++ (NSData*)loadGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [KeychainUtil loadDictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + if(dic) + return [KeychainUtil dataFromDictionary:dic]; + else + return nil; +} + ++ (NSString*)loadPasswdStringForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [KeychainUtil loadDictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + if(dic) + { + NSString* resultString = [[NSString alloc] initWithData:[dic objectForKey:(__bridge id)kSecValueData] encoding:NSUTF8StringEncoding]; + return resultString ; + } + else + return nil; +} + ++ (NSString*)loadPasswdStringForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key +{ + return [KeychainUtil loadPasswdStringForAccount:account + service:service + passwdKey:key + accessGroup:nil]; +} + ++ (NSData*)loadPasswdDataForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [KeychainUtil loadDictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + if(dic) + return [dic objectForKey:(__bridge id)kSecValueData]; + else + return nil; +} + ++ (NSData*)loadPasswdDataForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key +{ + return [KeychainUtil loadPasswdDataForAccount:account + service:service + passwdKey:key + accessGroup:nil]; +} + ++ (BOOL)deleteGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* dic = [KeychainUtil dictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + + OSStatus status = SecItemDelete((__bridge CFDictionaryRef)dic); + if(status == noErr) + return YES; + else + return NO; +} + ++ (BOOL)deleteGenericPasswdForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key +{ + return [KeychainUtil deleteGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:nil]; +} + ++ (BOOL)genericPasswdExistsForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key + accessGroup:(NSString*)group +{ + NSMutableDictionary* searchDic = [KeychainUtil searchDictionaryOfGenericPasswdForAccount:account + service:service + passwdKey:key + accessGroup:group]; + NSMutableDictionary* dic = nil; + + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)searchDic, (void*)&dic); + dic ; + if(status == noErr) + return YES; + else if(status == errSecItemNotFound) + return NO; + else + return NO; +} + ++ (BOOL)genericPasswdExistsForAccount:(NSString*)account + service:(NSString*)service + passwdKey:(NSString*)key +{ + return [KeychainUtil genericPasswdExistsForAccount:account + service:service + passwdKey:key + accessGroup:nil]; +} + +#pragma mark - +#pragma mark helper functions + ++ (NSData*)dataFromDictionary:(NSMutableDictionary*)dic +{ + if(dic == nil) + return nil; + + NSString* errorString; + NSData* data = [NSPropertyListSerialization dataFromPropertyList:dic + format:NSPropertyListBinaryFormat_v1_0 + errorDescription:&errorString]; + return data; +} + ++ (NSMutableDictionary*)dictionaryFromData:(NSData*)data +{ + if(data == nil) + return nil; + + NSString* errorString; + NSMutableDictionary* dic = [NSPropertyListSerialization propertyListFromData:data + mutabilityOption:NSPropertyListMutableContainersAndLeaves + format:NULL + errorDescription:&errorString]; + return dic; +} + ++ (NSString*)fetchStatus:(OSStatus)status +{ + if(status == 0) + return @"success"; + else if(status == errSecNotAvailable) + return @"no trust results available"; + else if(status == errSecItemNotFound) + return @"the item cannot be found"; + else if(status == errSecParam) + return @"parameter error"; + else if(status == errSecAllocate) + return @"memory allocation error"; + else if(status == errSecInteractionNotAllowed) + return @"user interaction not allowd"; + else if(status == errSecUnimplemented) + return @"not implemented"; + else if(status == errSecDuplicateItem) + return @"item already exists"; + else if(status == errSecDecode) + return @"unable to decode data"; + else + return [NSString stringWithFormat:@"%ld", status]; +} + +#pragma mark - +#pragma mark functions for debug purpose +//from: https://devforums.apple.com/message/123846#123846 + ++ (void)resetCredentials +{ + OSStatus err; + err = SecItemDelete((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassIdentity, kSecClass, + nil]); + assert(err == noErr); + + err = SecItemDelete((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassCertificate, kSecClass, + nil]); + assert(err == noErr); + + err = SecItemDelete((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassKey, kSecClass, + nil]); + assert(err == noErr); + + err = SecItemDelete((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassGenericPassword, kSecClass, + nil]); + assert(err == noErr); + + err = SecItemDelete((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)kSecClassInternetPassword, kSecClass, + nil]); + assert(err == noErr); +} + ++ (void)_printCertificate:(SecCertificateRef)certificate attributes:(NSDictionary *)attrs indent:(int)indent +{ + CFStringRef summary; + NSString* label; + NSData* hash; + + summary = SecCertificateCopySubjectSummary(certificate); + assert(summary != NULL); + + label = [attrs objectForKey:(__bridge id)kSecAttrLabel]; + if (label != nil) + { + fprintf(stderr, "%*slabel = '%s'\n", indent, "", [label UTF8String]); + } + + fprintf(stderr, "%*ssummary = '%s'\n", indent, "", [(__bridge NSString *)summary UTF8String]); + + hash = [attrs objectForKey:(__bridge id)kSecAttrPublicKeyHash]; + if (hash != nil) + { + fprintf(stderr, "%*shash = %s\n", indent, "", [[hash description] UTF8String]); + } + + CFRelease(summary); +} + ++ (void)_printKey:(SecKeyRef)key + attributes:(NSDictionary *)attrs + indent:(int)indent +{ +#pragma unused(key) + NSString* label; + CFTypeRef keyClass; + + label = [attrs objectForKey:(__bridge id)kSecAttrLabel]; + if (label != nil) + { + fprintf(stderr, "%*slabel = '%s'\n", indent, "", [label UTF8String]); + } + + label = [attrs objectForKey:(__bridge id)kSecAttrApplicationLabel]; + if (label != nil) + { + fprintf(stderr, "%*sapp label = %s\n", indent, "", [[label description] UTF8String]); + } + + label = [attrs objectForKey:(__bridge id)kSecAttrApplicationTag]; + if (label != nil) + { + fprintf(stderr, "%*sapp tag = %s\n", indent, "", [[label description] UTF8String]); + } + + //test +// NSArray* keys = [attrs allKeys]; +// for(int i=0; i<[keys count]; i++) +// { +// NSLog(@"key: %@ => value: %@", [keys objectAtIndex:i], [attrs objectForKey:[keys objectAtIndex:i]]); +// } + + keyClass = (__bridge CFTypeRef) [attrs objectForKey:(__bridge id)kSecAttrKeyClass]; + if (keyClass != nil) + { + const char* keyClassStr; + + // keyClass is a CFNumber whereas kSecAttrKeyClassPublic (and so on) + // are CFStrings. Gosh, that makes things hard . + // So I compare their descriptions. Yuck! + if ([[(__bridge id)keyClass description] isEqual:(__bridge id)kSecAttrKeyClassPublic]) + { + keyClassStr = "kSecAttrKeyClassPublic"; + } + else if ([[(__bridge id)keyClass description] isEqual:(__bridge id)kSecAttrKeyClassPrivate]) + { + keyClassStr = "kSecAttrKeyClassPrivate"; + } + else if ([[(__bridge id)keyClass description] isEqual:(__bridge id)kSecAttrKeyClassSymmetric]) + { + keyClassStr = "kSecAttrKeyClassSymmetric"; + } + else + { + keyClassStr = "?"; + } + fprintf(stderr, "%*skey class = %s\n", indent, "", keyClassStr); + } +} + ++ (void)_printIdentity:(SecIdentityRef)identity + attributes:(NSDictionary *)attrs +{ + OSStatus err; + SecCertificateRef certificate; + SecKeyRef key; + + err = SecIdentityCopyCertificate(identity, &certificate); + assert(err == noErr); + + err = SecIdentityCopyPrivateKey(identity, &key); + assert(err == noErr); + + fprintf(stderr, " certificate\n"); + [self _printCertificate:certificate + attributes:attrs + indent:6]; + + fprintf(stderr, " key\n"); + [self _printKey:key + attributes:attrs + indent:6]; + + CFRelease(key); + CFRelease(certificate); +} + ++ (void)_printPassword:(CFStringRef)password + attributes:(NSDictionary *)attrs + indent:(int)indent +{ + NSString* generic; + NSString* account; + NSString* label; + NSString* value; + + generic = [attrs objectForKey:(__bridge id)kSecAttrGeneric]; + if (generic != nil) + { + fprintf(stderr, "%*sgeneric = '%s'\n", indent, "", [[generic description] UTF8String]); + } + + account = [attrs objectForKey:(__bridge id)kSecAttrAccount]; + if (account != nil) + { + fprintf(stderr, "%*saccount = '%s'\n", indent, "", [account UTF8String]); + } + + label = [attrs objectForKey:(__bridge id)kSecAttrLabel]; + if (label != nil) + { + fprintf(stderr, "%*slabel = '%s'\n", indent, "", [label UTF8String]); + } + + value = [attrs objectForKey:(__bridge id)kSecValueData]; + if (value != nil) + { + NSString* valueStr = [[NSString alloc] initWithData:(NSData*)value + encoding:NSUTF8StringEncoding]; + fprintf(stderr, "%*svalue = %s\n", indent, "", [value UTF8String]); + + } +} + ++ (void)_printCertificate:(SecCertificateRef)certificate + attributes:(NSDictionary *)attrs +{ + [self _printCertificate:certificate + attributes:attrs + indent:4]; +} + ++ (void)_printKey:(SecKeyRef)key + attributes:(NSDictionary *)attrs +{ + [self _printKey:key + attributes:attrs + indent:4]; +} + ++ (void)_printPassword:(CFStringRef)password + attributes:(NSDictionary *)attrs +{ + [self _printPassword:password + attributes:attrs + indent:4]; +} + ++ (void)_dumpCredentialsOfSecClass:(CFTypeRef)secClass + printSelector:(SEL)printSelector +{ + OSStatus err; + CFArrayRef result; + CFIndex resultCount; + CFIndex resultIndex; + + result = NULL; + err = SecItemCopyMatching((__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys: + (__bridge id)secClass, kSecClass, + kSecMatchLimitAll, kSecMatchLimit, + kCFBooleanTrue, kSecReturnRef, + kCFBooleanTrue, kSecReturnAttributes, + nil], + (CFTypeRef *) &result); + if (result != NULL) + { + assert( CFGetTypeID(result) == CFArrayGetTypeID() ); + + resultCount = CFArrayGetCount(result); + for (resultIndex = 0; resultIndex < resultCount; resultIndex++) + { + NSDictionary * thisResult; + + fprintf(stderr, " %zd\n", (ssize_t) resultIndex); + + thisResult = (NSDictionary *) CFArrayGetValueAtIndex(result, resultIndex); + if ((secClass == kSecClassGenericPassword) || (secClass == kSecClassInternetPassword)) + { + [self performSelector:printSelector withObject:[thisResult objectForKey:(__bridge NSString *)kSecValueData] withObject:thisResult]; + } + else + { + [self performSelector:printSelector withObject:[thisResult objectForKey:(__bridge NSString *)kSecValueRef] withObject:thisResult]; + } + } + + CFRelease(result); + } +} + ++ (void)dumpCredentials +{ + fprintf(stderr, "identities:\n"); + [self _dumpCredentialsOfSecClass:kSecClassIdentity + printSelector:@selector(_printIdentity:attributes:)]; + + fprintf(stderr, "certificates:\n"); + [self _dumpCredentialsOfSecClass:kSecClassCertificate + printSelector:@selector(_printCertificate:attributes:)]; + + fprintf(stderr, "keys:\n"); + [self _dumpCredentialsOfSecClass:kSecClassKey + printSelector:@selector(_printKey:attributes:)]; + + fprintf(stderr, "generic passwords:\n"); + [self _dumpCredentialsOfSecClass:kSecClassGenericPassword + printSelector:@selector(_printPassword:attributes:)]; + + fprintf(stderr, "internet passwords:\n"); + [self _dumpCredentialsOfSecClass:kSecClassInternetPassword + printSelector:@selector(_printPassword:attributes:)]; +} + +@end diff --git a/RsaEncryption/RsaHelper.h b/RsaEncryption/RsaHelper.h new file mode 100644 index 0000000..e816fbc --- /dev/null +++ b/RsaEncryption/RsaHelper.h @@ -0,0 +1,15 @@ +// +// RsaHelper.h +// RsaEncryption +// +// Created by ozgur sahin on 24/01/15. +// + +#import +#import "CryptoUtil.h" +#import "Base64.h" +#import "KeyHelper.h" + +@interface RsaHelper : NSObject +-(void)test; +@end diff --git a/RsaEncryption/RsaHelper.m b/RsaEncryption/RsaHelper.m new file mode 100644 index 0000000..a06dbc1 --- /dev/null +++ b/RsaEncryption/RsaHelper.m @@ -0,0 +1,146 @@ +// +// RsaHelper.m +// RsaEncryption +// +// Created by Ozgur Sahin on 24/01/15. +// + +#import "RsaHelper.h" + +@implementation RsaHelper + +-(void)test +{ + NSString* publicTag=@"publicTag"; + NSString* privateTag=@"privateTag"; + + + //creating key pair + [self createKeyPairWithTag:publicTag privateTag:privateTag]; + + //write public as a modulus and exponent + //[self writePublicKeyModAndExpWithTag:publicTag]; + + + + //encryption + NSString* cipherText= [self encryptWithModulus:[self getModulusWithTag:publicTag] exponent:[self getExponentWithTag:publicTag] publicKeyTag:publicTag content:@"plainText"]; + + NSLog(@"cipherText:%@",cipherText); + + //decryption using mod and expo + NSString* plainText= [self decrypt:cipherText privateTag:privateTag]; + + NSLog(@"plainText:%@",plainText); + +} + +/** + * Generate and Save key pair to the keychain with tags + */ +-(void)createKeyPairWithTag:(NSString*)publicTag privateTag:(NSString*)privateTag +{ + bool result=[CryptoUtil generateRSAKeyWithKeySizeInBits:1024 publicKeyTag:publicTag privateKeyTag:privateTag]; + + if (result==noErr) { + [self writePublicKeyModAndExpWithTag:publicTag]; + } + +} +/** + * Get modulus of public key with tag + */ +-(NSString*)getModulusWithTag:(NSString*)publicTag +{ + KeyHelper* keyHelper =[[KeyHelper alloc]init]; + NSData* pubkeyData= [keyHelper getPublicKeyBitsWithtag:publicTag]; + NSData *modData= [keyHelper getPublicKeyModFromKeyData:pubkeyData]; + return [modData base64Encoding]; +} +/** + * Get exponent of public key with tag + */ +-(NSString*)getExponentWithTag:(NSString*)publicTag +{ + KeyHelper* keyHelper =[[KeyHelper alloc]init]; + NSData* pubkeyData= [keyHelper getPublicKeyBitsWithtag:publicTag]; + NSData *expoData= [keyHelper getPublicKeyExpFromKeyData:pubkeyData]; + return [expoData base64Encoding]; +} + +/** + * Print public key as modulus and exponent + */ +-(void)writePublicKeyModAndExpWithTag:(NSString*)publicTag +{ + KeyHelper* keyHelper =[[KeyHelper alloc]init]; + NSData* pubkeyData= [keyHelper getPublicKeyBitsWithtag:publicTag]; + + NSLog(@"pubKey :%@",[pubkeyData base64Encoding]); + + NSData *modData= [keyHelper getPublicKeyModFromKeyData:pubkeyData]; + NSLog(@"modulus :%@",[modData base64Encoding]); + + NSData *expoData= [keyHelper getPublicKeyExpFromKeyData:pubkeyData]; + NSLog(@"exponent :%@",[expoData base64Encoding]); +} +/** + * Encrypt Using Modulus and Exponent + */ +-(NSString*)encryptWithModulus:(NSString*)modulus exponent:(NSString*)exponent publicKeyTag:(NSString*)publicKeyTag content:(NSString*)content +{ + NSData *modulusData= [NSData dataWithBase64EncodedString:modulus]; + NSData *expoData= [NSData dataWithBase64EncodedString:exponent]; + NSData* publicKeyData= [CryptoUtil generateRSAPublicKeyWithModulus:modulusData exponent:expoData]; + bool success= [CryptoUtil saveRSAPublicKey:publicKeyData appTag:publicKeyTag overwrite:YES]; + NSString* encryptedString; + if (success) { + SecKeyRef publicKey= [CryptoUtil loadRSAPublicKeyRefWithAppTag:publicKeyTag]; + + NSData* encryptedData= [CryptoUtil encryptString:content RSAPublicKey:publicKey padding:kSecPaddingPKCS1]; + encryptedString=[encryptedData base64Encoding]; + NSLog(@"EncrpytedString :%@",encryptedString); + + } + else + { + NSLog(@"RSA Public key couldn't be saved."); + } + return encryptedString; + +} + +-(NSString *)decrypt:(NSString*)cipher privateTag:(NSString*)privateTag +{ + KeyHelper* keyHelper =[[KeyHelper alloc]init]; + SecKeyRef privateKey=[keyHelper getPrivateKeyRefWithTag:privateTag]; + NSString* plaintText= [self rsaDecryptWithData:[cipher base64DecodedData] key:privateKey]; + return plaintText; +} + +-(NSString *)rsaDecryptWithData:(NSData*)content key:(SecKeyRef)key{ + + size_t cipherLen = [content length]; + void *cipher = malloc(cipherLen); + [content getBytes:cipher length:cipherLen]; + + size_t keyBufferSize = [content length]; + + NSMutableData *bits = [NSMutableData dataWithLength:keyBufferSize]; + OSStatus sanityCheck = SecKeyDecrypt(key, + kSecPaddingPKCS1, + cipher, + cipherLen, + [bits mutableBytes], + &keyBufferSize); + + if (sanityCheck != 0) { + NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:sanityCheck userInfo:nil]; + NSLog(@"Error: %@", [error description]); + } + + [bits setLength:keyBufferSize]; + return [[NSString alloc] initWithData:bits + encoding:NSUTF8StringEncoding]; +} +@end diff --git a/RsaEncryption/ViewController.h b/RsaEncryption/ViewController.h new file mode 100644 index 0000000..3e5e97d --- /dev/null +++ b/RsaEncryption/ViewController.h @@ -0,0 +1,14 @@ +// +// ViewController.h +// RsaEncryption +// +// Created by Ozgur Sahin on 24/01/15. +// + +#import + +@interface ViewController : UIViewController + + +@end + diff --git a/RsaEncryption/ViewController.m b/RsaEncryption/ViewController.m new file mode 100644 index 0000000..baf9bbe --- /dev/null +++ b/RsaEncryption/ViewController.m @@ -0,0 +1,43 @@ +// +// ViewController.m +// RsaEncryption +// +// Created by Ozgur Sahin on 24/01/15. +// + +#import "ViewController.h" +#import "RsaHelper.h" +#import "AESEncryption.h" +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. + RsaHelper* rsa=[[RsaHelper alloc]init]; + [rsa test]; + + //[self testAESEncryption]; +} +-(void)testAESEncryption +{ +// NSString* key= @"Passw0rD!"; +// NSData* value = [@"value" dataUsingEncoding:NSUTF8StringEncoding]; +// NSData* encryptedData=[AESEncryption AES256Encrypt:value withKey:key]; +// NSLog(@"Encrypted:%@",[encryptedData base64EncodedString]); +// +// NSData *decrypted = [AESEncryption AES256Decrypt:encryptedData withKey:key]; +// +// NSLog(@"%@",[[NSString alloc] initWithData:decrypted encoding:NSUTF8StringEncoding]); + + +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +@end diff --git a/RsaEncryption/main.m b/RsaEncryption/main.m new file mode 100644 index 0000000..bc2b736 --- /dev/null +++ b/RsaEncryption/main.m @@ -0,0 +1,15 @@ +// +// main.m +// RsaEncryption +// +// Created by Ozgur Sahin on 24/01/15. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +}