├── .gitignore ├── .swift-version ├── Crypto.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ ├── Crypto-iOS.xcscheme │ ├── Crypto-macOS.xcscheme │ ├── Crypto-tvOS.xcscheme │ └── Crypto-watchOS.xcscheme ├── LICENSE ├── Package.swift ├── Readme.markdown ├── Sources └── Crypto │ ├── Data+Crypto.swift │ ├── Digest.swift │ ├── HMAC.swift │ └── String+Crypto.swift ├── Support ├── Crypto.h ├── Info.plist └── Tests-Info.plist └── Tests ├── CryptoTests ├── DigestTests.swift ├── HMACTests.swift └── XCTestManifests.swift └── LinuxMain.swift /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 5.0.0 2 | -------------------------------------------------------------------------------- /Crypto.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 211216491AE68AD3004E1CE6 /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2112163D1AE68AD2004E1CE6 /* Crypto.framework */; }; 11 | 219E0C651FC55E8100F80DF1 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C581FC55E8000F80DF1 /* HMAC.swift */; }; 12 | 219E0C661FC55E8100F80DF1 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C591FC55E8000F80DF1 /* Digest.swift */; }; 13 | 219E0C671FC55E8100F80DF1 /* String+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5A1FC55E8000F80DF1 /* String+Crypto.swift */; }; 14 | 219E0C681FC55E8100F80DF1 /* Data+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5B1FC55E8000F80DF1 /* Data+Crypto.swift */; }; 15 | 219E0C6A1FC55E8100F80DF1 /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 219E0C5E1FC55E8000F80DF1 /* Crypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | 219E0C6F1FC55E8800F80DF1 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C581FC55E8000F80DF1 /* HMAC.swift */; }; 17 | 219E0C701FC55E8800F80DF1 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C591FC55E8000F80DF1 /* Digest.swift */; }; 18 | 219E0C711FC55E8800F80DF1 /* String+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5A1FC55E8000F80DF1 /* String+Crypto.swift */; }; 19 | 219E0C721FC55E8800F80DF1 /* Data+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5B1FC55E8000F80DF1 /* Data+Crypto.swift */; }; 20 | 219E0C731FC55E8900F80DF1 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C581FC55E8000F80DF1 /* HMAC.swift */; }; 21 | 219E0C741FC55E8900F80DF1 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C591FC55E8000F80DF1 /* Digest.swift */; }; 22 | 219E0C751FC55E8900F80DF1 /* String+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5A1FC55E8000F80DF1 /* String+Crypto.swift */; }; 23 | 219E0C761FC55E8900F80DF1 /* Data+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5B1FC55E8000F80DF1 /* Data+Crypto.swift */; }; 24 | 219E0C771FC55E8900F80DF1 /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C581FC55E8000F80DF1 /* HMAC.swift */; }; 25 | 219E0C781FC55E8900F80DF1 /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C591FC55E8000F80DF1 /* Digest.swift */; }; 26 | 219E0C791FC55E8900F80DF1 /* String+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5A1FC55E8000F80DF1 /* String+Crypto.swift */; }; 27 | 219E0C7A1FC55E8900F80DF1 /* Data+Crypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C5B1FC55E8000F80DF1 /* Data+Crypto.swift */; }; 28 | 219E0C7B1FC55E8D00F80DF1 /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 219E0C5E1FC55E8000F80DF1 /* Crypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; 29 | 219E0C7C1FC55E8D00F80DF1 /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 219E0C5E1FC55E8000F80DF1 /* Crypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; 30 | 219E0C7D1FC55E8E00F80DF1 /* Crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 219E0C5E1FC55E8000F80DF1 /* Crypto.h */; settings = {ATTRIBUTES = (Public, ); }; }; 31 | 219E0C7E1FC55E9900F80DF1 /* HMACTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C631FC55E8000F80DF1 /* HMACTests.swift */; }; 32 | 219E0C7F1FC55E9900F80DF1 /* DigestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C641FC55E8000F80DF1 /* DigestTests.swift */; }; 33 | 219E0C801FC55E9900F80DF1 /* HMACTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C631FC55E8000F80DF1 /* HMACTests.swift */; }; 34 | 219E0C811FC55E9900F80DF1 /* DigestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C641FC55E8000F80DF1 /* DigestTests.swift */; }; 35 | 219E0C821FC55E9A00F80DF1 /* HMACTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C631FC55E8000F80DF1 /* HMACTests.swift */; }; 36 | 219E0C831FC55E9A00F80DF1 /* DigestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 219E0C641FC55E8000F80DF1 /* DigestTests.swift */; }; 37 | 21FD8C661AE6B03F008DCDBA /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21FD8C5B1AE6B03F008DCDBA /* Crypto.framework */; }; 38 | 80098A791C12E87D0029C530 /* Crypto.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80098A6F1C12E87D0029C530 /* Crypto.framework */; }; 39 | /* End PBXBuildFile section */ 40 | 41 | /* Begin PBXContainerItemProxy section */ 42 | 2112164A1AE68AD3004E1CE6 /* PBXContainerItemProxy */ = { 43 | isa = PBXContainerItemProxy; 44 | containerPortal = 211216341AE68AD2004E1CE6 /* Project object */; 45 | proxyType = 1; 46 | remoteGlobalIDString = 2112163C1AE68AD2004E1CE6; 47 | remoteInfo = Crypto; 48 | }; 49 | 21FD8C671AE6B03F008DCDBA /* PBXContainerItemProxy */ = { 50 | isa = PBXContainerItemProxy; 51 | containerPortal = 211216341AE68AD2004E1CE6 /* Project object */; 52 | proxyType = 1; 53 | remoteGlobalIDString = 21FD8C5A1AE6B03F008DCDBA; 54 | remoteInfo = "Crypto-iOS"; 55 | }; 56 | 80098A7A1C12E87D0029C530 /* PBXContainerItemProxy */ = { 57 | isa = PBXContainerItemProxy; 58 | containerPortal = 211216341AE68AD2004E1CE6 /* Project object */; 59 | proxyType = 1; 60 | remoteGlobalIDString = 80098A6E1C12E87D0029C530; 61 | remoteInfo = "Crypto-tvOS"; 62 | }; 63 | /* End PBXContainerItemProxy section */ 64 | 65 | /* Begin PBXCopyFilesBuildPhase section */ 66 | 217C55721D42D2360064A2AD /* Embed Frameworks */ = { 67 | isa = PBXCopyFilesBuildPhase; 68 | buildActionMask = 2147483647; 69 | dstPath = ""; 70 | dstSubfolderSpec = 10; 71 | files = ( 72 | ); 73 | name = "Embed Frameworks"; 74 | runOnlyForDeploymentPostprocessing = 0; 75 | }; 76 | 217C55741D42D24A0064A2AD /* Embed Frameworks */ = { 77 | isa = PBXCopyFilesBuildPhase; 78 | buildActionMask = 2147483647; 79 | dstPath = ""; 80 | dstSubfolderSpec = 10; 81 | files = ( 82 | ); 83 | name = "Embed Frameworks"; 84 | runOnlyForDeploymentPostprocessing = 0; 85 | }; 86 | 217C55761D42D2600064A2AD /* Embed Frameworks */ = { 87 | isa = PBXCopyFilesBuildPhase; 88 | buildActionMask = 2147483647; 89 | dstPath = ""; 90 | dstSubfolderSpec = 10; 91 | files = ( 92 | ); 93 | name = "Embed Frameworks"; 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | /* End PBXCopyFilesBuildPhase section */ 97 | 98 | /* Begin PBXFileReference section */ 99 | 2112163D1AE68AD2004E1CE6 /* Crypto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Crypto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 100 | 211216481AE68AD3004E1CE6 /* CryptoTests-macOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CryptoTests-macOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 101 | 217C55661D42D1C00064A2AD /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CommonCrypto.framework; path = Carthage/Build/iOS/CommonCrypto.framework; sourceTree = ""; }; 102 | 217C55691D42D1CF0064A2AD /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CommonCrypto.framework; path = Carthage/Build/Mac/CommonCrypto.framework; sourceTree = ""; }; 103 | 217C556C1D42D1E10064A2AD /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CommonCrypto.framework; path = Carthage/Build/tvOS/CommonCrypto.framework; sourceTree = ""; }; 104 | 217C556F1D42D1ED0064A2AD /* CommonCrypto.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CommonCrypto.framework; path = Carthage/Build/watchOS/CommonCrypto.framework; sourceTree = ""; }; 105 | 219E0C581FC55E8000F80DF1 /* HMAC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMAC.swift; sourceTree = ""; }; 106 | 219E0C591FC55E8000F80DF1 /* Digest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Digest.swift; sourceTree = ""; }; 107 | 219E0C5A1FC55E8000F80DF1 /* String+Crypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Crypto.swift"; sourceTree = ""; }; 108 | 219E0C5B1FC55E8000F80DF1 /* Data+Crypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Data+Crypto.swift"; sourceTree = ""; }; 109 | 219E0C5D1FC55E8000F80DF1 /* Tests-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Tests-Info.plist"; sourceTree = ""; }; 110 | 219E0C5E1FC55E8000F80DF1 /* Crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Crypto.h; sourceTree = ""; }; 111 | 219E0C5F1FC55E8000F80DF1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 112 | 219E0C631FC55E8000F80DF1 /* HMACTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMACTests.swift; sourceTree = ""; }; 113 | 219E0C641FC55E8000F80DF1 /* DigestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DigestTests.swift; sourceTree = ""; }; 114 | 21FD8C5B1AE6B03F008DCDBA /* Crypto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Crypto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 115 | 21FD8C651AE6B03F008DCDBA /* CryptoTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CryptoTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 116 | 80098A6F1C12E87D0029C530 /* Crypto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Crypto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 117 | 80098A781C12E87D0029C530 /* CryptoTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "CryptoTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 118 | 804503371BA20F37002A5470 /* Crypto.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Crypto.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 119 | /* End PBXFileReference section */ 120 | 121 | /* Begin PBXFrameworksBuildPhase section */ 122 | 211216391AE68AD2004E1CE6 /* Frameworks */ = { 123 | isa = PBXFrameworksBuildPhase; 124 | buildActionMask = 2147483647; 125 | files = ( 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | 211216451AE68AD3004E1CE6 /* Frameworks */ = { 130 | isa = PBXFrameworksBuildPhase; 131 | buildActionMask = 2147483647; 132 | files = ( 133 | 211216491AE68AD3004E1CE6 /* Crypto.framework in Frameworks */, 134 | ); 135 | runOnlyForDeploymentPostprocessing = 0; 136 | }; 137 | 21FD8C571AE6B03F008DCDBA /* Frameworks */ = { 138 | isa = PBXFrameworksBuildPhase; 139 | buildActionMask = 2147483647; 140 | files = ( 141 | ); 142 | runOnlyForDeploymentPostprocessing = 0; 143 | }; 144 | 21FD8C621AE6B03F008DCDBA /* Frameworks */ = { 145 | isa = PBXFrameworksBuildPhase; 146 | buildActionMask = 2147483647; 147 | files = ( 148 | 21FD8C661AE6B03F008DCDBA /* Crypto.framework in Frameworks */, 149 | ); 150 | runOnlyForDeploymentPostprocessing = 0; 151 | }; 152 | 80098A6B1C12E87D0029C530 /* Frameworks */ = { 153 | isa = PBXFrameworksBuildPhase; 154 | buildActionMask = 2147483647; 155 | files = ( 156 | ); 157 | runOnlyForDeploymentPostprocessing = 0; 158 | }; 159 | 80098A751C12E87D0029C530 /* Frameworks */ = { 160 | isa = PBXFrameworksBuildPhase; 161 | buildActionMask = 2147483647; 162 | files = ( 163 | 80098A791C12E87D0029C530 /* Crypto.framework in Frameworks */, 164 | ); 165 | runOnlyForDeploymentPostprocessing = 0; 166 | }; 167 | 804503331BA20F37002A5470 /* Frameworks */ = { 168 | isa = PBXFrameworksBuildPhase; 169 | buildActionMask = 2147483647; 170 | files = ( 171 | ); 172 | runOnlyForDeploymentPostprocessing = 0; 173 | }; 174 | /* End PBXFrameworksBuildPhase section */ 175 | 176 | /* Begin PBXGroup section */ 177 | 211216331AE68AD2004E1CE6 = { 178 | isa = PBXGroup; 179 | children = ( 180 | 219E0C561FC55E8000F80DF1 /* Sources */, 181 | 219E0C5C1FC55E8000F80DF1 /* Support */, 182 | 219E0C601FC55E8000F80DF1 /* Tests */, 183 | 211216AB1AE68E43004E1CE6 /* Frameworks */, 184 | 2112163E1AE68AD2004E1CE6 /* Products */, 185 | ); 186 | sourceTree = ""; 187 | usesTabs = 1; 188 | }; 189 | 2112163E1AE68AD2004E1CE6 /* Products */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 2112163D1AE68AD2004E1CE6 /* Crypto.framework */, 193 | 211216481AE68AD3004E1CE6 /* CryptoTests-macOS.xctest */, 194 | 21FD8C5B1AE6B03F008DCDBA /* Crypto.framework */, 195 | 21FD8C651AE6B03F008DCDBA /* CryptoTests-iOS.xctest */, 196 | 804503371BA20F37002A5470 /* Crypto.framework */, 197 | 80098A6F1C12E87D0029C530 /* Crypto.framework */, 198 | 80098A781C12E87D0029C530 /* CryptoTests-tvOS.xctest */, 199 | ); 200 | name = Products; 201 | sourceTree = ""; 202 | }; 203 | 211216AB1AE68E43004E1CE6 /* Frameworks */ = { 204 | isa = PBXGroup; 205 | children = ( 206 | 217C556B1D42D1D10064A2AD /* macOS */, 207 | 217C55681D42D1C50064A2AD /* iOS */, 208 | 217C55711D42D1EF0064A2AD /* watchOS */, 209 | 217C556E1D42D1E30064A2AD /* tvOS */, 210 | ); 211 | name = Frameworks; 212 | sourceTree = ""; 213 | }; 214 | 217C55681D42D1C50064A2AD /* iOS */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | 217C55661D42D1C00064A2AD /* CommonCrypto.framework */, 218 | ); 219 | name = iOS; 220 | sourceTree = ""; 221 | }; 222 | 217C556B1D42D1D10064A2AD /* macOS */ = { 223 | isa = PBXGroup; 224 | children = ( 225 | 217C55691D42D1CF0064A2AD /* CommonCrypto.framework */, 226 | ); 227 | name = macOS; 228 | sourceTree = ""; 229 | }; 230 | 217C556E1D42D1E30064A2AD /* tvOS */ = { 231 | isa = PBXGroup; 232 | children = ( 233 | 217C556C1D42D1E10064A2AD /* CommonCrypto.framework */, 234 | ); 235 | name = tvOS; 236 | sourceTree = ""; 237 | }; 238 | 217C55711D42D1EF0064A2AD /* watchOS */ = { 239 | isa = PBXGroup; 240 | children = ( 241 | 217C556F1D42D1ED0064A2AD /* CommonCrypto.framework */, 242 | ); 243 | name = watchOS; 244 | sourceTree = ""; 245 | }; 246 | 219E0C561FC55E8000F80DF1 /* Sources */ = { 247 | isa = PBXGroup; 248 | children = ( 249 | 219E0C571FC55E8000F80DF1 /* Crypto */, 250 | ); 251 | path = Sources; 252 | sourceTree = ""; 253 | }; 254 | 219E0C571FC55E8000F80DF1 /* Crypto */ = { 255 | isa = PBXGroup; 256 | children = ( 257 | 219E0C581FC55E8000F80DF1 /* HMAC.swift */, 258 | 219E0C591FC55E8000F80DF1 /* Digest.swift */, 259 | 219E0C5A1FC55E8000F80DF1 /* String+Crypto.swift */, 260 | 219E0C5B1FC55E8000F80DF1 /* Data+Crypto.swift */, 261 | ); 262 | path = Crypto; 263 | sourceTree = ""; 264 | }; 265 | 219E0C5C1FC55E8000F80DF1 /* Support */ = { 266 | isa = PBXGroup; 267 | children = ( 268 | 219E0C5D1FC55E8000F80DF1 /* Tests-Info.plist */, 269 | 219E0C5E1FC55E8000F80DF1 /* Crypto.h */, 270 | 219E0C5F1FC55E8000F80DF1 /* Info.plist */, 271 | ); 272 | path = Support; 273 | sourceTree = ""; 274 | }; 275 | 219E0C601FC55E8000F80DF1 /* Tests */ = { 276 | isa = PBXGroup; 277 | children = ( 278 | 219E0C621FC55E8000F80DF1 /* CryptoTests */, 279 | ); 280 | path = Tests; 281 | sourceTree = ""; 282 | }; 283 | 219E0C621FC55E8000F80DF1 /* CryptoTests */ = { 284 | isa = PBXGroup; 285 | children = ( 286 | 219E0C631FC55E8000F80DF1 /* HMACTests.swift */, 287 | 219E0C641FC55E8000F80DF1 /* DigestTests.swift */, 288 | ); 289 | path = CryptoTests; 290 | sourceTree = ""; 291 | }; 292 | /* End PBXGroup section */ 293 | 294 | /* Begin PBXHeadersBuildPhase section */ 295 | 2112163A1AE68AD2004E1CE6 /* Headers */ = { 296 | isa = PBXHeadersBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | 219E0C6A1FC55E8100F80DF1 /* Crypto.h in Headers */, 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | }; 303 | 21FD8C581AE6B03F008DCDBA /* Headers */ = { 304 | isa = PBXHeadersBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | 219E0C7B1FC55E8D00F80DF1 /* Crypto.h in Headers */, 308 | ); 309 | runOnlyForDeploymentPostprocessing = 0; 310 | }; 311 | 80098A6C1C12E87D0029C530 /* Headers */ = { 312 | isa = PBXHeadersBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | 219E0C7D1FC55E8E00F80DF1 /* Crypto.h in Headers */, 316 | ); 317 | runOnlyForDeploymentPostprocessing = 0; 318 | }; 319 | 804503341BA20F37002A5470 /* Headers */ = { 320 | isa = PBXHeadersBuildPhase; 321 | buildActionMask = 2147483647; 322 | files = ( 323 | 219E0C7C1FC55E8D00F80DF1 /* Crypto.h in Headers */, 324 | ); 325 | runOnlyForDeploymentPostprocessing = 0; 326 | }; 327 | /* End PBXHeadersBuildPhase section */ 328 | 329 | /* Begin PBXNativeTarget section */ 330 | 2112163C1AE68AD2004E1CE6 /* Crypto-macOS */ = { 331 | isa = PBXNativeTarget; 332 | buildConfigurationList = 211216531AE68AD3004E1CE6 /* Build configuration list for PBXNativeTarget "Crypto-macOS" */; 333 | buildPhases = ( 334 | 211216381AE68AD2004E1CE6 /* Sources */, 335 | 211216391AE68AD2004E1CE6 /* Frameworks */, 336 | 2112163A1AE68AD2004E1CE6 /* Headers */, 337 | 2112163B1AE68AD2004E1CE6 /* Resources */, 338 | ); 339 | buildRules = ( 340 | ); 341 | dependencies = ( 342 | ); 343 | name = "Crypto-macOS"; 344 | productName = Crypto; 345 | productReference = 2112163D1AE68AD2004E1CE6 /* Crypto.framework */; 346 | productType = "com.apple.product-type.framework"; 347 | }; 348 | 211216471AE68AD3004E1CE6 /* CryptoTests-macOS */ = { 349 | isa = PBXNativeTarget; 350 | buildConfigurationList = 211216561AE68AD3004E1CE6 /* Build configuration list for PBXNativeTarget "CryptoTests-macOS" */; 351 | buildPhases = ( 352 | 211216441AE68AD3004E1CE6 /* Sources */, 353 | 211216451AE68AD3004E1CE6 /* Frameworks */, 354 | 211216461AE68AD3004E1CE6 /* Resources */, 355 | 217C55721D42D2360064A2AD /* Embed Frameworks */, 356 | ); 357 | buildRules = ( 358 | ); 359 | dependencies = ( 360 | 2112164B1AE68AD3004E1CE6 /* PBXTargetDependency */, 361 | ); 362 | name = "CryptoTests-macOS"; 363 | productName = CryptoTests; 364 | productReference = 211216481AE68AD3004E1CE6 /* CryptoTests-macOS.xctest */; 365 | productType = "com.apple.product-type.bundle.unit-test"; 366 | }; 367 | 21FD8C5A1AE6B03F008DCDBA /* Crypto-iOS */ = { 368 | isa = PBXNativeTarget; 369 | buildConfigurationList = 21FD8C721AE6B03F008DCDBA /* Build configuration list for PBXNativeTarget "Crypto-iOS" */; 370 | buildPhases = ( 371 | 21FD8C561AE6B03F008DCDBA /* Sources */, 372 | 21FD8C571AE6B03F008DCDBA /* Frameworks */, 373 | 21FD8C581AE6B03F008DCDBA /* Headers */, 374 | 21FD8C591AE6B03F008DCDBA /* Resources */, 375 | ); 376 | buildRules = ( 377 | ); 378 | dependencies = ( 379 | ); 380 | name = "Crypto-iOS"; 381 | productName = "Crypto-iOS"; 382 | productReference = 21FD8C5B1AE6B03F008DCDBA /* Crypto.framework */; 383 | productType = "com.apple.product-type.framework"; 384 | }; 385 | 21FD8C641AE6B03F008DCDBA /* CryptoTests-iOS */ = { 386 | isa = PBXNativeTarget; 387 | buildConfigurationList = 21FD8C731AE6B03F008DCDBA /* Build configuration list for PBXNativeTarget "CryptoTests-iOS" */; 388 | buildPhases = ( 389 | 21FD8C611AE6B03F008DCDBA /* Sources */, 390 | 21FD8C621AE6B03F008DCDBA /* Frameworks */, 391 | 21FD8C631AE6B03F008DCDBA /* Resources */, 392 | 217C55741D42D24A0064A2AD /* Embed Frameworks */, 393 | ); 394 | buildRules = ( 395 | ); 396 | dependencies = ( 397 | 21FD8C681AE6B03F008DCDBA /* PBXTargetDependency */, 398 | ); 399 | name = "CryptoTests-iOS"; 400 | productName = "Crypto-iOSTests"; 401 | productReference = 21FD8C651AE6B03F008DCDBA /* CryptoTests-iOS.xctest */; 402 | productType = "com.apple.product-type.bundle.unit-test"; 403 | }; 404 | 80098A6E1C12E87D0029C530 /* Crypto-tvOS */ = { 405 | isa = PBXNativeTarget; 406 | buildConfigurationList = 80098A801C12E87D0029C530 /* Build configuration list for PBXNativeTarget "Crypto-tvOS" */; 407 | buildPhases = ( 408 | 80098A6A1C12E87D0029C530 /* Sources */, 409 | 80098A6B1C12E87D0029C530 /* Frameworks */, 410 | 80098A6C1C12E87D0029C530 /* Headers */, 411 | 80098A6D1C12E87D0029C530 /* Resources */, 412 | ); 413 | buildRules = ( 414 | ); 415 | dependencies = ( 416 | ); 417 | name = "Crypto-tvOS"; 418 | productName = "Crypto-tvOS"; 419 | productReference = 80098A6F1C12E87D0029C530 /* Crypto.framework */; 420 | productType = "com.apple.product-type.framework"; 421 | }; 422 | 80098A771C12E87D0029C530 /* CryptoTests-tvOS */ = { 423 | isa = PBXNativeTarget; 424 | buildConfigurationList = 80098A831C12E87D0029C530 /* Build configuration list for PBXNativeTarget "CryptoTests-tvOS" */; 425 | buildPhases = ( 426 | 80098A741C12E87D0029C530 /* Sources */, 427 | 80098A751C12E87D0029C530 /* Frameworks */, 428 | 80098A761C12E87D0029C530 /* Resources */, 429 | 217C55761D42D2600064A2AD /* Embed Frameworks */, 430 | ); 431 | buildRules = ( 432 | ); 433 | dependencies = ( 434 | 80098A7B1C12E87D0029C530 /* PBXTargetDependency */, 435 | ); 436 | name = "CryptoTests-tvOS"; 437 | productName = "Crypto-tvOSTests"; 438 | productReference = 80098A781C12E87D0029C530 /* CryptoTests-tvOS.xctest */; 439 | productType = "com.apple.product-type.bundle.unit-test"; 440 | }; 441 | 804503361BA20F37002A5470 /* Crypto-watchOS */ = { 442 | isa = PBXNativeTarget; 443 | buildConfigurationList = 8045033C1BA20F37002A5470 /* Build configuration list for PBXNativeTarget "Crypto-watchOS" */; 444 | buildPhases = ( 445 | 804503321BA20F37002A5470 /* Sources */, 446 | 804503331BA20F37002A5470 /* Frameworks */, 447 | 804503341BA20F37002A5470 /* Headers */, 448 | 804503351BA20F37002A5470 /* Resources */, 449 | ); 450 | buildRules = ( 451 | ); 452 | dependencies = ( 453 | ); 454 | name = "Crypto-watchOS"; 455 | productName = "Crypto-watchOS"; 456 | productReference = 804503371BA20F37002A5470 /* Crypto.framework */; 457 | productType = "com.apple.product-type.framework"; 458 | }; 459 | /* End PBXNativeTarget section */ 460 | 461 | /* Begin PBXProject section */ 462 | 211216341AE68AD2004E1CE6 /* Project object */ = { 463 | isa = PBXProject; 464 | attributes = { 465 | LastSwiftUpdateCheck = 0710; 466 | LastUpgradeCheck = 1020; 467 | ORGANIZATIONNAME = "Sam Soffes"; 468 | TargetAttributes = { 469 | 2112163C1AE68AD2004E1CE6 = { 470 | CreatedOnToolsVersion = 6.3; 471 | }; 472 | 211216471AE68AD3004E1CE6 = { 473 | CreatedOnToolsVersion = 6.3; 474 | }; 475 | 21FD8C5A1AE6B03F008DCDBA = { 476 | CreatedOnToolsVersion = 6.3; 477 | LastSwiftMigration = 0900; 478 | }; 479 | 21FD8C641AE6B03F008DCDBA = { 480 | CreatedOnToolsVersion = 6.3; 481 | LastSwiftMigration = 0900; 482 | }; 483 | 80098A6E1C12E87D0029C530 = { 484 | CreatedOnToolsVersion = 7.1.1; 485 | }; 486 | 80098A771C12E87D0029C530 = { 487 | CreatedOnToolsVersion = 7.1.1; 488 | }; 489 | 804503361BA20F37002A5470 = { 490 | CreatedOnToolsVersion = 7.0; 491 | }; 492 | }; 493 | }; 494 | buildConfigurationList = 211216371AE68AD2004E1CE6 /* Build configuration list for PBXProject "Crypto" */; 495 | compatibilityVersion = "Xcode 3.2"; 496 | developmentRegion = en; 497 | hasScannedForEncodings = 0; 498 | knownRegions = ( 499 | en, 500 | Base, 501 | ); 502 | mainGroup = 211216331AE68AD2004E1CE6; 503 | productRefGroup = 2112163E1AE68AD2004E1CE6 /* Products */; 504 | projectDirPath = ""; 505 | projectRoot = ""; 506 | targets = ( 507 | 2112163C1AE68AD2004E1CE6 /* Crypto-macOS */, 508 | 211216471AE68AD3004E1CE6 /* CryptoTests-macOS */, 509 | 21FD8C5A1AE6B03F008DCDBA /* Crypto-iOS */, 510 | 21FD8C641AE6B03F008DCDBA /* CryptoTests-iOS */, 511 | 804503361BA20F37002A5470 /* Crypto-watchOS */, 512 | 80098A6E1C12E87D0029C530 /* Crypto-tvOS */, 513 | 80098A771C12E87D0029C530 /* CryptoTests-tvOS */, 514 | ); 515 | }; 516 | /* End PBXProject section */ 517 | 518 | /* Begin PBXResourcesBuildPhase section */ 519 | 2112163B1AE68AD2004E1CE6 /* Resources */ = { 520 | isa = PBXResourcesBuildPhase; 521 | buildActionMask = 2147483647; 522 | files = ( 523 | ); 524 | runOnlyForDeploymentPostprocessing = 0; 525 | }; 526 | 211216461AE68AD3004E1CE6 /* Resources */ = { 527 | isa = PBXResourcesBuildPhase; 528 | buildActionMask = 2147483647; 529 | files = ( 530 | ); 531 | runOnlyForDeploymentPostprocessing = 0; 532 | }; 533 | 21FD8C591AE6B03F008DCDBA /* Resources */ = { 534 | isa = PBXResourcesBuildPhase; 535 | buildActionMask = 2147483647; 536 | files = ( 537 | ); 538 | runOnlyForDeploymentPostprocessing = 0; 539 | }; 540 | 21FD8C631AE6B03F008DCDBA /* Resources */ = { 541 | isa = PBXResourcesBuildPhase; 542 | buildActionMask = 2147483647; 543 | files = ( 544 | ); 545 | runOnlyForDeploymentPostprocessing = 0; 546 | }; 547 | 80098A6D1C12E87D0029C530 /* Resources */ = { 548 | isa = PBXResourcesBuildPhase; 549 | buildActionMask = 2147483647; 550 | files = ( 551 | ); 552 | runOnlyForDeploymentPostprocessing = 0; 553 | }; 554 | 80098A761C12E87D0029C530 /* Resources */ = { 555 | isa = PBXResourcesBuildPhase; 556 | buildActionMask = 2147483647; 557 | files = ( 558 | ); 559 | runOnlyForDeploymentPostprocessing = 0; 560 | }; 561 | 804503351BA20F37002A5470 /* Resources */ = { 562 | isa = PBXResourcesBuildPhase; 563 | buildActionMask = 2147483647; 564 | files = ( 565 | ); 566 | runOnlyForDeploymentPostprocessing = 0; 567 | }; 568 | /* End PBXResourcesBuildPhase section */ 569 | 570 | /* Begin PBXSourcesBuildPhase section */ 571 | 211216381AE68AD2004E1CE6 /* Sources */ = { 572 | isa = PBXSourcesBuildPhase; 573 | buildActionMask = 2147483647; 574 | files = ( 575 | 219E0C671FC55E8100F80DF1 /* String+Crypto.swift in Sources */, 576 | 219E0C651FC55E8100F80DF1 /* HMAC.swift in Sources */, 577 | 219E0C681FC55E8100F80DF1 /* Data+Crypto.swift in Sources */, 578 | 219E0C661FC55E8100F80DF1 /* Digest.swift in Sources */, 579 | ); 580 | runOnlyForDeploymentPostprocessing = 0; 581 | }; 582 | 211216441AE68AD3004E1CE6 /* Sources */ = { 583 | isa = PBXSourcesBuildPhase; 584 | buildActionMask = 2147483647; 585 | files = ( 586 | 219E0C821FC55E9A00F80DF1 /* HMACTests.swift in Sources */, 587 | 219E0C831FC55E9A00F80DF1 /* DigestTests.swift in Sources */, 588 | ); 589 | runOnlyForDeploymentPostprocessing = 0; 590 | }; 591 | 21FD8C561AE6B03F008DCDBA /* Sources */ = { 592 | isa = PBXSourcesBuildPhase; 593 | buildActionMask = 2147483647; 594 | files = ( 595 | 219E0C711FC55E8800F80DF1 /* String+Crypto.swift in Sources */, 596 | 219E0C6F1FC55E8800F80DF1 /* HMAC.swift in Sources */, 597 | 219E0C721FC55E8800F80DF1 /* Data+Crypto.swift in Sources */, 598 | 219E0C701FC55E8800F80DF1 /* Digest.swift in Sources */, 599 | ); 600 | runOnlyForDeploymentPostprocessing = 0; 601 | }; 602 | 21FD8C611AE6B03F008DCDBA /* Sources */ = { 603 | isa = PBXSourcesBuildPhase; 604 | buildActionMask = 2147483647; 605 | files = ( 606 | 219E0C801FC55E9900F80DF1 /* HMACTests.swift in Sources */, 607 | 219E0C811FC55E9900F80DF1 /* DigestTests.swift in Sources */, 608 | ); 609 | runOnlyForDeploymentPostprocessing = 0; 610 | }; 611 | 80098A6A1C12E87D0029C530 /* Sources */ = { 612 | isa = PBXSourcesBuildPhase; 613 | buildActionMask = 2147483647; 614 | files = ( 615 | 219E0C791FC55E8900F80DF1 /* String+Crypto.swift in Sources */, 616 | 219E0C771FC55E8900F80DF1 /* HMAC.swift in Sources */, 617 | 219E0C7A1FC55E8900F80DF1 /* Data+Crypto.swift in Sources */, 618 | 219E0C781FC55E8900F80DF1 /* Digest.swift in Sources */, 619 | ); 620 | runOnlyForDeploymentPostprocessing = 0; 621 | }; 622 | 80098A741C12E87D0029C530 /* Sources */ = { 623 | isa = PBXSourcesBuildPhase; 624 | buildActionMask = 2147483647; 625 | files = ( 626 | 219E0C7E1FC55E9900F80DF1 /* HMACTests.swift in Sources */, 627 | 219E0C7F1FC55E9900F80DF1 /* DigestTests.swift in Sources */, 628 | ); 629 | runOnlyForDeploymentPostprocessing = 0; 630 | }; 631 | 804503321BA20F37002A5470 /* Sources */ = { 632 | isa = PBXSourcesBuildPhase; 633 | buildActionMask = 2147483647; 634 | files = ( 635 | 219E0C751FC55E8900F80DF1 /* String+Crypto.swift in Sources */, 636 | 219E0C731FC55E8900F80DF1 /* HMAC.swift in Sources */, 637 | 219E0C761FC55E8900F80DF1 /* Data+Crypto.swift in Sources */, 638 | 219E0C741FC55E8900F80DF1 /* Digest.swift in Sources */, 639 | ); 640 | runOnlyForDeploymentPostprocessing = 0; 641 | }; 642 | /* End PBXSourcesBuildPhase section */ 643 | 644 | /* Begin PBXTargetDependency section */ 645 | 2112164B1AE68AD3004E1CE6 /* PBXTargetDependency */ = { 646 | isa = PBXTargetDependency; 647 | target = 2112163C1AE68AD2004E1CE6 /* Crypto-macOS */; 648 | targetProxy = 2112164A1AE68AD3004E1CE6 /* PBXContainerItemProxy */; 649 | }; 650 | 21FD8C681AE6B03F008DCDBA /* PBXTargetDependency */ = { 651 | isa = PBXTargetDependency; 652 | target = 21FD8C5A1AE6B03F008DCDBA /* Crypto-iOS */; 653 | targetProxy = 21FD8C671AE6B03F008DCDBA /* PBXContainerItemProxy */; 654 | }; 655 | 80098A7B1C12E87D0029C530 /* PBXTargetDependency */ = { 656 | isa = PBXTargetDependency; 657 | target = 80098A6E1C12E87D0029C530 /* Crypto-tvOS */; 658 | targetProxy = 80098A7A1C12E87D0029C530 /* PBXContainerItemProxy */; 659 | }; 660 | /* End PBXTargetDependency section */ 661 | 662 | /* Begin XCBuildConfiguration section */ 663 | 211216511AE68AD3004E1CE6 /* Debug */ = { 664 | isa = XCBuildConfiguration; 665 | buildSettings = { 666 | ALWAYS_SEARCH_USER_PATHS = NO; 667 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 668 | CLANG_CXX_LIBRARY = "libc++"; 669 | CLANG_ENABLE_MODULES = YES; 670 | CLANG_ENABLE_OBJC_ARC = YES; 671 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 672 | CLANG_WARN_BOOL_CONVERSION = YES; 673 | CLANG_WARN_COMMA = YES; 674 | CLANG_WARN_CONSTANT_CONVERSION = YES; 675 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 676 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 677 | CLANG_WARN_EMPTY_BODY = YES; 678 | CLANG_WARN_ENUM_CONVERSION = YES; 679 | CLANG_WARN_INFINITE_RECURSION = YES; 680 | CLANG_WARN_INT_CONVERSION = YES; 681 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 682 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 683 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 684 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 685 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 686 | CLANG_WARN_STRICT_PROTOTYPES = YES; 687 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 688 | CLANG_WARN_UNREACHABLE_CODE = YES; 689 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 690 | COPY_PHASE_STRIP = NO; 691 | CURRENT_PROJECT_VERSION = 1; 692 | DEBUG_INFORMATION_FORMAT = dwarf; 693 | ENABLE_BITCODE = YES; 694 | ENABLE_STRICT_OBJC_MSGSEND = YES; 695 | ENABLE_TESTABILITY = YES; 696 | GCC_C_LANGUAGE_STANDARD = gnu99; 697 | GCC_DYNAMIC_NO_PIC = NO; 698 | GCC_NO_COMMON_BLOCKS = YES; 699 | GCC_OPTIMIZATION_LEVEL = 0; 700 | GCC_PREPROCESSOR_DEFINITIONS = ( 701 | "DEBUG=1", 702 | "$(inherited)", 703 | ); 704 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 705 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 706 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 707 | GCC_WARN_UNDECLARED_SELECTOR = YES; 708 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 709 | GCC_WARN_UNUSED_FUNCTION = YES; 710 | GCC_WARN_UNUSED_VARIABLE = YES; 711 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 712 | MACOSX_DEPLOYMENT_TARGET = 10.9; 713 | MTL_ENABLE_DEBUG_INFO = YES; 714 | ONLY_ACTIVE_ARCH = YES; 715 | SDKROOT = macosx; 716 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 717 | SWIFT_SWIFT3_OBJC_INFERENCE = Off; 718 | SWIFT_VERSION = 5.0; 719 | VERSIONING_SYSTEM = "apple-generic"; 720 | VERSION_INFO_PREFIX = ""; 721 | }; 722 | name = Debug; 723 | }; 724 | 211216521AE68AD3004E1CE6 /* Release */ = { 725 | isa = XCBuildConfiguration; 726 | buildSettings = { 727 | ALWAYS_SEARCH_USER_PATHS = NO; 728 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 729 | CLANG_CXX_LIBRARY = "libc++"; 730 | CLANG_ENABLE_MODULES = YES; 731 | CLANG_ENABLE_OBJC_ARC = YES; 732 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 733 | CLANG_WARN_BOOL_CONVERSION = YES; 734 | CLANG_WARN_COMMA = YES; 735 | CLANG_WARN_CONSTANT_CONVERSION = YES; 736 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 737 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 738 | CLANG_WARN_EMPTY_BODY = YES; 739 | CLANG_WARN_ENUM_CONVERSION = YES; 740 | CLANG_WARN_INFINITE_RECURSION = YES; 741 | CLANG_WARN_INT_CONVERSION = YES; 742 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 743 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 744 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 745 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 746 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 747 | CLANG_WARN_STRICT_PROTOTYPES = YES; 748 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 749 | CLANG_WARN_UNREACHABLE_CODE = YES; 750 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 751 | COPY_PHASE_STRIP = NO; 752 | CURRENT_PROJECT_VERSION = 1; 753 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 754 | ENABLE_BITCODE = YES; 755 | ENABLE_NS_ASSERTIONS = NO; 756 | ENABLE_STRICT_OBJC_MSGSEND = YES; 757 | GCC_C_LANGUAGE_STANDARD = gnu99; 758 | GCC_NO_COMMON_BLOCKS = YES; 759 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 760 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 761 | GCC_WARN_UNDECLARED_SELECTOR = YES; 762 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 763 | GCC_WARN_UNUSED_FUNCTION = YES; 764 | GCC_WARN_UNUSED_VARIABLE = YES; 765 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 766 | MACOSX_DEPLOYMENT_TARGET = 10.9; 767 | MTL_ENABLE_DEBUG_INFO = NO; 768 | SDKROOT = macosx; 769 | SWIFT_COMPILATION_MODE = wholemodule; 770 | SWIFT_SWIFT3_OBJC_INFERENCE = Off; 771 | SWIFT_VERSION = 5.0; 772 | VERSIONING_SYSTEM = "apple-generic"; 773 | VERSION_INFO_PREFIX = ""; 774 | }; 775 | name = Release; 776 | }; 777 | 211216541AE68AD3004E1CE6 /* Debug */ = { 778 | isa = XCBuildConfiguration; 779 | buildSettings = { 780 | APPLICATION_EXTENSION_API_ONLY = YES; 781 | CLANG_ENABLE_MODULES = YES; 782 | CODE_SIGN_IDENTITY = ""; 783 | COMBINE_HIDPI_IMAGES = YES; 784 | DEFINES_MODULE = YES; 785 | DYLIB_COMPATIBILITY_VERSION = 1; 786 | DYLIB_CURRENT_VERSION = 1; 787 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 788 | ENABLE_BITCODE = NO; 789 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 790 | FRAMEWORK_VERSION = A; 791 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 792 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 793 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 794 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 795 | PRODUCT_NAME = Crypto; 796 | SKIP_INSTALL = YES; 797 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 798 | }; 799 | name = Debug; 800 | }; 801 | 211216551AE68AD3004E1CE6 /* Release */ = { 802 | isa = XCBuildConfiguration; 803 | buildSettings = { 804 | APPLICATION_EXTENSION_API_ONLY = YES; 805 | CLANG_ENABLE_MODULES = YES; 806 | CODE_SIGN_IDENTITY = ""; 807 | COMBINE_HIDPI_IMAGES = YES; 808 | DEFINES_MODULE = YES; 809 | DYLIB_COMPATIBILITY_VERSION = 1; 810 | DYLIB_CURRENT_VERSION = 1; 811 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 812 | ENABLE_BITCODE = NO; 813 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 814 | FRAMEWORK_VERSION = A; 815 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 816 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 817 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 818 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 819 | PRODUCT_NAME = Crypto; 820 | SKIP_INSTALL = YES; 821 | }; 822 | name = Release; 823 | }; 824 | 211216571AE68AD3004E1CE6 /* Debug */ = { 825 | isa = XCBuildConfiguration; 826 | buildSettings = { 827 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 828 | COMBINE_HIDPI_IMAGES = YES; 829 | ENABLE_BITCODE = NO; 830 | FRAMEWORK_SEARCH_PATHS = ( 831 | "$(DEVELOPER_FRAMEWORKS_DIR)", 832 | "$(inherited)", 833 | ); 834 | GCC_PREPROCESSOR_DEFINITIONS = ( 835 | "DEBUG=1", 836 | "$(inherited)", 837 | ); 838 | INFOPLIST_FILE = "Support/Tests-Info.plist"; 839 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 840 | PRODUCT_BUNDLE_IDENTIFIER = "com.nothingmagical.$(PRODUCT_NAME:rfc1034identifier)"; 841 | PRODUCT_NAME = "$(TARGET_NAME)"; 842 | }; 843 | name = Debug; 844 | }; 845 | 211216581AE68AD3004E1CE6 /* Release */ = { 846 | isa = XCBuildConfiguration; 847 | buildSettings = { 848 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 849 | COMBINE_HIDPI_IMAGES = YES; 850 | ENABLE_BITCODE = NO; 851 | FRAMEWORK_SEARCH_PATHS = ( 852 | "$(DEVELOPER_FRAMEWORKS_DIR)", 853 | "$(inherited)", 854 | ); 855 | INFOPLIST_FILE = "Support/Tests-Info.plist"; 856 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 857 | PRODUCT_BUNDLE_IDENTIFIER = "com.nothingmagical.$(PRODUCT_NAME:rfc1034identifier)"; 858 | PRODUCT_NAME = "$(TARGET_NAME)"; 859 | }; 860 | name = Release; 861 | }; 862 | 21FD8C6E1AE6B03F008DCDBA /* Debug */ = { 863 | isa = XCBuildConfiguration; 864 | buildSettings = { 865 | APPLICATION_EXTENSION_API_ONLY = YES; 866 | CODE_SIGN_IDENTITY = ""; 867 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 868 | DEFINES_MODULE = YES; 869 | DYLIB_COMPATIBILITY_VERSION = 1; 870 | DYLIB_CURRENT_VERSION = 1; 871 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 872 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 873 | GCC_PREPROCESSOR_DEFINITIONS = ( 874 | "DEBUG=1", 875 | "$(inherited)", 876 | ); 877 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 878 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 879 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 880 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 881 | PRODUCT_NAME = Crypto; 882 | SDKROOT = iphoneos; 883 | SKIP_INSTALL = YES; 884 | TARGETED_DEVICE_FAMILY = "1,2"; 885 | }; 886 | name = Debug; 887 | }; 888 | 21FD8C6F1AE6B03F008DCDBA /* Release */ = { 889 | isa = XCBuildConfiguration; 890 | buildSettings = { 891 | APPLICATION_EXTENSION_API_ONLY = YES; 892 | CODE_SIGN_IDENTITY = ""; 893 | DEFINES_MODULE = YES; 894 | DYLIB_COMPATIBILITY_VERSION = 1; 895 | DYLIB_CURRENT_VERSION = 1; 896 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 897 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 898 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 899 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 900 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 901 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 902 | PRODUCT_NAME = Crypto; 903 | SDKROOT = iphoneos; 904 | SKIP_INSTALL = YES; 905 | TARGETED_DEVICE_FAMILY = "1,2"; 906 | VALIDATE_PRODUCT = YES; 907 | }; 908 | name = Release; 909 | }; 910 | 21FD8C701AE6B03F008DCDBA /* Debug */ = { 911 | isa = XCBuildConfiguration; 912 | buildSettings = { 913 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 914 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 915 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 916 | FRAMEWORK_SEARCH_PATHS = ( 917 | "$(SDKROOT)/Developer/Library/Frameworks", 918 | "$(inherited)", 919 | ); 920 | GCC_PREPROCESSOR_DEFINITIONS = ( 921 | "DEBUG=1", 922 | "$(inherited)", 923 | ); 924 | INFOPLIST_FILE = "Support/Tests-Info.plist"; 925 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 926 | PRODUCT_BUNDLE_IDENTIFIER = "com.nothingmagical.$(PRODUCT_NAME:rfc1034identifier)"; 927 | PRODUCT_NAME = "$(TARGET_NAME)"; 928 | SDKROOT = iphoneos; 929 | }; 930 | name = Debug; 931 | }; 932 | 21FD8C711AE6B03F008DCDBA /* Release */ = { 933 | isa = XCBuildConfiguration; 934 | buildSettings = { 935 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 936 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 937 | FRAMEWORK_SEARCH_PATHS = ( 938 | "$(SDKROOT)/Developer/Library/Frameworks", 939 | "$(inherited)", 940 | ); 941 | INFOPLIST_FILE = "Support/Tests-Info.plist"; 942 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 943 | PRODUCT_BUNDLE_IDENTIFIER = "com.nothingmagical.$(PRODUCT_NAME:rfc1034identifier)"; 944 | PRODUCT_NAME = "$(TARGET_NAME)"; 945 | SDKROOT = iphoneos; 946 | VALIDATE_PRODUCT = YES; 947 | }; 948 | name = Release; 949 | }; 950 | 80098A811C12E87D0029C530 /* Debug */ = { 951 | isa = XCBuildConfiguration; 952 | buildSettings = { 953 | APPLICATION_EXTENSION_API_ONLY = YES; 954 | CODE_SIGN_IDENTITY = ""; 955 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 956 | DEFINES_MODULE = YES; 957 | DYLIB_COMPATIBILITY_VERSION = 1; 958 | DYLIB_CURRENT_VERSION = 1; 959 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 960 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 961 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 962 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 963 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 964 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 965 | PRODUCT_NAME = Crypto; 966 | SDKROOT = appletvos; 967 | SKIP_INSTALL = YES; 968 | TARGETED_DEVICE_FAMILY = 3; 969 | TVOS_DEPLOYMENT_TARGET = 9.0; 970 | }; 971 | name = Debug; 972 | }; 973 | 80098A821C12E87D0029C530 /* Release */ = { 974 | isa = XCBuildConfiguration; 975 | buildSettings = { 976 | APPLICATION_EXTENSION_API_ONLY = YES; 977 | CODE_SIGN_IDENTITY = ""; 978 | DEFINES_MODULE = YES; 979 | DYLIB_COMPATIBILITY_VERSION = 1; 980 | DYLIB_CURRENT_VERSION = 1; 981 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 982 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 983 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 984 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 985 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 986 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 987 | PRODUCT_NAME = Crypto; 988 | SDKROOT = appletvos; 989 | SKIP_INSTALL = YES; 990 | TARGETED_DEVICE_FAMILY = 3; 991 | TVOS_DEPLOYMENT_TARGET = 9.0; 992 | VALIDATE_PRODUCT = YES; 993 | }; 994 | name = Release; 995 | }; 996 | 80098A841C12E87D0029C530 /* Debug */ = { 997 | isa = XCBuildConfiguration; 998 | buildSettings = { 999 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1000 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1001 | INFOPLIST_FILE = "Support/Tests-Info.plist"; 1002 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1003 | PRODUCT_BUNDLE_IDENTIFIER = "com.nothingmagical.$(PRODUCT_NAME:rfc1034identifier)"; 1004 | PRODUCT_NAME = "$(TARGET_NAME)"; 1005 | SDKROOT = appletvos; 1006 | TVOS_DEPLOYMENT_TARGET = 9.0; 1007 | }; 1008 | name = Debug; 1009 | }; 1010 | 80098A851C12E87D0029C530 /* Release */ = { 1011 | isa = XCBuildConfiguration; 1012 | buildSettings = { 1013 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 1014 | INFOPLIST_FILE = "Support/Tests-Info.plist"; 1015 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1016 | PRODUCT_BUNDLE_IDENTIFIER = "com.nothingmagical.$(PRODUCT_NAME:rfc1034identifier)"; 1017 | PRODUCT_NAME = "$(TARGET_NAME)"; 1018 | SDKROOT = appletvos; 1019 | TVOS_DEPLOYMENT_TARGET = 9.0; 1020 | VALIDATE_PRODUCT = YES; 1021 | }; 1022 | name = Release; 1023 | }; 1024 | 8045033D1BA20F37002A5470 /* Debug */ = { 1025 | isa = XCBuildConfiguration; 1026 | buildSettings = { 1027 | APPLICATION_EXTENSION_API_ONLY = YES; 1028 | CODE_SIGN_IDENTITY = ""; 1029 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1030 | DEFINES_MODULE = YES; 1031 | DYLIB_COMPATIBILITY_VERSION = 1; 1032 | DYLIB_CURRENT_VERSION = 1; 1033 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 1034 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 1035 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 1036 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 1037 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1038 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 1039 | PRODUCT_NAME = Crypto; 1040 | SDKROOT = watchos; 1041 | SKIP_INSTALL = YES; 1042 | TARGETED_DEVICE_FAMILY = 4; 1043 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 1044 | }; 1045 | name = Debug; 1046 | }; 1047 | 8045033E1BA20F37002A5470 /* Release */ = { 1048 | isa = XCBuildConfiguration; 1049 | buildSettings = { 1050 | APPLICATION_EXTENSION_API_ONLY = YES; 1051 | CODE_SIGN_IDENTITY = ""; 1052 | DEFINES_MODULE = YES; 1053 | DYLIB_COMPATIBILITY_VERSION = 1; 1054 | DYLIB_CURRENT_VERSION = 1; 1055 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 1056 | FRAMEWORK_SEARCH_PATHS = "$(inherited)"; 1057 | INFOPLIST_FILE = "$(SRCROOT)/Support/Info.plist"; 1058 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 1059 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1060 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.crypto; 1061 | PRODUCT_NAME = Crypto; 1062 | SDKROOT = watchos; 1063 | SKIP_INSTALL = YES; 1064 | TARGETED_DEVICE_FAMILY = 4; 1065 | VALIDATE_PRODUCT = YES; 1066 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 1067 | }; 1068 | name = Release; 1069 | }; 1070 | /* End XCBuildConfiguration section */ 1071 | 1072 | /* Begin XCConfigurationList section */ 1073 | 211216371AE68AD2004E1CE6 /* Build configuration list for PBXProject "Crypto" */ = { 1074 | isa = XCConfigurationList; 1075 | buildConfigurations = ( 1076 | 211216511AE68AD3004E1CE6 /* Debug */, 1077 | 211216521AE68AD3004E1CE6 /* Release */, 1078 | ); 1079 | defaultConfigurationIsVisible = 0; 1080 | defaultConfigurationName = Release; 1081 | }; 1082 | 211216531AE68AD3004E1CE6 /* Build configuration list for PBXNativeTarget "Crypto-macOS" */ = { 1083 | isa = XCConfigurationList; 1084 | buildConfigurations = ( 1085 | 211216541AE68AD3004E1CE6 /* Debug */, 1086 | 211216551AE68AD3004E1CE6 /* Release */, 1087 | ); 1088 | defaultConfigurationIsVisible = 0; 1089 | defaultConfigurationName = Release; 1090 | }; 1091 | 211216561AE68AD3004E1CE6 /* Build configuration list for PBXNativeTarget "CryptoTests-macOS" */ = { 1092 | isa = XCConfigurationList; 1093 | buildConfigurations = ( 1094 | 211216571AE68AD3004E1CE6 /* Debug */, 1095 | 211216581AE68AD3004E1CE6 /* Release */, 1096 | ); 1097 | defaultConfigurationIsVisible = 0; 1098 | defaultConfigurationName = Release; 1099 | }; 1100 | 21FD8C721AE6B03F008DCDBA /* Build configuration list for PBXNativeTarget "Crypto-iOS" */ = { 1101 | isa = XCConfigurationList; 1102 | buildConfigurations = ( 1103 | 21FD8C6E1AE6B03F008DCDBA /* Debug */, 1104 | 21FD8C6F1AE6B03F008DCDBA /* Release */, 1105 | ); 1106 | defaultConfigurationIsVisible = 0; 1107 | defaultConfigurationName = Release; 1108 | }; 1109 | 21FD8C731AE6B03F008DCDBA /* Build configuration list for PBXNativeTarget "CryptoTests-iOS" */ = { 1110 | isa = XCConfigurationList; 1111 | buildConfigurations = ( 1112 | 21FD8C701AE6B03F008DCDBA /* Debug */, 1113 | 21FD8C711AE6B03F008DCDBA /* Release */, 1114 | ); 1115 | defaultConfigurationIsVisible = 0; 1116 | defaultConfigurationName = Release; 1117 | }; 1118 | 80098A801C12E87D0029C530 /* Build configuration list for PBXNativeTarget "Crypto-tvOS" */ = { 1119 | isa = XCConfigurationList; 1120 | buildConfigurations = ( 1121 | 80098A811C12E87D0029C530 /* Debug */, 1122 | 80098A821C12E87D0029C530 /* Release */, 1123 | ); 1124 | defaultConfigurationIsVisible = 0; 1125 | defaultConfigurationName = Release; 1126 | }; 1127 | 80098A831C12E87D0029C530 /* Build configuration list for PBXNativeTarget "CryptoTests-tvOS" */ = { 1128 | isa = XCConfigurationList; 1129 | buildConfigurations = ( 1130 | 80098A841C12E87D0029C530 /* Debug */, 1131 | 80098A851C12E87D0029C530 /* Release */, 1132 | ); 1133 | defaultConfigurationIsVisible = 0; 1134 | defaultConfigurationName = Release; 1135 | }; 1136 | 8045033C1BA20F37002A5470 /* Build configuration list for PBXNativeTarget "Crypto-watchOS" */ = { 1137 | isa = XCConfigurationList; 1138 | buildConfigurations = ( 1139 | 8045033D1BA20F37002A5470 /* Debug */, 1140 | 8045033E1BA20F37002A5470 /* Release */, 1141 | ); 1142 | defaultConfigurationIsVisible = 0; 1143 | defaultConfigurationName = Release; 1144 | }; 1145 | /* End XCConfigurationList section */ 1146 | }; 1147 | rootObject = 211216341AE68AD2004E1CE6 /* Project object */; 1148 | } 1149 | -------------------------------------------------------------------------------- /Crypto.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Crypto.xcodeproj/xcshareddata/xcschemes/Crypto-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Crypto.xcodeproj/xcshareddata/xcschemes/Crypto-macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Crypto.xcodeproj/xcshareddata/xcschemes/Crypto-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /Crypto.xcodeproj/xcshareddata/xcschemes/Crypto-watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015–2019 Sam Soffes, https://soff.es 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0.0 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "Crypto", 7 | products: [ 8 | .library(name: "Crypto", targets: ["Crypto"]) 9 | ], 10 | targets: [ 11 | .target(name: "Crypto"), 12 | .testTarget(name: "CryptoTests", dependencies: ["Crypto"]) 13 | ] 14 | ) 15 | -------------------------------------------------------------------------------- /Readme.markdown: -------------------------------------------------------------------------------- 1 | # Crypto 2 | 3 | [![Version](https://img.shields.io/github/release/soffes/Crypto.svg)](https://github.com/soffes/Crypto/releases) 4 | ![Swift Version](https://img.shields.io/badge/swift-5.0-orange.svg) 5 | [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) 6 | 7 | Simple CommonCrypto wrapper for Swift for macOS, iOS, watchOS, and tvOS with [Carthage](https://github.com/carthage/carthage) support. 8 | 9 | Released under the [MIT license](LICENSE). Enjoy. 10 | 11 | 12 | ## Installation 13 | 14 | [Carthage](https://github.com/carthage/carthage) is the recommended way to install Crypto. Add the following to your Cartfile: 15 | 16 | ``` ruby 17 | github "soffes/Crypto" 18 | ``` 19 | 20 | Note: this library depends on [CommonCrypto](https://github.com/soffes/CommonCrypto), so you'll need to add both Crypto and CommonCrypto to your project. 21 | 22 | 23 | ## Documentation 24 | 25 | Currently, only digest and HMAC are supported. 26 | 27 | ### Digest 28 | 29 | There are extensions for `Data` and `String` for convenience: 30 | 31 | ``` swift 32 | import Crypto 33 | 34 | "sam".sha1 // "f16bed56189e249fe4ca8ed10a1ecae60e8ceac0" 35 | data.sha1 // 36 | ``` 37 | 38 | MD2, MD4, MD5, SHA1, SHA224, SHA256, SHA384, SHA512 are available. 39 | 40 | You can also use `Digest` directly: 41 | 42 | ```swift 43 | Digest.md5(bytes: data.bytes, length: data.length) // [UInt8] 44 | ``` 45 | 46 | ### HMAC 47 | 48 | [HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code) in CommonCrypto is also supported. 49 | 50 | ```swift 51 | HMAC.sign(message: "sam", algorithm: .sha1, key: "secret") // 1a90fa4e73686dfca75f5411d9fb81951edf1292 52 | 53 | HMAC.sign(data: messageData, algorithm: .sha1, key: keyData) // 54 | ``` 55 | 56 | MD5, SHA1, SHA224, SHA256, SHA384, SHA512 are the available algorithms. 57 | 58 | 59 | ## Roadmap 60 | 61 | This is a work in progress. 62 | 63 | - [ ] Cryptor 64 | - [x] Digest 65 | - [x] HMAC 66 | - [ ] Key Derivation 67 | - [ ] Random 68 | - [ ] Symmetric Key Wrap 69 | -------------------------------------------------------------------------------- /Sources/Crypto/Data+Crypto.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import CommonCrypto 3 | 4 | extension Data { 5 | 6 | // MARK: - Digest 7 | 8 | public var md2: Data { 9 | return digest(Digest.md2) 10 | } 11 | 12 | public var md4: Data { 13 | return digest(Digest.md4) 14 | } 15 | 16 | public var md5: Data { 17 | return digest(Digest.md5) 18 | } 19 | 20 | public var sha1: Data { 21 | return digest(Digest.sha1) 22 | } 23 | 24 | public var sha224: Data { 25 | return digest(Digest.sha224) 26 | } 27 | 28 | public var sha256: Data { 29 | return digest(Digest.sha256) 30 | } 31 | 32 | public var sha384: Data { 33 | return digest(Digest.sha384) 34 | } 35 | 36 | public var sha512: Data { 37 | return digest(Digest.sha512) 38 | } 39 | 40 | private func digest(_ function: ((UnsafeRawBufferPointer, UInt32) -> [UInt8])) -> Data { 41 | var hash: [UInt8] = [] 42 | withUnsafeBytes { hash = function($0, UInt32(count)) } 43 | return Data(bytes: hash, count: hash.count) 44 | } 45 | 46 | // MARK: - HMAC 47 | 48 | public func hmac(key: Data, algorithm: Crypto.HMAC.Algorithm) -> Data { 49 | return HMAC.sign(data: self, algorithm: algorithm, key: key) 50 | } 51 | 52 | // MARK: - Internal 53 | 54 | var hex: String { 55 | return map { String(format: "%02x", $0) }.reduce("", +) 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Sources/Crypto/Digest.swift: -------------------------------------------------------------------------------- 1 | import CommonCrypto 2 | 3 | public struct Digest { 4 | public static func md2(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 5 | var hash = [UInt8](repeating: 0, count: Int(CC_MD2_DIGEST_LENGTH)) 6 | CC_MD2(bytes.baseAddress, length, &hash) 7 | return hash 8 | } 9 | 10 | public static func md4(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 11 | var hash = [UInt8](repeating: 0, count: Int(CC_MD4_DIGEST_LENGTH)) 12 | CC_MD4(bytes.baseAddress, length, &hash) 13 | return hash 14 | } 15 | 16 | public static func md5(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 17 | var hash = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) 18 | CC_MD5(bytes.baseAddress, length, &hash) 19 | return hash 20 | } 21 | 22 | public static func sha1(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 23 | var hash = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) 24 | CC_SHA1(bytes.baseAddress, length, &hash) 25 | return hash 26 | } 27 | 28 | public static func sha224(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 29 | var hash = [UInt8](repeating: 0, count: Int(CC_SHA224_DIGEST_LENGTH)) 30 | CC_SHA224(bytes.baseAddress, length, &hash) 31 | return hash 32 | } 33 | 34 | public static func sha256(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 35 | var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) 36 | CC_SHA256(bytes.baseAddress, length, &hash) 37 | return hash 38 | } 39 | 40 | public static func sha384(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 41 | var hash = [UInt8](repeating: 0, count: Int(CC_SHA384_DIGEST_LENGTH)) 42 | CC_SHA384(bytes.baseAddress, length, &hash) 43 | return hash 44 | } 45 | 46 | public static func sha512(bytes: UnsafeRawBufferPointer, length: UInt32) -> [UInt8] { 47 | var hash = [UInt8](repeating: 0, count: Int(CC_SHA512_DIGEST_LENGTH)) 48 | CC_SHA512(bytes.baseAddress, length, &hash) 49 | return hash 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Sources/Crypto/HMAC.swift: -------------------------------------------------------------------------------- 1 | import CommonCrypto 2 | import Foundation 3 | 4 | public struct HMAC { 5 | 6 | // MARK: - Types 7 | 8 | public enum Algorithm { 9 | case sha1 10 | case md5 11 | case sha256 12 | case sha384 13 | case sha512 14 | case sha224 15 | 16 | public var algorithm: CCHmacAlgorithm { 17 | switch self { 18 | case .md5: return CCHmacAlgorithm(kCCHmacAlgMD5) 19 | case .sha1: return CCHmacAlgorithm(kCCHmacAlgSHA1) 20 | case .sha224: return CCHmacAlgorithm(kCCHmacAlgSHA224) 21 | case .sha256: return CCHmacAlgorithm(kCCHmacAlgSHA256) 22 | case .sha384: return CCHmacAlgorithm(kCCHmacAlgSHA384) 23 | case .sha512: return CCHmacAlgorithm(kCCHmacAlgSHA512) 24 | } 25 | } 26 | 27 | public var digestLength: Int { 28 | switch self { 29 | case .md5: return Int(CC_MD5_DIGEST_LENGTH) 30 | case .sha1: return Int(CC_SHA1_DIGEST_LENGTH) 31 | case .sha224: return Int(CC_SHA224_DIGEST_LENGTH) 32 | case .sha256: return Int(CC_SHA256_DIGEST_LENGTH) 33 | case .sha384: return Int(CC_SHA384_DIGEST_LENGTH) 34 | case .sha512: return Int(CC_SHA512_DIGEST_LENGTH) 35 | } 36 | } 37 | } 38 | 39 | // MARK: - Signing 40 | 41 | public static func sign(data: Data, algorithm: Algorithm, key: Data) -> Data { 42 | let signature = UnsafeMutablePointer.allocate(capacity: algorithm.digestLength) 43 | defer { signature.deallocate() } 44 | 45 | data.withUnsafeBytes { dataBytes in 46 | key.withUnsafeBytes { keyBytes in 47 | CCHmac(algorithm.algorithm, keyBytes.baseAddress, key.count, dataBytes.baseAddress, data.count, signature) 48 | } 49 | } 50 | 51 | return Data(bytes: signature, count: algorithm.digestLength) 52 | } 53 | 54 | public static func sign(message: String, algorithm: Algorithm, key: String) -> String? { 55 | guard let messageData = message.data(using: .utf8), 56 | let keyData = key.data(using: .utf8) 57 | else { return nil } 58 | 59 | return sign(data: messageData, algorithm: algorithm, key: keyData).hex 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /Sources/Crypto/String+Crypto.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | import CommonCrypto 3 | 4 | extension String { 5 | 6 | // MARK: - Digest 7 | 8 | public var md2: String? { 9 | return hashData?.md2.hex 10 | } 11 | 12 | public var md4: String? { 13 | return hashData?.md4.hex 14 | } 15 | 16 | public var md5: String? { 17 | return hashData?.md5.hex 18 | } 19 | 20 | public var sha1: String? { 21 | return hashData?.sha1.hex 22 | } 23 | 24 | public var sha224: String? { 25 | return hashData?.sha224.hex 26 | } 27 | 28 | public var sha256: String? { 29 | return hashData?.sha256.hex 30 | } 31 | 32 | public var sha384: String? { 33 | return hashData?.sha384.hex 34 | } 35 | 36 | public var sha512: String? { 37 | return hashData?.sha512.hex 38 | } 39 | 40 | // MARK: - HMAC 41 | 42 | public func hmac(key: String, algorithm: Crypto.HMAC.Algorithm) -> String? { 43 | return Crypto.HMAC.sign(message: self, algorithm: algorithm, key: key) 44 | } 45 | 46 | // MARK: - Private 47 | 48 | private var hashData: Data? { 49 | return data(using: .utf8) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Support/Crypto.h: -------------------------------------------------------------------------------- 1 | @import Foundation; 2 | 3 | //! Project version number for Crypto. 4 | FOUNDATION_EXPORT double CryptoVersionNumber; 5 | 6 | //! Project version string for Crypto. 7 | FOUNDATION_EXPORT const unsigned char CryptoVersionString[]; 8 | -------------------------------------------------------------------------------- /Support/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.6.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Sam Soffes. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Support/Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Tests/CryptoTests/DigestTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Crypto 3 | 4 | class DigestTests: XCTestCase { 5 | func testMD2() { 6 | XCTAssertEqual("3b68484d8f4aa7471d4d7a4f3a3650f9", "sam".md2) 7 | } 8 | 9 | func testMD4() { 10 | XCTAssertEqual("cd7d17e2d1b18fe34e1a7cc26c1afdf1", "sam".md4) 11 | } 12 | 13 | func testMD5() { 14 | XCTAssertEqual("332532dcfaa1cbf61e2a266bd723612c", "sam".md5) 15 | } 16 | 17 | func testSHA1() { 18 | XCTAssertEqual("f16bed56189e249fe4ca8ed10a1ecae60e8ceac0", "sam".sha1) 19 | } 20 | 21 | func testSHA224() { 22 | XCTAssertEqual("3e158867fde8c88755ad7d28ac2525c612df7957efb527783ca41328", "sam".sha224) 23 | } 24 | 25 | func testSHA256() { 26 | XCTAssertEqual("e96e02d8e47f2a7c03be5117b3ed175c52aa30fb22028cf9c96f261563577605", "sam".sha256) 27 | } 28 | 29 | func testSHA384() { 30 | XCTAssertEqual("f43211f34235f416ed799126e46ff3b77155acff484eec2bbe93e081082a30e3dd7462217470747fdc8bc4fb9facf205", "sam".sha384) 31 | } 32 | 33 | func testSHA512() { 34 | XCTAssertEqual("aa9a88785afb81fcb66da5b86d0aaf543dd883c8cf1e74f2f42c62195006606c69613170d56d2ecb8db6fb03f5acb6bdd0ffaf54bdf788854ddafc6becfdf3c7", "sam".sha512) 35 | } 36 | 37 | static var allTests = [ 38 | ("testMD2", testMD2), 39 | ("testMD4", testMD4), 40 | ("testMD5", testMD5), 41 | ("testSHA1", testSHA1), 42 | ("testSHA224", testSHA224), 43 | ("testSHA256", testSHA256), 44 | ("testSHA384", testSHA384), 45 | ("testSHA512", testSHA512), 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /Tests/CryptoTests/HMACTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import Crypto 3 | 4 | class HMACTests: XCTestCase { 5 | 6 | let key = "secret" 7 | let message = "sam" 8 | 9 | func testMD5() { 10 | let signature = HMAC.sign(message: message, algorithm: .md5, key: key) 11 | XCTAssertEqual("0266f2e4980a1540f128da1d32166391", signature) 12 | } 13 | 14 | func testSHA1() { 15 | let signature = HMAC.sign(message: message, algorithm: .sha1, key: key) 16 | XCTAssertEqual("1a90fa4e73686dfca75f5411d9fb81951edf1292", signature) 17 | } 18 | 19 | func testSHA224() { 20 | let signature = HMAC.sign(message: message, algorithm: .sha224, key: key) 21 | XCTAssertEqual("e9c2dc5a9fbd278db52e37a7cbfb9f2897774287daaa0bb33a4f98f5", signature) 22 | } 23 | 24 | func testSHA256() { 25 | let signature = HMAC.sign(message: message, algorithm: .sha256, key: key) 26 | XCTAssertEqual("6d2f3199a75036d1bd819961a149641ebe540aae0b10bbb821f0cb98039b1a7b", signature) 27 | } 28 | 29 | func testSHA384() { 30 | let signature = HMAC.sign(message: message, algorithm: .sha384, key: key) 31 | XCTAssertEqual("2fad06c8d32e66d33c3b24e290e37f59cd4470207d7749cbabbe8ea7d751077badc1e6d18b863b968c81ff92cbeccecd", signature) 32 | } 33 | 34 | func testSHA512() { 35 | let signature = HMAC.sign(message: message, algorithm: .sha512, key: key) 36 | XCTAssertEqual("4b49d3f9dfa51eaf638b85c2887875144ad5dafeacefdcc72bd73f19f2ae2a7ae182ee2e3f6684b7f042d8d122c4558b64be8b072ce9a69a1ceb96aa688cadfd", signature) 37 | } 38 | 39 | static var allTests = [ 40 | ("testMD5", testMD5), 41 | ("testSHA1", testSHA1), 42 | ("testSHA224", testSHA224), 43 | ("testSHA256", testSHA256), 44 | ("testSHA384", testSHA384), 45 | ("testSHA512", testSHA512), 46 | ] 47 | } 48 | -------------------------------------------------------------------------------- /Tests/CryptoTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | #if !canImport(ObjectiveC) 2 | import XCTest 3 | 4 | extension DigestTests { 5 | // DO NOT MODIFY: This is autogenerated, use: 6 | // `swift test --generate-linuxmain` 7 | // to regenerate. 8 | static let __allTests__DigestTests = [ 9 | ("testMD2", testMD2), 10 | ("testMD4", testMD4), 11 | ("testMD5", testMD5), 12 | ("testSHA1", testSHA1), 13 | ("testSHA224", testSHA224), 14 | ("testSHA256", testSHA256), 15 | ("testSHA384", testSHA384), 16 | ("testSHA512", testSHA512), 17 | ] 18 | } 19 | 20 | extension HMACTests { 21 | // DO NOT MODIFY: This is autogenerated, use: 22 | // `swift test --generate-linuxmain` 23 | // to regenerate. 24 | static let __allTests__HMACTests = [ 25 | ("testMD5", testMD5), 26 | ("testSHA1", testSHA1), 27 | ("testSHA224", testSHA224), 28 | ("testSHA256", testSHA256), 29 | ("testSHA384", testSHA384), 30 | ("testSHA512", testSHA512), 31 | ] 32 | } 33 | 34 | public func __allTests() -> [XCTestCaseEntry] { 35 | return [ 36 | testCase(DigestTests.__allTests__DigestTests), 37 | testCase(HMACTests.__allTests__HMACTests), 38 | ] 39 | } 40 | #endif 41 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import CryptoTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += CryptoTests.__allTests() 7 | 8 | XCTMain(tests) 9 | --------------------------------------------------------------------------------