Showing preview only (1,310K chars total). Download the full file or copy to clipboard to get everything.
Repository: krzyzanowskim/CryptoSwift
Branch: main
Commit: a2acb6155f49
Files: 203
Total size: 1.2 MB
Directory structure:
gitextract_0h7qiraw/
├── .editorconfig
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── android.yml
│ ├── linux.yml
│ └── macos.yml
├── .gitignore
├── .mailmap
├── .spi.yml
├── .swiftformat
├── CHANGELOG
├── CNAME
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTORS.txt
├── CryptoSwift-TestHostApp/
│ ├── AppDelegate.swift
│ └── Info.plist
├── CryptoSwift.podspec
├── CryptoSwift.xcodeproj/
│ ├── project.pbxproj
│ ├── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── CryptoSwift.xcscmblueprint
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata/
│ ├── IDETemplateMacros.plist
│ └── xcschemes/
│ ├── CryptoSwift-TestHostApp.xcscheme
│ ├── CryptoSwift.xcscheme
│ ├── Tests.xcscheme
│ ├── TestsPerformance-Mac.xcscheme
│ └── TestsPerformance-iOS.xcscheme
├── Info.plist
├── LICENSE
├── Makefile
├── Package.swift
├── README.md
├── Sources/
│ ├── CryptoSwift/
│ │ ├── AEAD/
│ │ │ ├── AEAD.swift
│ │ │ ├── AEADChaCha20Poly1305.swift
│ │ │ └── AEADXChaCha20Poly1305.swift
│ │ ├── AES.Cryptors.swift
│ │ ├── AES.swift
│ │ ├── ASN1/
│ │ │ ├── ASN1.swift
│ │ │ ├── ASN1Decoder.swift
│ │ │ ├── ASN1Encoder.swift
│ │ │ └── ASN1Scanner.swift
│ │ ├── Array+Extension.swift
│ │ ├── Authenticator.swift
│ │ ├── BatchedCollection.swift
│ │ ├── Bit.swift
│ │ ├── BlockCipher.swift
│ │ ├── BlockDecryptor.swift
│ │ ├── BlockEncryptor.swift
│ │ ├── BlockMode/
│ │ │ ├── BlockMode.swift
│ │ │ ├── BlockModeOptions.swift
│ │ │ ├── CBC.swift
│ │ │ ├── CCM.swift
│ │ │ ├── CFB.swift
│ │ │ ├── CTR.swift
│ │ │ ├── CipherModeWorker.swift
│ │ │ ├── ECB.swift
│ │ │ ├── GCM.swift
│ │ │ ├── OCB.swift
│ │ │ ├── OFB.swift
│ │ │ └── PCBC.swift
│ │ ├── Blowfish.swift
│ │ ├── CBCMAC.swift
│ │ ├── CMAC.swift
│ │ ├── CS_BigInt/
│ │ │ ├── Addition.swift
│ │ │ ├── BigInt.swift
│ │ │ ├── BigUInt.swift
│ │ │ ├── BitwiseOps.swift
│ │ │ ├── CS.swift
│ │ │ ├── Codable.swift
│ │ │ ├── Comparable.swift
│ │ │ ├── DataConversion.swift
│ │ │ ├── Division.swift
│ │ │ ├── Exponentiation.swift
│ │ │ ├── FloatingPointConversion.swift
│ │ │ ├── GCD.swift
│ │ │ ├── Hashable.swift
│ │ │ ├── IntegerConversion.swift
│ │ │ ├── Multiplication.swift
│ │ │ ├── PrimeTest.swift
│ │ │ ├── Random.swift
│ │ │ ├── Shifts.swift
│ │ │ ├── SquareRoot.swift
│ │ │ ├── Strideable.swift
│ │ │ ├── StringConversion.swift
│ │ │ ├── Subtraction.swift
│ │ │ └── WordsAndBits.swift
│ │ ├── ChaCha20.swift
│ │ ├── Checksum.swift
│ │ ├── Cipher.swift
│ │ ├── Collection+Extension.swift
│ │ ├── CompactMap.swift
│ │ ├── Cryptor.swift
│ │ ├── Cryptors.swift
│ │ ├── Digest.swift
│ │ ├── DigestType.swift
│ │ ├── Foundation/
│ │ │ ├── AES+Foundation.swift
│ │ │ ├── Array+Foundation.swift
│ │ │ ├── Blowfish+Foundation.swift
│ │ │ ├── ChaCha20+Foundation.swift
│ │ │ ├── Data+Extension.swift
│ │ │ ├── HMAC+Foundation.swift
│ │ │ ├── Rabbit+Foundation.swift
│ │ │ ├── String+FoundationExtension.swift
│ │ │ ├── Utils+Foundation.swift
│ │ │ └── XChaCha20+Foundation.swift
│ │ ├── Generics.swift
│ │ ├── HKDF.swift
│ │ ├── HMAC.swift
│ │ ├── ISO10126Padding.swift
│ │ ├── ISO78164Padding.swift
│ │ ├── Int+Extension.swift
│ │ ├── MD5.swift
│ │ ├── NoPadding.swift
│ │ ├── Operators.swift
│ │ ├── PEM/
│ │ │ └── DER.swift
│ │ ├── PKCS/
│ │ │ ├── PBKDF1.swift
│ │ │ ├── PBKDF2.swift
│ │ │ ├── PKCS1v15.swift
│ │ │ ├── PKCS5.swift
│ │ │ ├── PKCS7.swift
│ │ │ └── PKCS7Padding.swift
│ │ ├── Padding.swift
│ │ ├── Poly1305.swift
│ │ ├── PrivacyInfo.xcprivacy
│ │ ├── RSA/
│ │ │ ├── RSA+Cipher.swift
│ │ │ ├── RSA+Signature.swift
│ │ │ └── RSA.swift
│ │ ├── Rabbit.swift
│ │ ├── SHA1.swift
│ │ ├── SHA2.swift
│ │ ├── SHA3.swift
│ │ ├── Scrypt.swift
│ │ ├── SecureBytes.swift
│ │ ├── Signature.swift
│ │ ├── StreamDecryptor.swift
│ │ ├── StreamEncryptor.swift
│ │ ├── String+Extension.swift
│ │ ├── UInt128.swift
│ │ ├── UInt16+Extension.swift
│ │ ├── UInt32+Extension.swift
│ │ ├── UInt64+Extension.swift
│ │ ├── UInt8+Extension.swift
│ │ ├── Updatable.swift
│ │ ├── Utils.swift
│ │ ├── XChaCha20.swift
│ │ └── ZeroPadding.swift
│ └── CryptoSwift.h
├── Tests/
│ ├── CryptoSwiftTests/
│ │ ├── AESCCMTests.swift
│ │ ├── AESOCBTests.swift
│ │ ├── AESTests.swift
│ │ ├── AESTestsPerf.swift
│ │ ├── ASN1Tests.swift
│ │ ├── Access.swift
│ │ ├── BlowfishTests.swift
│ │ ├── Bridging.h
│ │ ├── CBCMacTests.swift
│ │ ├── CMACTests.swift
│ │ ├── ChaCha20Poly1305Tests.swift
│ │ ├── ChaCha20Tests.swift
│ │ ├── ChaCha20TestsPerf.swift
│ │ ├── DigestTests.swift
│ │ ├── DigestTestsPerf.swift
│ │ ├── Error+Extension.swift
│ │ ├── ExtensionsTest.swift
│ │ ├── ExtensionsTestPerf.swift
│ │ ├── HKDFTests.swift
│ │ ├── HMACTests.swift
│ │ ├── PBKDF.swift
│ │ ├── PBKDFPerf.swift
│ │ ├── PaddingTests.swift
│ │ ├── Poly1305Tests.swift
│ │ ├── RSASecKeyTests.swift
│ │ ├── RSATests.swift
│ │ ├── RabbitTests.swift
│ │ ├── RabbitTestsPerf.swift
│ │ ├── SHATestsPerf.swift
│ │ ├── ScryptTests.swift
│ │ ├── ScryptTestsPerf.swift
│ │ ├── SignatureVerificationTests.swift
│ │ ├── XCTestManifests.swift
│ │ ├── XChaCha20Poly1305Tests.swift
│ │ └── XChaCha20Tests.swift
│ ├── LinuxMain.swift
│ └── TestsPerformance/
│ └── XCTestManifests.swift
├── _config.yml
├── config/
│ ├── CryptoSwift-Debug.xcconfig
│ ├── CryptoSwift-Release.xcconfig
│ ├── CryptoSwift-Shared.xcconfig
│ ├── CryptoSwift-Test.xcconfig
│ ├── CryptoSwift-TestHostApp-Shared.xcconfig
│ ├── CryptoSwift-TestHostApp-Test.xcconfig
│ ├── Project-Debug.xcconfig
│ ├── Project-Release.xcconfig
│ ├── Project-Shared.xcconfig
│ ├── Tests-Shared.xcconfig
│ └── Tests-Test.xcconfig
└── scripts/
├── build-framework.sh
├── generate-contributors-list.sh
└── swiftformat.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
[*]
end_of_line = lf
insert_final_newline = true
[*.swift]
charset = utf-8
indent_style = space
indent_size = 2
[Makefile]
indent_style = tab
================================================
FILE: .github/CODEOWNERS
================================================
* @krzyzanowskim
================================================
FILE: .github/FUNDING.yml
================================================
github: [krzyzanowskim, NathanFallet]
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
---
**Describe the bug**
**Reproduce**
Steps to reproduce:
1.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Fixes #
Checklist:
- [ ] Correct file headers (see CONTRIBUTING.md).
- [ ] Formatted with [SwiftFormat](https://github.com/nicklockwood/SwiftFormat).
- [ ] Tests added.
Changes proposed in this pull request:
-
================================================
FILE: .github/workflows/android.yml
================================================
name: Android
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run tests
uses: skiptools/swift-android-action@v2
================================================
FILE: .github/workflows/linux.yml
================================================
name: Linux
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Swift Package Build
run: swift build -v
- name: Run tests
run: swift test -c release -Xswiftc -enable-testing -Xswiftc -DCI -Xswiftc -Xfrontend -Xswiftc -solver-memory-threshold -Xswiftc -Xfrontend -Xswiftc 999999999
================================================
FILE: .github/workflows/macos.yml
================================================
name: macOS
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Select Xcode Version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Swift Package Build
run: swift build -v
- name: Run tests
run: swift test -c release -Xswiftc -enable-testing -Xswiftc -DCI -Xswiftc -Xfrontend -Xswiftc -solver-memory-threshold -Xswiftc -Xfrontend -Xswiftc 999999999
================================================
FILE: .gitignore
================================================
### Xcode ###
.build/
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.xcuserstate
timeline.xctimeline
.swiftpm/xcode
Package.resolved
CryptoSwift.xcframework
/Framework
.DS_Store
Carthage/Build
.idea
.vscode
================================================
FILE: .mailmap
================================================
Marcin Krzyzanowski <marcin.krzyzanowski@gmail.com> <758033+krzyzanowskim@users.noreply.github.com>
Marcin Krzyzanowski <marcin.krzyzanowski@gmail.com> <krzyzanowskim@users.noreply.github.com>
Marcin Krzyzanowski <marcin.krzyzanowski@gmail.com> <marcin@krzyzanowskim.com>
Marcin Krzyzanowski <marcin.krzyzanowski@gmail.com> <marcin.krzyzanowski@gmail.com>
Luis Reisewitz <reisewitz@me.com> <zweigraf@users.noreply.github.com>
Nathan Fallet <contact@nathanfallet.me> <nathan.fallet@gmail.com>
================================================
FILE: .spi.yml
================================================
version: 1
builder:
configs:
- documentation_targets: [CryptoSwift]
================================================
FILE: .swiftformat
================================================
--exclude .build, Carthage, DerivedData, .git, Tests/LinuxMain.swift, Tests/CryptoSwiftTests/XCTestManifests.swift, Tests/TestsPerformance/XCTestManifests.swift
--swiftversion 5.0
--allman false
--commas always
--comments indent
--elseposition same-line
--empty void
--exponentcase lowercase
--exponentgrouping disabled
--fractiongrouping disabled
--header ignore
--octalgrouping 4,8
--decimalgrouping 3,6
--binarygrouping 4,8
--hexgrouping ignore
--hexliteralcase lowercase
--ifdef indent
--indent 2
--indentcase true
--importgrouping testable-bottom
--linebreaks lf
--operatorfunc spaced
--patternlet inline
--ranges no-space
--self insert
--semicolons inline
--stripunusedargs closure-only
--trimwhitespace always
--wraparguments preserve
--wrapcollections before-first
# rules
--rules indent, braces, isEmpty, redundantBreak, blankLinesAroundMark, blankLinesAtEndOfScope, blankLinesBetweenScopes, consecutiveBlankLines, consecutiveSpaces, duplicateImports, elseOnSameLine, leadingDelimiters, redundantBreak, redundantExtensionACL, redundantFileprivate, redundantGet, redundantInit, redundantLet, redundantNilInit, redundantObjc, redundantParens, redundantPattern, redundantRawValues, redundantReturn, redundantSelf, redundantVoidReturnType, semicolons, sortedImports, spaceAroundBraces, spaceAroundBrackets, spaceAroundComments, spaceAroundGenerics, spaceAroundOperators, spaceAroundParens, spaceInsideBraces, spaceInsideBrackets, specifiers, strongOutlets, strongifiedSelf, todos, void, wrapArguments, yodaConditions, trailingSpace
================================================
FILE: CHANGELOG
================================================
1.9.0
- Renamed bytes to byteArray in Data extension to avoid conflict with Swift 6.2 by @mluisbrown in #1076 and #1077
1.8.5
- Update README.md by @donatik27 in #1059
- Add Android support by @marcprux in #1065
- chore: fix some typos in comment by @sunxunle in #1068
- fix: typos in documentation files by @vtjl10 in #1066
- fix: typos in documentation files by @kilavvy in #1071
- docs: fix typos by @RekCuy63 in #1072
- fix: externalRepresentation condition to validate if key is private should be d not prime by @beatt83 in #1060
1.8.4
- Docs fix spelling issues by @nnsW3 in #1053
- chore: fix some comments by @dropbigfish in #1050
- docs fix spelling issues by @Guayaba221 in #1056
- Support for Static Linux SDK Based on Musl Instead of Glibc by @AnneBlair in #1058
- Use .sha2(.sha256) for PBKDF2 in readme by @sjudd in #1061
1.8.3
- Remove whitespace from the filename to please bezel build system
- minors
1.8.2
- Enable VisionOS as supported platform for Xcode project and SwiftPM package
- Tweak CocoaPods setup for privacy manifest
1.8.1
- Update publicKeyDER to support exponent of any byte length
- Add SHA3 variants for RSA signature verification
- Throw error on unsupported calls, rather than call fatalError
- Update PKCS7 padding logic
- Add SDK Privacy Manifest - PrivacyInfo.xcprivacy
1.8.0
- Add XChaCha20 and XChaCha20-Poly1305 (@zssz)
1.7.2
- Validate RSA input values
- Minor updates
1.7.1
- Address Swift 5.8 warnings
1.7.0
- Fix compilation warnings
- Ignore unknown character for base64 decoding
- Bump minimum targets (for Xcode)
- Xcode project disable bitcode (Building with bitcode is deprecated)
1.6.0
- Improve & extend RSA support with DER (see README for details)
- Fix Blowfish memory leaks
- Fix PCBC mode
- SwiftWasm compatibility
1.5.1
- Resolve type name clash by renaming BigInt -> BigInteger
1.5.0
- RSA (@NathanFallet)
- Workaround for Xcode 13.3.1
1.4.3
- Fix PCBC mode.
1.4.2
- Update Xcode project to Xcode 13
- Add SHA3 support for HMAC
- Update HMAC.Variant API (deprecate current cases)
1.4.1
- Introduce ISO 10126 padding
- fix various compiler warnings
- Revert Xcode project deployment target
1.4.0
- Customize CFB segment size (cfb8, cfb128).
- Adapt Swift @inlineable for better code optimization
1.3.8
- Revert xcframework revolution. Back to build from sources. (I'm sorry)
1.3.7
- Re-release to workaround Swift Package Manager release
1.3.6
- Fix macOS binary
- Windows support
1.3.5
- Re-release binary framework due to codesign issue
1.3.4
- Distribute optimized binary (xcframework) via SPM for apple platforms
1.3.3
- Adds OCB Authenticated-Encryption Algorithm (RFC7253)
- build-framework.sh output CryptoSwift.xcframework
- Xcode 12.2 maintenance updates
- Removed CryptoSwift.playground (couldn't make it work since Xcode 12 update)
1.3.2
- Swift 5.3 update (Xcode 12)
- Bump target platform (iOS 9, macOS 10.12)
- Allow CMAC with any Cipher
- Remove CMAC key limit
1.3.1
- Fix tests
- Swift 5.2 update
- Address possible timing issue
1.3.0
- Adds ISO-78164 padding
- Performance improvements
- Swift 5.1 update
1.2.0
- Performance improvements
- Workaround Xcode test builds with Xcode 11
1.1.3
- Fix build crash: https://bugs.swift.org/browse/SR-11630
- Fixes Xcode project tests build
- SwiftFormat all the things
- Increase/fix SHA2 data length for big input by use Int64 for calculation
1.1.2
- Fix Swift 5.0 build (for real this time)
1.1.1
- Fix Swift 5.0 build
1.1.0
- Replace RandomBytesSequence with Swift.RandomNumberGenerator
- Fix CBC-MAC
- Update SPM support
- Update for Xcode 11 and Swift 5.1
- Xcode: BUILD_LIBRARY_FOR_DISTRIBUTION = YES
1.0.0
- Swift 5
- Let's
- Celebrate
- This
- Event
- With
- 1.0.0 release
- After
- 4 years
- Thank you
0.15.0
- Adds The scrypt Password-Based Key Derivation Function (https://tools.ietf.org/html/rfc7914)
- Minor improvements
0.14.0
- Fixed decryption of AES-GCM ciphertexts with custom tag length
0.13.1
- Adds AES-GCM tag length configuration.
- Fixes count check for initializing UInt64 from Data.
0.13.0
- Adds CBC-MAC authenticator.
- Adds AES-CCM operation mode.
0.12.0
- Swift 4.2 maintenance update.
0.11.0
- API: Cryptor.seek() is throwable
- Adds proper stream support for CTR encryption with Updaptable interface.
- Refactor internals for the stream cipher modes.
- Set minimum deployment target to 8.0 (again).
0.10.0
- API: BlockMode is no longer an enum. Please migrate to eg. CBC() etc...
- Adds AES-GCM support. #97 - Feature sponsored by GesundheitsCloud (http://www.gesundheitscloud.de/)
- Adds CRC32c support.
- Improves AES variant validation.
- Fixes empty password in PBKDF2.
0.9.0
- Swift 4.1 compatibility
- Added CMAC message authenticator https://tools.ietf.org/html/rfc4493
- Added AEADChaCha20Poly1305 (AEAD_CHACHA20_POLY1305) https://tools.ietf.org/html/rfc7539#section-2.8.1
0.8.3
- Fixes SHA3 padding.
- Fixes Carthage builds.
0.8.2
- Fixes SHA3 partial updates calculations.
- Makes ChaCha20 processing faster again.
0.8.1
- Adds Data(hex:) helper.
- Adds HKDF (HMAC-based Extract-and-Expand Key Derivation Function)
- Prevent ChaCha overflow error
0.8.0
- Adds SHA3 Keccak variants
- Adds String.bytes helper to convert String to array of bytes
- Improves AES performance
- Speeds up compilation times with Swift 4
- Fixes: Blowfish minimum key size is 5
- Removes Ciphers "iv" parameter (value moved to BlockMode)
- BlockMode uses associated value for IV value where apply e.g. .CBC(iv: ivbytes)
- Refactors internal hacks no longer needed with Swift 4
0.7.2
- Adds Padding enum (.pkcs5, .pkcs7, .noPadding, .zeroPadding)
- Removes Generics from the public API.
- Slightly improves SHA1, SHA2, SHA3 performance.
- Update SPM configuration for Swift 4
0.7.1
- Swift 4.0 compatibility release
0.7.0
- Swift 3.2 compatibility release
0.6.9
- Fixed padding issue where padding was not properly added in CTR mode.
- Fixed thrown error on decrypting empty string,
- Fixed CI build script.
- Added String.encryptToBase64()
0.6.8
- Speed up MD5()
- Faster Array(hex:)
- Improve AES performance
- Fix tvOS bitcode
- Fix Blowfish CFB, OFB, CTR block modes.
- Fix Blowfish for 32-bit arch.
- Fix ChaCha20 preconditions
0.6.7
- Release for Xcode 8.2
- Fix playground example
0.6.6
- Rework ChaCha20
- Fix Poly1305
0.6.5
- Significant performance improvement when processing lange amount of data.
- Degeneric functions and change Sequence -> Collection in generic constraints.
0.6.4
- More performance improvements
- Add convenient Digest.sha2(bytes:variant)
- New: Blowfish cipher
0.6.3
- Hotfix release
- Fixes bitPadding() that breaks Digests calculations, introduced in 0.6.2
0.6.2
- SHA performance improvements by using less Swift in Swift
- Fix public access to all digests classes
0.6.1
- Update tests.
- New: RandomBytesSequence urandom values on Linux.
- Throw appropriate error for AES with invalid input where padding is needed.
- Improve performance, especially to SHA-1, SHA-2, PBKDF and related.
- Set deployment targets for all platform. Fixes Carthage builds.
- New: SHA-3 implementation (request #291)
- SHA-1 conforms to Updatable protocol and may be calculated incrementally.
- SHA-2 conforms to Updatable protocol and may be calculated incrementally.
0.6.0
- Remove bridge() workaround for Linux (not needed)
- make MD5() public
- Update README
- Convenience HMAC initializer for String input
0.6.0-beta2
- SHA-2 fix #319
- HashProtocol -> Digest and refactor
- MD5 conforms to Updatable protocol and may be calculated incrementally
- Cipher protocol accepts Collection input now
0.6.0-beta1
- Swift 3 compatibility
- Multiplatform, Single-scheme Xcode Project
- Swift Package Manager fully supported (build and tests)
- Improved Linux support
- Travis configuration added
- Public interface tests added
- enum Authenticator -> protocol Authenticator
- CRC -> Checksum
- String.encrypt() returns hex string instead of Array<UInt8>
- removed String.decrypt()
- enum Hash -> struct Hash
- Convenience initializer of Array of bytes with Hex string. Array<UInt8>(hex: "0xb1b1b2b2")
- Fix reusability of ChaCha20 instance
- Replace optional initializers with throwable initializers
- Allow to set initial counter explicitly (AES block modes). RandomAccessCryptor.seek()
0.5.2
- Fix AES-CTR incremental updates. #287
- Fixed PBKDF2 tests. #295
- Fixed assertion check in PKCS7. #288
- Updatable protocol accept SequenceType in place of Array
0.5.1
- Fixed PBKDF2 not taking key length parameter into account
- Switch to Array<> in code
0.5
- Added PBKDF1 https://tools.ietf.org/html/rfc2898#section-5.1
- Added PBKDF2 https://tools.ietf.org/html/rfc2898#section-5.2
- UpdatableCryptor protocol allows incremental encryption stream of data
- CryptoSwift.playground
- Docs update
- Added reflection control to CRC-32 (Luís Silva)
- Fix AES.init() (Pascal Pfiffner)
0.4.1
- fix NoPadding()
0.4
- Padding setup is now part of cipher constructor
- Added PBKDF2 http://tools.ietf.org/html/rfc2898#section-5.2
- Add BlockCipher protocol
- Rename Cipher -> CipherProtocol
- Remove build-frameworks.sh script
- Keep sensitive data in memory with SecureBytes
- Allows direct use of HMAC and Poly1305
- README update
- Fix missing Foundation import on Linux
0.3.1
- replace deprecated Bit with new enum.
0.3
- Swift 2.2 support
- use generators for cipher block modes should reduce memory overload.
- add OFB block mode
- add PCBC block mode
- String.decryptBase64ToString to decrypt Base64 encoded strings
- broke up complicated expressions which were taking ages to compile
0.2.3
- enable bitcode setting for Debug on an Apple TV
- faster compilation times
- improve padding functions
0.2.2
- Fix ChaCha20 cipher
- Replace for(;;) with for-in
- Workaround for "NSString are not yet implicitly convertible to String" on Linux
0.2.1
- Fix linux build
- re-add umbrella header
0.2
- Rabbit cipher (RFC4503)
- Linux Swift support
- Swift Package Manager support
- tvOS support
- Add optional seed to CRC
- Add umbrella header (CryptoSwift.h)
- Fix AES in CTR mode
- Fix no padding support for CTR and CFB block modes
- Fix access to AES.Error and ChaCha20.Error
0.1.1
- Fix Cococapods package (missing Foundation integration)
0.1.0
- Major performance improvements.
- Transition from Optionals to throw error.
- Replace enum Cipher with protocol for ciphers.
- Added CRC16
- Fixed AES CFB decryption
- Drop internal "Foundation" dependency, nonetheless it is supported as usual.
0.0.16
- Critical fix for private "md5" selector issue (#135)
0.0.15
- Fix 32-bit CTR block mode
- Carthage support update
- Mark as App-Extension-Safe API
0.0.14
- hexString -> toHextString() #105
- CTR (Counter mode)
- Hex string is lowercase now
- Carthage support
- Tests update
- Swift 2.0 support - overall update
================================================
FILE: CNAME
================================================
cryptoswift.io
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at marcin@krzyzanowskim.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
By submitting a pull request, you represent that you have the right to license
your contribution to Marcin Krzyżanowski and the community, and agree by submitting the patch that your contributions are licensed under the CryptoSwift project license.
---
Before submitting the pull request, please make sure you have tested your changes.
---
For new files, please use the correct file header:
```
//
// CryptoSwift
//
// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
```
================================================
FILE: CONTRIBUTORS.txt
================================================
For the purpose of tracking copyright, this is the list of individuals and
organizations who have contributed source code to CryptoSwift.
### Contributors
- 0xabhisek <128348758+0xabhisek@users.noreply.github.com>
- Adin Cebic <cebic.ad@gmail.com>
- Adolfo Martinelli <adolfo@airmap.com>
- Aidan Woods <aidantwoods@gmail.com>
- Alejandro Isaza <alejandro.isaza@gmail.com>
- Alex Binary <alexandre@bintz.io>
- Alex Vlasov <alex.m.vlasov@gmail.com>
- AlexDenisov <1101.debian@gmail.com>
- Alexey Komnin <Interfere@users.noreply.github.com>
- Alsey Coleman Miller <alseycmiller@gmail.com>
- Andrew Wagner <845683+drewag@users.noreply.github.com>
- André Berenguel <andre.berenguel@gmail.com>
- Anton <antonmes@users.noreply.github.com>
- Ayaka Nonaka <ayanonagon@gmail.com>
- Bart Cone <cone.bart@gmail.com>
- Bing Cheung <32565605+eungch@users.noreply.github.com>
- Bogdan Bystritskiy <q80061@gmail.com>
- Brandon Toms <btoms.20@gmail.com>
- Brice Cesarin <bc@dejamobile.com>
- Bruce Geerdes <bruce@vdub.software>
- Bryan Chen <xlchen1291@gmail.com>
- Bryant Luk <bryant.luk@bryantluk.com>
- C.W. Betts <computers57@hotmail.com>
- Caio Mathielo <mathielo@gmail.com>
- Cheng-Yu Hsu <m@cyhsu.me>
- Chris Amanse <chris@chrisamanse.xyz>
- Christian Steffens <cs@hibento.de>
- Cihat Gündüz <github@cihatguenduez.de>
- Cosmin Baies <cbaies@blockchain.com>
- Dave Wood <dave@cerebralgardens.com>
- Dima Kalachov <dima.kalachov@gmail.com>
- Dusan Klinec <dusan.klinec@gmail.com>
- Elaine Lyons <e.lyons@fetchrewards.com>
- Elias Rad <146735585+nnsW3@users.noreply.github.com>
- Eneko Alonso <eneko.alonso@gmail.com>
- Eugene Berdnikov <eberdnikov@outlook.com>
- Evan Maloney <emaloney@gilt.com>
- Evin Ugur <evinoog96@gmail.com>
- Frank Langel <frank@frankjlangel.com>
- Frank Langel <gr.markin@googlemail.com>
- Franklin Schrans <f.schrans@me.com>
- FreeThinker <59345560+Free-FreeThinker@users.noreply.github.com>
- Grzegorz Nowicki <sp3esu@gmail.com>
- Hamilton Chapman <hamchapman@gmail.com>
- Honza Dvorsky <jan.dvorsky@yahoo.com>
- Howtin <gonghao@ghsky.com>
- Ibrahim Kteish <ibrahimk@vinelab.com>
- Igor Camilo <igor.rcamilo@gmail.com>
- JP Simard <jp@jpsim.com>
- Javier Soto <javiers@twitter.com>
- Jeremy Greenwood <jeremy@mobelux.com>
- Jimmie Johansson <jim@svep.se>
- John Hammerlund <johnhammerlund@gmail.com>
- Jonas Obrist <ojiidotch@gmail.com>
- K.K. POON <noopkk@gmail.com>
- Katrin Annuk <katrin.annuk@lab.mobi>
- Keith Smiley <keithbsmiley@gmail.com>
- Kenji Wada <ch3cooh393@gmail.com>
- Koray Koska <koray@koska.at>
- Kyle Fuller <kyle@fuller.li>
- LamTrinh.Dev <me@lamtrinh.dev>
- Lex Tang <lexrus@gmail.com>
- Logan Wright <logan.william.wright@gmail.com>
- Ludo Galabru <ludovic@galabru.com>
- Luis Reisewitz <reisewitz@me.com>
- Luís Silva <lm2s@gmx.com>
- Madhava Jay <me@madhavajay.com>
- Marc Prud'hommeaux <marc@prux.org>
- Marcelo Fabri <me@marcelofabri.com>
- Marcin Krzyzanowski <marcin.krzyzanowski@gmail.com>
- Masayuki Ono <mono0926@gmail.com>
- Matias Cudich <mcudich@gmail.com>
- Matias Piipari <matias.piipari@gmail.com>
- Matthew Chung <matthewchung74@gmail.com>
- Matthias Geihs <matthias@geihs.de>
- Maxence Mottard <mottard.maxence@gmail.com>
- Michael Ledin <m.ledin@appheads.ru>
- Michael Redig <mredig@gmail.com>
- Mikael LE GOFF <mikael@mercari.com>
- Mo Ramezanpoor <me@mohsenr.com>
- Nabil Elqatib <nabilelqatib@gmail.com>
- Nate West <nwest@detroitlabs.com>
- Nathan Fallet <contact@nathanfallet.me>
- Nicholas Maccharoli <nicko@screaming-cactus.com>
- Nobutaka Yuasa <nobutaka.yuasa@gmail.com>
- Oscar Choi <oscar@goodnotesapp.com>
- Oscar De Moya <oscar.demoya@koombea.com>
- Pantelis Zirinis <info@paz-labs.com>
- Paolo Musolino <info@codeido.com>
- Pascal Pfiffner <phase.of.matter@gmail.com>
- Pedro Silva <pjlsilva@gmail.com>
- Pierpaolo Frasa <pfrasa@chegg.com>
- Quinn McHenry <quinn@jqm.us>
- R4v3nPr0 <m_117@outlook.com>
- Rich Lowenberg <me@richlowenberg.com>
- Roman Podymov <podymfrombryansk@yandex.ru>
- Ronald Mannak <ronaldmannak@me.com>
- SLboat <toaier@me.com>
- Sali0m <jehan.vossen@gmail.com>
- Sam <sam.a.judd@gmail.com>
- Sam Soffes <sam@soff.es>
- Samuel GRAU <samuel.grau@gmail.com>
- ScottieY <scottieyan@gmail.com>
- Semen Zhydenko <simeon.zhidenko@gmail.com>
- Simon Hartmann <simon.hartmann@andrena.de>
- Stefan Hintz <stefan.hintz@bild.de>
- Thomas Bibby <hello@ipadtills.com>
- Thomas Haak <thomas.haak@teleboy.ch>
- TictoDev <kjelldebaeremaecker@icloud.com>
- Tomas Kraina <tomas@mailcloud.com>
- Tomasz Szulc <mail@szulctomasz.com>
- Tomasz Wierzbik <twierzbik@msn.com>
- Valeriy Van <github@w7software.com>
- WFrost3 <134406901+WFrost3@users.noreply.github.com>
- Xavier Matos <matos.xav@gmail.com>
- Yannick Loriot <yannick.loriot@gmail.com>
- YinYuGuang <yin.yuguang@immomo.com>
- Yury Lapitsky <yury.lapitsky@gmail.com>
- Zsombor Szabo <zsombor@gmail.com>
- Zsombor Szabo <zsombor@proxy.com>
- akreutz <27BBsan08!>
- dropbigfish <fillfish@foxmail.com>
- jose <nextgenappsllc@gmail.com>
- mrahmiao <mrahmiao@gmail.com>
- planetBoy <140164174+Guayaba221@users.noreply.github.com>
- spatno <seanpatno@gmail.com>
- sweepty <adie0423@gmail.com>
- venj <im.venj@gmail.com>
- Исаев Владислав Игоревич <viisayev@mts.ru>
**Updating this list**
Please do not edit this file manually. It is generated using `./scripts/generate-contributors-list.sh`. If a name is misspelled or appearing multiple times: add an entry in `./.mailmap`
================================================
FILE: CryptoSwift-TestHostApp/AppDelegate.swift
================================================
//
// CryptoSwift
//
// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
true
}
func applicationWillResignActive(_ application: UIApplication) {
// 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 invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// 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.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// 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.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}
================================================
FILE: CryptoSwift-TestHostApp/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UIRequiresFullScreen</key>
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
================================================
FILE: CryptoSwift.podspec
================================================
Pod::Spec.new do |s|
s.name = "CryptoSwift"
s.version = "1.9.0"
s.source = { :git => "https://github.com/krzyzanowskim/CryptoSwift.git", :tag => "#{s.version}" }
s.summary = "Cryptography in Swift. SHA, MD5, CRC, PBKDF, Poly1305, HMAC, CMAC, HDKF, Scrypt, ChaCha20, Rabbit, Blowfish, AES, RSA."
s.description = "Cryptography functions and helpers for Swift implemented in Swift. SHA-1, SHA-2, SHA-3, MD5, PBKDF1, PBKDF2, Scrypt, CRC, Poly1305, HMAC, ChaCha20, Rabbit, Blowfish, AES, RSA"
s.homepage = "https://github.com/krzyzanowskim/CryptoSwift"
s.license = {:type => "Attribution", :file => "LICENSE"}
s.authors = {'Marcin Krzyżanowski' => 'marcin@krzyzanowskim.com'}
s.social_media_url = "https://x.com/krzyzanowskim"
s.cocoapods_version = '>= 1.10.0'
s.swift_version = "5.6"
s.ios.deployment_target = "11.0"
s.osx.deployment_target = "10.13"
s.watchos.deployment_target = "4.0"
s.tvos.deployment_target = "11.0"
s.source_files = "Sources/CryptoSwift/**/*.swift"
s.requires_arc = true
s.resource_bundles = {'CryptoSwift' => ['Sources/CryptoSwift/PrivacyInfo.xcprivacy']}
end
================================================
FILE: CryptoSwift.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
0AF023D5230F2B0F008E4E68 /* ISO78164Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF023D4230F2B0F008E4E68 /* ISO78164Padding.swift */; };
0EE73E71204D598100110E11 /* CMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE73E70204D598100110E11 /* CMAC.swift */; };
0EE73E74204D59C200110E11 /* CMACTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE73E72204D599C00110E11 /* CMACTests.swift */; };
14156CE52011422400DDCFBC /* ChaCha20Poly1305Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14156CE42011422400DDCFBC /* ChaCha20Poly1305Tests.swift */; };
1467460F2017BB3600DF04ED /* AEAD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1467460E2017BB3600DF04ED /* AEAD.swift */; };
35F3E51C23BF9A6700A024A1 /* OCB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35F3E51B23BF9A6700A024A1 /* OCB.swift */; };
42012783267A6F1C00F82506 /* ISO10126Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42012782267A6F1C00F82506 /* ISO10126Padding.swift */; };
5431FD5B2B021476001DEE77 /* SignatureVerificationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5431FD592B021470001DEE77 /* SignatureVerificationTests.swift */; };
674A736F1BF5D85B00866C5B /* RabbitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674A736E1BF5D85B00866C5B /* RabbitTests.swift */; };
6A7CDEED26CD1E4C00FFB1AF /* RSATests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A7CDEEC26CD1E4C00FFB1AF /* RSATests.swift */; };
6AC893F626DB950F00F7E787 /* Addition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893E026DB950C00F7E787 /* Addition.swift */; };
6AC893F826DB950F00F7E787 /* GCD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893E226DB950D00F7E787 /* GCD.swift */; };
6AC893F926DB950F00F7E787 /* Comparable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893E326DB950D00F7E787 /* Comparable.swift */; };
6AC893FA26DB950F00F7E787 /* Hashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893E426DB950D00F7E787 /* Hashable.swift */; };
6AC893FC26DB950F00F7E787 /* Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893E626DB950D00F7E787 /* Codable.swift */; };
6AC893FD26DB950F00F7E787 /* Shifts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893E726DB950D00F7E787 /* Shifts.swift */; };
6AC8940026DB950F00F7E787 /* Subtraction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893EA26DB950D00F7E787 /* Subtraction.swift */; };
6AC8940226DB950F00F7E787 /* Multiplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893EC26DB950D00F7E787 /* Multiplication.swift */; };
6AC8940526DB950F00F7E787 /* Strideable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893EF26DB950E00F7E787 /* Strideable.swift */; };
6AC8940626DB950F00F7E787 /* BigInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893F026DB950E00F7E787 /* BigInt.swift */; };
6AC8940726DB950F00F7E787 /* Exponentiation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893F126DB950E00F7E787 /* Exponentiation.swift */; };
6AC8940826DB950F00F7E787 /* Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893F226DB950E00F7E787 /* Random.swift */; };
6AC8940A26DB950F00F7E787 /* BigUInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893F426DB950E00F7E787 /* BigUInt.swift */; };
6AC8940B26DB950F00F7E787 /* Division.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AC893F526DB950E00F7E787 /* Division.swift */; };
750509991F6BEF2A00394A1B /* PKCS7.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750509981F6BEF2A00394A1B /* PKCS7.swift */; };
7507705F28D61E78004A44DC /* RSA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507705C28D61E78004A44DC /* RSA.swift */; };
7507706028D61E78004A44DC /* RSA+Signature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507705D28D61E78004A44DC /* RSA+Signature.swift */; };
7507706128D61E78004A44DC /* RSA+Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507705E28D61E78004A44DC /* RSA+Cipher.swift */; };
7507706428D61E8B004A44DC /* DER.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507706328D61E8B004A44DC /* DER.swift */; };
7507706A28D61E97004A44DC /* ASN1Scanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507706628D61E97004A44DC /* ASN1Scanner.swift */; };
7507706B28D61E97004A44DC /* ASN1Encoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507706728D61E97004A44DC /* ASN1Encoder.swift */; };
7507706C28D61E97004A44DC /* ASN1Decoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507706828D61E97004A44DC /* ASN1Decoder.swift */; };
7507706D28D61E97004A44DC /* ASN1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507706928D61E97004A44DC /* ASN1.swift */; };
7507706F28D61EBA004A44DC /* PKCS1v15.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507706E28D61EBA004A44DC /* PKCS1v15.swift */; };
7507707128D61ED5004A44DC /* Signature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7507707028D61ED5004A44DC /* Signature.swift */; };
750CC3EB1DC0CACE0096BE6E /* BlowfishTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750CC3EA1DC0CACE0096BE6E /* BlowfishTests.swift */; };
75100F8F19B0BC890005C5F5 /* Poly1305Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75100F8E19B0BC890005C5F5 /* Poly1305Tests.swift */; };
751AA0F3255F4EB600D4719E /* AESOCBTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35F3E51D23BF9AD300A024A1 /* AESOCBTests.swift */; };
751EE9781F93996100161FFC /* AES.Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751EE9771F93996100161FFC /* AES.Cryptors.swift */; };
75211F95207249D8004E41F8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75211F94207249D8004E41F8 /* AppDelegate.swift */; };
7523742D2083C61D0016D662 /* GCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7523742C2083C61C0016D662 /* GCM.swift */; };
7529366A20683DFC00195874 /* AEADChaCha20Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7529366920683DFC00195874 /* AEADChaCha20Poly1305.swift */; };
752BED9D208C120D00FC4743 /* Blowfish+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52541EE8B6CA0048EB3B /* Blowfish+Foundation.swift */; };
752BED9E208C121000FC4743 /* Blowfish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52491EE8B6CA0048EB3B /* Blowfish.swift */; };
752BED9F208C135700FC4743 /* AES+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52531EE8B6CA0048EB3B /* AES+Foundation.swift */; };
753674072175D012003E32A6 /* StreamDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753674062175D012003E32A6 /* StreamDecryptor.swift */; };
754310442050111A003FB1DF /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754310432050111A003FB1DF /* CompactMap.swift */; };
75482EA41CB310B7001F66A5 /* PBKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75482EA31CB310B7001F66A5 /* PBKDF.swift */; };
754BE46819693E190098E6F3 /* DigestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754BE46719693E190098E6F3 /* DigestTests.swift */; };
755BA296235387700039CAB5 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7576F64C20725BD5006688F8 /* Default-568h@2x.png */; };
755FB1DA199E347D00475437 /* ExtensionsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755FB1D9199E347D00475437 /* ExtensionsTest.swift */; };
7564F0522072EAEB00CA5A96 /* PBKDFPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F6207290F8006688F8 /* PBKDFPerf.swift */; platformFilter = ios; };
7564F0532072EAEB00CA5A96 /* ChaCha20TestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F020728EAB006688F8 /* ChaCha20TestsPerf.swift */; platformFilter = ios; };
7564F0542072EAEB00CA5A96 /* RabbitTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F220728F00006688F8 /* RabbitTestsPerf.swift */; platformFilter = ios; };
7564F0552072EAEB00CA5A96 /* ExtensionsTestPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F420729069006688F8 /* ExtensionsTestPerf.swift */; platformFilter = ios; };
7564F0562072EAEB00CA5A96 /* DigestTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6EB20726319006688F8 /* DigestTestsPerf.swift */; platformFilter = ios; };
7564F0582072EAEB00CA5A96 /* AESTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6EE20726422006688F8 /* AESTestsPerf.swift */; platformFilter = ios; };
7564F05A2072EAEB00CA5A96 /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 754BE45519693E190098E6F3 /* CryptoSwift.framework */; };
7564F0642072ED7000CA5A96 /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 754BE45519693E190098E6F3 /* CryptoSwift.framework */; };
7564F0652072ED7000CA5A96 /* CryptoSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 754BE45519693E190098E6F3 /* CryptoSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
756A64C62111083B00BE8805 /* StreamEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 756A64C52111083B00BE8805 /* StreamEncryptor.swift */; };
7571938E2816BFE3001C3AC0 /* CS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7571938D2816BFE3001C3AC0 /* CS.swift */; };
757DA2531A4ED0A4002BA3EF /* PaddingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757DA2521A4ED0A4002BA3EF /* PaddingTests.swift */; };
757DA2551A4ED408002BA3EF /* AESTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757DA2541A4ED408002BA3EF /* AESTests.swift */; };
757DA2591A4ED4D7002BA3EF /* ChaCha20Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 757DA2581A4ED4D7002BA3EF /* ChaCha20Tests.swift */; };
758A94291A65C67400E46135 /* HMACTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 758A94271A65C59200E46135 /* HMACTests.swift */; };
7594CCBC217A76DC0055C95D /* AESCCMTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755E0303217A756F00065FC6 /* AESCCMTests.swift */; };
7595C1582072E5B900EA1A5F /* DigestTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6EB20726319006688F8 /* DigestTestsPerf.swift */; platformFilters = (macos, ); };
7595C1592072E5B900EA1A5F /* AESTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6EE20726422006688F8 /* AESTestsPerf.swift */; platformFilters = (macos, ); };
7595C15A2072E5B900EA1A5F /* ChaCha20TestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F020728EAB006688F8 /* ChaCha20TestsPerf.swift */; platformFilters = (macos, ); };
7595C15B2072E5B900EA1A5F /* RabbitTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F220728F00006688F8 /* RabbitTestsPerf.swift */; platformFilters = (macos, ); };
7595C15C2072E5B900EA1A5F /* ExtensionsTestPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F420729069006688F8 /* ExtensionsTestPerf.swift */; platformFilters = (macos, ); };
7595C15D2072E5B900EA1A5F /* PBKDFPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7576F6F6207290F8006688F8 /* PBKDFPerf.swift */; platformFilters = (macos, ); };
7595C1602072E64900EA1A5F /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 754BE45519693E190098E6F3 /* CryptoSwift.framework */; };
75B3ED77210F9DF7005D4ADA /* BlockDecryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B3ED76210F9DF7005D4ADA /* BlockDecryptor.swift */; };
75B3ED79210FA016005D4ADA /* BlockEncryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B3ED78210FA016005D4ADA /* BlockEncryptor.swift */; };
75B601EB197D6A6C0009B53D /* CryptoSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 754BE45519693E190098E6F3 /* CryptoSwift.framework */; };
75C2E76D1D55F097003D2BCA /* Access.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C2E76C1D55F097003D2BCA /* Access.swift */; };
75D7AF38208BFB1600D22BEB /* UInt128.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D7AF37208BFB1600D22BEB /* UInt128.swift */; };
75EC527B1EE8B73A0048EB3B /* CryptoSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = 75EC527A1EE8B6CA0048EB3B /* CryptoSwift.h */; settings = {ATTRIBUTES = (Public, ); }; };
75EC527C1EE8B8130048EB3B /* AES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52381EE8B6CA0048EB3B /* AES.swift */; };
75EC527D1EE8B8130048EB3B /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52391EE8B6CA0048EB3B /* Array+Extension.swift */; };
75EC527E1EE8B8130048EB3B /* Authenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC523A1EE8B6CA0048EB3B /* Authenticator.swift */; };
75EC527F1EE8B8130048EB3B /* BatchedCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC523B1EE8B6CA0048EB3B /* BatchedCollection.swift */; };
75EC52801EE8B8130048EB3B /* Bit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC523C1EE8B6CA0048EB3B /* Bit.swift */; };
75EC52811EE8B8130048EB3B /* BlockCipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC523D1EE8B6CA0048EB3B /* BlockCipher.swift */; };
75EC52821EE8B8170048EB3B /* BlockMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC523F1EE8B6CA0048EB3B /* BlockMode.swift */; };
75EC52831EE8B8170048EB3B /* BlockModeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52401EE8B6CA0048EB3B /* BlockModeOptions.swift */; };
75EC52841EE8B8170048EB3B /* CipherModeWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52411EE8B6CA0048EB3B /* CipherModeWorker.swift */; };
75EC52851EE8B8170048EB3B /* CBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52421EE8B6CA0048EB3B /* CBC.swift */; };
75EC52861EE8B8170048EB3B /* CFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52431EE8B6CA0048EB3B /* CFB.swift */; };
75EC52871EE8B8170048EB3B /* CTR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52441EE8B6CA0048EB3B /* CTR.swift */; };
75EC52881EE8B8170048EB3B /* ECB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52451EE8B6CA0048EB3B /* ECB.swift */; };
75EC52891EE8B8170048EB3B /* OFB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52461EE8B6CA0048EB3B /* OFB.swift */; };
75EC528A1EE8B8170048EB3B /* PCBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52471EE8B6CA0048EB3B /* PCBC.swift */; };
75EC528D1EE8B81A0048EB3B /* ChaCha20.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC524A1EE8B6CA0048EB3B /* ChaCha20.swift */; };
75EC528E1EE8B81A0048EB3B /* Checksum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC524B1EE8B6CA0048EB3B /* Checksum.swift */; };
75EC528F1EE8B81A0048EB3B /* Cipher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC524C1EE8B6CA0048EB3B /* Cipher.swift */; };
75EC52901EE8B81A0048EB3B /* Collection+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC524D1EE8B6CA0048EB3B /* Collection+Extension.swift */; };
75EC52911EE8B81A0048EB3B /* Cryptors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC524E1EE8B6CA0048EB3B /* Cryptors.swift */; };
75EC52931EE8B81A0048EB3B /* Digest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52501EE8B6CA0048EB3B /* Digest.swift */; };
75EC52941EE8B81A0048EB3B /* DigestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52511EE8B6CA0048EB3B /* DigestType.swift */; };
75EC52971EE8B8200048EB3B /* ChaCha20+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52551EE8B6CA0048EB3B /* ChaCha20+Foundation.swift */; };
75EC52981EE8B8200048EB3B /* Array+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52561EE8B6CA0048EB3B /* Array+Foundation.swift */; };
75EC52991EE8B8200048EB3B /* Data+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52571EE8B6CA0048EB3B /* Data+Extension.swift */; };
75EC529A1EE8B8200048EB3B /* HMAC+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52581EE8B6CA0048EB3B /* HMAC+Foundation.swift */; };
75EC529B1EE8B8200048EB3B /* Rabbit+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52591EE8B6CA0048EB3B /* Rabbit+Foundation.swift */; };
75EC529C1EE8B8200048EB3B /* String+FoundationExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC525A1EE8B6CA0048EB3B /* String+FoundationExtension.swift */; };
75EC529D1EE8B8200048EB3B /* Utils+Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC525B1EE8B6CA0048EB3B /* Utils+Foundation.swift */; };
75EC529E1EE8B8230048EB3B /* Generics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC525C1EE8B6CA0048EB3B /* Generics.swift */; };
75EC529F1EE8B8230048EB3B /* HMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC525D1EE8B6CA0048EB3B /* HMAC.swift */; };
75EC52A01EE8B8290048EB3B /* Int+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC525F1EE8B6CA0048EB3B /* Int+Extension.swift */; };
75EC52A21EE8B8290048EB3B /* MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52611EE8B6CA0048EB3B /* MD5.swift */; };
75EC52A31EE8B8290048EB3B /* NoPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52621EE8B6CA0048EB3B /* NoPadding.swift */; };
75EC52A41EE8B8290048EB3B /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52631EE8B6CA0048EB3B /* Operators.swift */; };
75EC52A51EE8B8290048EB3B /* Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52641EE8B6CA0048EB3B /* Padding.swift */; };
75EC52A61EE8B8390048EB3B /* PBKDF1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52661EE8B6CA0048EB3B /* PBKDF1.swift */; };
75EC52A71EE8B8390048EB3B /* PBKDF2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52671EE8B6CA0048EB3B /* PBKDF2.swift */; };
75EC52A81EE8B8390048EB3B /* PKCS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52681EE8B6CA0048EB3B /* PKCS5.swift */; };
75EC52A91EE8B83D0048EB3B /* PKCS7Padding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52691EE8B6CA0048EB3B /* PKCS7Padding.swift */; };
75EC52AA1EE8B83D0048EB3B /* Poly1305.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC526A1EE8B6CA0048EB3B /* Poly1305.swift */; };
75EC52AB1EE8B83D0048EB3B /* Rabbit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC526B1EE8B6CA0048EB3B /* Rabbit.swift */; };
75EC52AC1EE8B83D0048EB3B /* Cryptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC526C1EE8B6CA0048EB3B /* Cryptor.swift */; };
75EC52AE1EE8B83D0048EB3B /* SecureBytes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC526E1EE8B6CA0048EB3B /* SecureBytes.swift */; };
75EC52AF1EE8B83D0048EB3B /* SHA1.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC526F1EE8B6CA0048EB3B /* SHA1.swift */; };
75EC52B01EE8B83D0048EB3B /* SHA2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52701EE8B6CA0048EB3B /* SHA2.swift */; };
75EC52B11EE8B83D0048EB3B /* SHA3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52711EE8B6CA0048EB3B /* SHA3.swift */; };
75EC52B21EE8B83D0048EB3B /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52721EE8B6CA0048EB3B /* String+Extension.swift */; };
75EC52B31EE8B83D0048EB3B /* UInt16+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52731EE8B6CA0048EB3B /* UInt16+Extension.swift */; };
75EC52B41EE8B83D0048EB3B /* UInt32+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52741EE8B6CA0048EB3B /* UInt32+Extension.swift */; };
75EC52B51EE8B83D0048EB3B /* UInt64+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52751EE8B6CA0048EB3B /* UInt64+Extension.swift */; };
75EC52B61EE8B83D0048EB3B /* UInt8+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52761EE8B6CA0048EB3B /* UInt8+Extension.swift */; };
75EC52B71EE8B83D0048EB3B /* Updatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52771EE8B6CA0048EB3B /* Updatable.swift */; };
75EC52B81EE8B83D0048EB3B /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52781EE8B6CA0048EB3B /* Utils.swift */; };
75EC52B91EE8B83D0048EB3B /* ZeroPadding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EC52791EE8B6CA0048EB3B /* ZeroPadding.swift */; };
75F4E434216C93EF00F09710 /* CCM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F4E433216C93EF00F09710 /* CCM.swift */; };
75F4E436216C98DE00F09710 /* CBCMAC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F4E435216C98DE00F09710 /* CBCMAC.swift */; };
81F279DD2181F58300449EDA /* Scrypt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F279DC2181F58300449EDA /* Scrypt.swift */; };
81F279DF2181F5A000449EDA /* ScryptTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F279DE2181F5A000449EDA /* ScryptTests.swift */; };
81F279E12181F5C500449EDA /* ScryptTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F279E02181F5C500449EDA /* ScryptTestsPerf.swift */; platformFilters = (macos, ); };
81F279E22181F5C500449EDA /* ScryptTestsPerf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F279E02181F5C500449EDA /* ScryptTestsPerf.swift */; platformFilter = ios; };
AA54CF312B860926006BF411 /* PrivacyInfo.xcprivacy in CopyFiles */ = {isa = PBXBuildFile; fileRef = 75C454012B4B6EBC00FC5020 /* PrivacyInfo.xcprivacy */; };
E3FD2D531D6B81CE00A9F35F /* Error+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3FD2D511D6B813C00A9F35F /* Error+Extension.swift */; };
E6200E141FB9A7AE00258382 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6200E131FB9A7AE00258382 /* HKDF.swift */; };
E6200E171FB9B68C00258382 /* HKDFTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6200E151FB9B67C00258382 /* HKDFTests.swift */; };
EC353DB42BECCEFD0026B46B /* BitwiseOps.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DB32BECCEFD0026B46B /* BitwiseOps.swift */; };
EC353DB62BECCF3A0026B46B /* DataConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DB52BECCF3A0026B46B /* DataConversion.swift */; };
EC353DB82BECCF4B0026B46B /* FloatingPointConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DB72BECCF4B0026B46B /* FloatingPointConversion.swift */; };
EC353DBA2BECCF5A0026B46B /* IntegerConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DB92BECCF5A0026B46B /* IntegerConversion.swift */; };
EC353DBC2BECCF6A0026B46B /* PrimeTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DBB2BECCF6A0026B46B /* PrimeTest.swift */; };
EC353DBE2BECCF770026B46B /* SquareRoot.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DBD2BECCF770026B46B /* SquareRoot.swift */; };
EC353DC02BECCF860026B46B /* StringConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DBF2BECCF860026B46B /* StringConversion.swift */; };
EC353DC22BECCF8F0026B46B /* WordsAndBits.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC353DC12BECCF8F0026B46B /* WordsAndBits.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
7564F0502072EAEB00CA5A96 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 754BE44C19693E190098E6F3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 754BE45419693E190098E6F3;
remoteInfo = CryptoSwift;
};
7564F0612072EB5D00CA5A96 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 754BE44C19693E190098E6F3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 75211F91207249D8004E41F8;
remoteInfo = "CryptoSwift-TestHostApp";
};
7564F0662072ED7000CA5A96 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 754BE44C19693E190098E6F3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 754BE45419693E190098E6F3;
remoteInfo = CryptoSwift;
};
7595C15E2072E64000EA1A5F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 754BE44C19693E190098E6F3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 754BE45419693E190098E6F3;
remoteInfo = CryptoSwift;
};
75B601E3197D69EB0009B53D /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 754BE44C19693E190098E6F3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 754BE45419693E190098E6F3;
remoteInfo = CryptoSwift;
};
75F9482120BDDF9900956311 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 754BE44C19693E190098E6F3 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 75211F91207249D8004E41F8;
remoteInfo = "CryptoSwift-TestHostApp";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
7564F0682072ED7000CA5A96 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
7564F0652072ED7000CA5A96 /* CryptoSwift.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
75B601E0197D69770009B53D /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 7;
files = (
AA54CF312B860926006BF411 /* PrivacyInfo.xcprivacy in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0AF023D4230F2B0F008E4E68 /* ISO78164Padding.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISO78164Padding.swift; sourceTree = "<group>"; };
0EE73E70204D598100110E11 /* CMAC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CMAC.swift; sourceTree = "<group>"; };
0EE73E72204D599C00110E11 /* CMACTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CMACTests.swift; sourceTree = "<group>"; };
14156CE42011422400DDCFBC /* ChaCha20Poly1305Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChaCha20Poly1305Tests.swift; sourceTree = "<group>"; };
1467460E2017BB3600DF04ED /* AEAD.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AEAD.swift; sourceTree = "<group>"; };
35F3E51B23BF9A6700A024A1 /* OCB.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OCB.swift; sourceTree = "<group>"; };
35F3E51D23BF9AD300A024A1 /* AESOCBTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AESOCBTests.swift; sourceTree = "<group>"; };
42012782267A6F1C00F82506 /* ISO10126Padding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ISO10126Padding.swift; sourceTree = "<group>"; };
5431FD592B021470001DEE77 /* SignatureVerificationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignatureVerificationTests.swift; sourceTree = "<group>"; };
674A736E1BF5D85B00866C5B /* RabbitTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RabbitTests.swift; sourceTree = "<group>"; };
6A7CDEEC26CD1E4C00FFB1AF /* RSATests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RSATests.swift; sourceTree = "<group>"; };
6AC893E026DB950C00F7E787 /* Addition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Addition.swift; sourceTree = "<group>"; };
6AC893E226DB950D00F7E787 /* GCD.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GCD.swift; sourceTree = "<group>"; };
6AC893E326DB950D00F7E787 /* Comparable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Comparable.swift; sourceTree = "<group>"; };
6AC893E426DB950D00F7E787 /* Hashable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Hashable.swift; sourceTree = "<group>"; };
6AC893E626DB950D00F7E787 /* Codable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Codable.swift; sourceTree = "<group>"; };
6AC893E726DB950D00F7E787 /* Shifts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Shifts.swift; sourceTree = "<group>"; };
6AC893EA26DB950D00F7E787 /* Subtraction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Subtraction.swift; sourceTree = "<group>"; };
6AC893EC26DB950D00F7E787 /* Multiplication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Multiplication.swift; sourceTree = "<group>"; };
6AC893EF26DB950E00F7E787 /* Strideable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strideable.swift; sourceTree = "<group>"; };
6AC893F026DB950E00F7E787 /* BigInt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BigInt.swift; sourceTree = "<group>"; };
6AC893F126DB950E00F7E787 /* Exponentiation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Exponentiation.swift; sourceTree = "<group>"; };
6AC893F226DB950E00F7E787 /* Random.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Random.swift; sourceTree = "<group>"; };
6AC893F426DB950E00F7E787 /* BigUInt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BigUInt.swift; sourceTree = "<group>"; };
6AC893F526DB950E00F7E787 /* Division.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Division.swift; sourceTree = "<group>"; };
750509981F6BEF2A00394A1B /* PKCS7.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PKCS7.swift; sourceTree = "<group>"; };
7507705C28D61E78004A44DC /* RSA.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RSA.swift; sourceTree = "<group>"; };
7507705D28D61E78004A44DC /* RSA+Signature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RSA+Signature.swift"; sourceTree = "<group>"; };
7507705E28D61E78004A44DC /* RSA+Cipher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RSA+Cipher.swift"; sourceTree = "<group>"; };
7507706328D61E8B004A44DC /* DER.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DER.swift; sourceTree = "<group>"; };
7507706628D61E97004A44DC /* ASN1Scanner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ASN1Scanner.swift; sourceTree = "<group>"; };
7507706728D61E97004A44DC /* ASN1Encoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ASN1Encoder.swift; sourceTree = "<group>"; };
7507706828D61E97004A44DC /* ASN1Decoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ASN1Decoder.swift; sourceTree = "<group>"; };
7507706928D61E97004A44DC /* ASN1.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ASN1.swift; sourceTree = "<group>"; };
7507706E28D61EBA004A44DC /* PKCS1v15.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PKCS1v15.swift; sourceTree = "<group>"; };
7507707028D61ED5004A44DC /* Signature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signature.swift; sourceTree = "<group>"; };
750CC3EA1DC0CACE0096BE6E /* BlowfishTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlowfishTests.swift; sourceTree = "<group>"; };
75100F8E19B0BC890005C5F5 /* Poly1305Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Poly1305Tests.swift; sourceTree = "<group>"; };
751EE9771F93996100161FFC /* AES.Cryptors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AES.Cryptors.swift; sourceTree = "<group>"; };
75211F92207249D8004E41F8 /* CryptoSwift-TestHostApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "CryptoSwift-TestHostApp.app"; sourceTree = BUILT_PRODUCTS_DIR; };
75211F94207249D8004E41F8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
75211FA0207249D8004E41F8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
75211FA520724A0F004E41F8 /* CryptoSwift-TestHostApp-Test.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "CryptoSwift-TestHostApp-Test.xcconfig"; sourceTree = "<group>"; };
75211FA820724A0F004E41F8 /* CryptoSwift-Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "CryptoSwift-Shared.xcconfig"; sourceTree = "<group>"; };
75211FA920724A0F004E41F8 /* CryptoSwift-TestHostApp-Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "CryptoSwift-TestHostApp-Shared.xcconfig"; sourceTree = "<group>"; };
75211FAA20724A0F004E41F8 /* Project-Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Project-Release.xcconfig"; sourceTree = "<group>"; };
75211FAC20724A0F004E41F8 /* CryptoSwift-Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "CryptoSwift-Release.xcconfig"; sourceTree = "<group>"; };
75211FAE20724A10004E41F8 /* Tests-Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Tests-Shared.xcconfig"; sourceTree = "<group>"; };
75211FAF20724A10004E41F8 /* CryptoSwift-Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "CryptoSwift-Debug.xcconfig"; sourceTree = "<group>"; };
75211FB020724A10004E41F8 /* Project-Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Project-Debug.xcconfig"; sourceTree = "<group>"; };
75211FB120724A10004E41F8 /* Tests-Test.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Tests-Test.xcconfig"; sourceTree = "<group>"; };
75211FB220724A10004E41F8 /* Project-Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Project-Shared.xcconfig"; sourceTree = "<group>"; };
75211FB420724A10004E41F8 /* CryptoSwift-Test.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "CryptoSwift-Test.xcconfig"; sourceTree = "<group>"; };
7523742C2083C61C0016D662 /* GCM.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GCM.swift; sourceTree = "<group>"; };
7529366920683DFC00195874 /* AEADChaCha20Poly1305.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AEADChaCha20Poly1305.swift; sourceTree = "<group>"; };
753674062175D012003E32A6 /* StreamDecryptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StreamDecryptor.swift; sourceTree = "<group>"; };
7536A93E207254A000F39140 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
754310432050111A003FB1DF /* CompactMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompactMap.swift; sourceTree = "<group>"; };
75482EA31CB310B7001F66A5 /* PBKDF.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PBKDF.swift; sourceTree = "<group>"; };
754BE45519693E190098E6F3 /* CryptoSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CryptoSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
754BE46019693E190098E6F3 /* CryptoSwiftTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CryptoSwiftTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
754BE46719693E190098E6F3 /* DigestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DigestTests.swift; sourceTree = "<group>"; };
755E0303217A756F00065FC6 /* AESCCMTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AESCCMTests.swift; sourceTree = "<group>"; };
755FB1D9199E347D00475437 /* ExtensionsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionsTest.swift; sourceTree = "<group>"; };
7564F0602072EAEB00CA5A96 /* TestsPerformance-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TestsPerformance-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
756A64C52111083B00BE8805 /* StreamEncryptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StreamEncryptor.swift; sourceTree = "<group>"; };
756BFDCA1A82B87300B9D9A4 /* Bridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bridging.h; sourceTree = "<group>"; };
7571938D2816BFE3001C3AC0 /* CS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CS.swift; sourceTree = "<group>"; };
7576F64C20725BD5006688F8 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
7576F6EB20726319006688F8 /* DigestTestsPerf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DigestTestsPerf.swift; sourceTree = "<group>"; };
7576F6EE20726422006688F8 /* AESTestsPerf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AESTestsPerf.swift; sourceTree = "<group>"; };
7576F6F020728EAB006688F8 /* ChaCha20TestsPerf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChaCha20TestsPerf.swift; sourceTree = "<group>"; };
7576F6F220728F00006688F8 /* RabbitTestsPerf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RabbitTestsPerf.swift; sourceTree = "<group>"; };
7576F6F420729069006688F8 /* ExtensionsTestPerf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExtensionsTestPerf.swift; sourceTree = "<group>"; };
7576F6F6207290F8006688F8 /* PBKDFPerf.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PBKDFPerf.swift; sourceTree = "<group>"; };
757DA2521A4ED0A4002BA3EF /* PaddingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaddingTests.swift; sourceTree = "<group>"; };
757DA2541A4ED408002BA3EF /* AESTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AESTests.swift; sourceTree = "<group>"; };
757DA2581A4ED4D7002BA3EF /* ChaCha20Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChaCha20Tests.swift; sourceTree = "<group>"; };
758A94271A65C59200E46135 /* HMACTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HMACTests.swift; sourceTree = "<group>"; };
7595C14A2072E48C00EA1A5F /* TestsPerformance-Mac.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TestsPerformance-Mac.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
75B3ED76210F9DF7005D4ADA /* BlockDecryptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockDecryptor.swift; sourceTree = "<group>"; };
75B3ED78210FA016005D4ADA /* BlockEncryptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockEncryptor.swift; sourceTree = "<group>"; };
75C2E76C1D55F097003D2BCA /* Access.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Access.swift; sourceTree = "<group>"; };
75C454012B4B6EBC00FC5020 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = Sources/CryptoSwift/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
75D7AF37208BFB1600D22BEB /* UInt128.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UInt128.swift; sourceTree = "<group>"; };
75EC52381EE8B6CA0048EB3B /* AES.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AES.swift; sourceTree = "<group>"; };
75EC52391EE8B6CA0048EB3B /* Array+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+Extension.swift"; sourceTree = "<group>"; };
75EC523A1EE8B6CA0048EB3B /* Authenticator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Authenticator.swift; sourceTree = "<group>"; };
75EC523B1EE8B6CA0048EB3B /* BatchedCollection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchedCollection.swift; sourceTree = "<group>"; };
75EC523C1EE8B6CA0048EB3B /* Bit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bit.swift; sourceTree = "<group>"; };
75EC523D1EE8B6CA0048EB3B /* BlockCipher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockCipher.swift; sourceTree = "<group>"; };
75EC523F1EE8B6CA0048EB3B /* BlockMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockMode.swift; sourceTree = "<group>"; };
75EC52401EE8B6CA0048EB3B /* BlockModeOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockModeOptions.swift; sourceTree = "<group>"; };
75EC52411EE8B6CA0048EB3B /* CipherModeWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CipherModeWorker.swift; sourceTree = "<group>"; };
75EC52421EE8B6CA0048EB3B /* CBC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CBC.swift; sourceTree = "<group>"; };
75EC52431EE8B6CA0048EB3B /* CFB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CFB.swift; sourceTree = "<group>"; };
75EC52441EE8B6CA0048EB3B /* CTR.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CTR.swift; sourceTree = "<group>"; };
75EC52451EE8B6CA0048EB3B /* ECB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ECB.swift; sourceTree = "<group>"; };
75EC52461EE8B6CA0048EB3B /* OFB.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OFB.swift; sourceTree = "<group>"; };
75EC52471EE8B6CA0048EB3B /* PCBC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PCBC.swift; sourceTree = "<group>"; };
75EC52491EE8B6CA0048EB3B /* Blowfish.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Blowfish.swift; sourceTree = "<group>"; };
75EC524A1EE8B6CA0048EB3B /* ChaCha20.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChaCha20.swift; sourceTree = "<group>"; };
75EC524B1EE8B6CA0048EB3B /* Checksum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Checksum.swift; sourceTree = "<group>"; };
75EC524C1EE8B6CA0048EB3B /* Cipher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cipher.swift; sourceTree = "<group>"; };
75EC524D1EE8B6CA0048EB3B /* Collection+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Extension.swift"; sourceTree = "<group>"; };
75EC524E1EE8B6CA0048EB3B /* Cryptors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cryptors.swift; sourceTree = "<group>"; };
75EC52501EE8B6CA0048EB3B /* Digest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Digest.swift; sourceTree = "<group>"; };
75EC52511EE8B6CA0048EB3B /* DigestType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DigestType.swift; sourceTree = "<group>"; };
75EC52531EE8B6CA0048EB3B /* AES+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AES+Foundation.swift"; sourceTree = "<group>"; };
75EC52541EE8B6CA0048EB3B /* Blowfish+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Blowfish+Foundation.swift"; sourceTree = "<group>"; };
75EC52551EE8B6CA0048EB3B /* ChaCha20+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChaCha20+Foundation.swift"; sourceTree = "<group>"; };
75EC52561EE8B6CA0048EB3B /* Array+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+Foundation.swift"; sourceTree = "<group>"; };
75EC52571EE8B6CA0048EB3B /* Data+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Data+Extension.swift"; sourceTree = "<group>"; };
75EC52581EE8B6CA0048EB3B /* HMAC+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HMAC+Foundation.swift"; sourceTree = "<group>"; };
75EC52591EE8B6CA0048EB3B /* Rabbit+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Rabbit+Foundation.swift"; sourceTree = "<group>"; };
75EC525A1EE8B6CA0048EB3B /* String+FoundationExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+FoundationExtension.swift"; sourceTree = "<group>"; };
75EC525B1EE8B6CA0048EB3B /* Utils+Foundation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Utils+Foundation.swift"; sourceTree = "<group>"; };
75EC525C1EE8B6CA0048EB3B /* Generics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Generics.swift; sourceTree = "<group>"; };
75EC525D1EE8B6CA0048EB3B /* HMAC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HMAC.swift; sourceTree = "<group>"; };
75EC525F1EE8B6CA0048EB3B /* Int+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Extension.swift"; sourceTree = "<group>"; };
75EC52611EE8B6CA0048EB3B /* MD5.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MD5.swift; sourceTree = "<group>"; };
75EC52621EE8B6CA0048EB3B /* NoPadding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoPadding.swift; sourceTree = "<group>"; };
75EC52631EE8B6CA0048EB3B /* Operators.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Operators.swift; sourceTree = "<group>"; };
75EC52641EE8B6CA0048EB3B /* Padding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Padding.swift; sourceTree = "<group>"; };
75EC52661EE8B6CA0048EB3B /* PBKDF1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PBKDF1.swift; sourceTree = "<group>"; };
75EC52671EE8B6CA0048EB3B /* PBKDF2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PBKDF2.swift; sourceTree = "<group>"; };
75EC52681EE8B6CA0048EB3B /* PKCS5.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PKCS5.swift; sourceTree = "<group>"; };
75EC52691EE8B6CA0048EB3B /* PKCS7Padding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PKCS7Padding.swift; sourceTree = "<group>"; };
75EC526A1EE8B6CA0048EB3B /* Poly1305.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Poly1305.swift; sourceTree = "<group>"; };
75EC526B1EE8B6CA0048EB3B /* Rabbit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Rabbit.swift; sourceTree = "<group>"; };
75EC526C1EE8B6CA0048EB3B /* Cryptor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cryptor.swift; sourceTree = "<group>"; };
75EC526E1EE8B6CA0048EB3B /* SecureBytes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBytes.swift; sourceTree = "<group>"; };
75EC526F1EE8B6CA0048EB3B /* SHA1.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SHA1.swift; sourceTree = "<group>"; };
75EC52701EE8B6CA0048EB3B /* SHA2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SHA2.swift; sourceTree = "<group>"; };
75EC52711EE8B6CA0048EB3B /* SHA3.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SHA3.swift; sourceTree = "<group>"; };
75EC52721EE8B6CA0048EB3B /* String+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
75EC52731EE8B6CA0048EB3B /* UInt16+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UInt16+Extension.swift"; sourceTree = "<group>"; };
75EC52741EE8B6CA0048EB3B /* UInt32+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UInt32+Extension.swift"; sourceTree = "<group>"; };
75EC52751EE8B6CA0048EB3B /* UInt64+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UInt64+Extension.swift"; sourceTree = "<group>"; };
75EC52761EE8B6CA0048EB3B /* UInt8+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UInt8+Extension.swift"; sourceTree = "<group>"; };
75EC52771EE8B6CA0048EB3B /* Updatable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Updatable.swift; sourceTree = "<group>"; };
75EC52781EE8B6CA0048EB3B /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = "<group>"; };
75EC52791EE8B6CA0048EB3B /* ZeroPadding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZeroPadding.swift; sourceTree = "<group>"; };
75EC527A1EE8B6CA0048EB3B /* CryptoSwift.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CryptoSwift.h; sourceTree = "<group>"; };
75F4E433216C93EF00F09710 /* CCM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CCM.swift; sourceTree = "<group>"; };
75F4E435216C98DE00F09710 /* CBCMAC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CBCMAC.swift; sourceTree = "<group>"; };
75F4E437216C9B5D00F09710 /* CHANGELOG */ = {isa = PBXFileReference; lastKnownFileType = text; path = CHANGELOG; sourceTree = SOURCE_ROOT; };
75F4E438216C9B6900F09710 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = SOURCE_ROOT; };
81F279DC2181F58300449EDA /* Scrypt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Scrypt.swift; sourceTree = "<group>"; };
81F279DE2181F5A000449EDA /* ScryptTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScryptTests.swift; sourceTree = "<group>"; };
81F279E02181F5C500449EDA /* ScryptTestsPerf.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScryptTestsPerf.swift; sourceTree = "<group>"; };
E3FD2D511D6B813C00A9F35F /* Error+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Error+Extension.swift"; sourceTree = "<group>"; };
E6200E131FB9A7AE00258382 /* HKDF.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HKDF.swift; sourceTree = "<group>"; };
E6200E151FB9B67C00258382 /* HKDFTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HKDFTests.swift; sourceTree = "<group>"; };
EC353DB32BECCEFD0026B46B /* BitwiseOps.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BitwiseOps.swift; sourceTree = "<group>"; };
EC353DB52BECCF3A0026B46B /* DataConversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataConversion.swift; sourceTree = "<group>"; };
EC353DB72BECCF4B0026B46B /* FloatingPointConversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FloatingPointConversion.swift; sourceTree = "<group>"; };
EC353DB92BECCF5A0026B46B /* IntegerConversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntegerConversion.swift; sourceTree = "<group>"; };
EC353DBB2BECCF6A0026B46B /* PrimeTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PrimeTest.swift; sourceTree = "<group>"; };
EC353DBD2BECCF770026B46B /* SquareRoot.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SquareRoot.swift; sourceTree = "<group>"; };
EC353DBF2BECCF860026B46B /* StringConversion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StringConversion.swift; sourceTree = "<group>"; };
EC353DC12BECCF8F0026B46B /* WordsAndBits.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WordsAndBits.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
75211F8F207249D8004E41F8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7564F0642072ED7000CA5A96 /* CryptoSwift.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
754BE45119693E190098E6F3 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
754BE45D19693E190098E6F3 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
75B601EB197D6A6C0009B53D /* CryptoSwift.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7564F0592072EAEB00CA5A96 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7564F05A2072EAEB00CA5A96 /* CryptoSwift.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7595C1472072E48C00EA1A5F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
7595C1602072E64900EA1A5F /* CryptoSwift.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
24B0BBA29D734E62809E53BC /* Frameworks */ = {
isa = PBXGroup;
children = (
7536A93E207254A000F39140 /* UIKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
6AC893DF26DB94F700F7E787 /* CS_BigInt */ = {
isa = PBXGroup;
children = (
6AC893E026DB950C00F7E787 /* Addition.swift */,
6AC893F026DB950E00F7E787 /* BigInt.swift */,
6AC893F426DB950E00F7E787 /* BigUInt.swift */,
EC353DB32BECCEFD0026B46B /* BitwiseOps.swift */,
6AC893E626DB950D00F7E787 /* Codable.swift */,
6AC893E326DB950D00F7E787 /* Comparable.swift */,
EC353DB52BECCF3A0026B46B /* DataConversion.swift */,
6AC893F526DB950E00F7E787 /* Division.swift */,
6AC893F126DB950E00F7E787 /* Exponentiation.swift */,
EC353DB72BECCF4B0026B46B /* FloatingPointConversion.swift */,
6AC893E226DB950D00F7E787 /* GCD.swift */,
6AC893E426DB950D00F7E787 /* Hashable.swift */,
EC353DB92BECCF5A0026B46B /* IntegerConversion.swift */,
6AC893EC26DB950D00F7E787 /* Multiplication.swift */,
EC353DBB2BECCF6A0026B46B /* PrimeTest.swift */,
6AC893F226DB950E00F7E787 /* Random.swift */,
6AC893E726DB950D00F7E787 /* Shifts.swift */,
EC353DBD2BECCF770026B46B /* SquareRoot.swift */,
6AC893EF26DB950E00F7E787 /* Strideable.swift */,
EC353DBF2BECCF860026B46B /* StringConversion.swift */,
6AC893EA26DB950D00F7E787 /* Subtraction.swift */,
EC353DC12BECCF8F0026B46B /* WordsAndBits.swift */,
7571938D2816BFE3001C3AC0 /* CS.swift */,
);
path = CS_BigInt;
sourceTree = "<group>";
};
7507705B28D61E78004A44DC /* RSA */ = {
isa = PBXGroup;
children = (
7507705C28D61E78004A44DC /* RSA.swift */,
7507705D28D61E78004A44DC /* RSA+Signature.swift */,
7507705E28D61E78004A44DC /* RSA+Cipher.swift */,
);
path = RSA;
sourceTree = "<group>";
};
7507706228D61E8B004A44DC /* PEM */ = {
isa = PBXGroup;
children = (
7507706328D61E8B004A44DC /* DER.swift */,
);
path = PEM;
sourceTree = "<group>";
};
7507706528D61E97004A44DC /* ASN1 */ = {
isa = PBXGroup;
children = (
7507706628D61E97004A44DC /* ASN1Scanner.swift */,
7507706728D61E97004A44DC /* ASN1Encoder.swift */,
7507706828D61E97004A44DC /* ASN1Decoder.swift */,
7507706928D61E97004A44DC /* ASN1.swift */,
);
path = ASN1;
sourceTree = "<group>";
};
75211F93207249D8004E41F8 /* CryptoSwift-TestHostApp */ = {
isa = PBXGroup;
children = (
7576F64C20725BD5006688F8 /* Default-568h@2x.png */,
75211F94207249D8004E41F8 /* AppDelegate.swift */,
75211FA0207249D8004E41F8 /* Info.plist */,
);
path = "CryptoSwift-TestHostApp";
sourceTree = "<group>";
};
7529366820683DFC00195874 /* AEAD */ = {
isa = PBXGroup;
children = (
1467460E2017BB3600DF04ED /* AEAD.swift */,
7529366920683DFC00195874 /* AEADChaCha20Poly1305.swift */,
);
path = AEAD;
sourceTree = "<group>";
};
754BE44B19693E190098E6F3 = {
isa = PBXGroup;
children = (
75C454012B4B6EBC00FC5020 /* PrivacyInfo.xcprivacy */,
75843E9A2072457A0050583A /* config */,
75EC52361EE8B6CA0048EB3B /* Sources */,
754BE46419693E190098E6F3 /* Tests */,
75211F93207249D8004E41F8 /* CryptoSwift-TestHostApp */,
754BE46519693E190098E6F3 /* Supporting Files */,
754BE45619693E190098E6F3 /* Products */,
24B0BBA29D734E62809E53BC /* Frameworks */,
);
indentWidth = 2;
sourceTree = "<group>";
tabWidth = 2;
};
754BE45619693E190098E6F3 /* Products */ = {
isa = PBXGroup;
children = (
754BE45519693E190098E6F3 /* CryptoSwift.framework */,
754BE46019693E190098E6F3 /* CryptoSwiftTests.xctest */,
75211F92207249D8004E41F8 /* CryptoSwift-TestHostApp.app */,
7595C14A2072E48C00EA1A5F /* TestsPerformance-Mac.xctest */,
7564F0602072EAEB00CA5A96 /* TestsPerformance-iOS.xctest */,
);
name = Products;
sourceTree = "<group>";
};
754BE46419693E190098E6F3 /* Tests */ = {
isa = PBXGroup;
children = (
81F279DE2181F5A000449EDA /* ScryptTests.swift */,
81F279E02181F5C500449EDA /* ScryptTestsPerf.swift */,
14156CE42011422400DDCFBC /* ChaCha20Poly1305Tests.swift */,
E3FD2D511D6B813C00A9F35F /* Error+Extension.swift */,
754BE46719693E190098E6F3 /* DigestTests.swift */,
7576F6EB20726319006688F8 /* DigestTestsPerf.swift */,
75100F8E19B0BC890005C5F5 /* Poly1305Tests.swift */,
758A94271A65C59200E46135 /* HMACTests.swift */,
0EE73E72204D599C00110E11 /* CMACTests.swift */,
E6200E151FB9B67C00258382 /* HKDFTests.swift */,
757DA2541A4ED408002BA3EF /* AESTests.swift */,
755E0303217A756F00065FC6 /* AESCCMTests.swift */,
35F3E51D23BF9AD300A024A1 /* AESOCBTests.swift */,
7576F6EE20726422006688F8 /* AESTestsPerf.swift */,
750CC3EA1DC0CACE0096BE6E /* BlowfishTests.swift */,
757DA2581A4ED4D7002BA3EF /* ChaCha20Tests.swift */,
7576F6F020728EAB006688F8 /* ChaCha20TestsPerf.swift */,
674A736E1BF5D85B00866C5B /* RabbitTests.swift */,
7576F6F220728F00006688F8 /* RabbitTestsPerf.swift */,
755FB1D9199E347D00475437 /* ExtensionsTest.swift */,
7576F6F420729069006688F8 /* ExtensionsTestPerf.swift */,
757DA2521A4ED0A4002BA3EF /* PaddingTests.swift */,
75482EA31CB310B7001F66A5 /* PBKDF.swift */,
7576F6F6207290F8006688F8 /* PBKDFPerf.swift */,
6A7CDEEC26CD1E4C00FFB1AF /* RSATests.swift */,
5431FD592B021470001DEE77 /* SignatureVerificationTests.swift */,
75C2E76C1D55F097003D2BCA /* Access.swift */,
756BFDCA1A82B87300B9D9A4 /* Bridging.h */,
);
name = Tests;
path = Tests/CryptoSwiftTests;
sourceTree = "<group>";
};
754BE46519693E190098E6F3 /* Supporting Files */ = {
isa = PBXGroup;
children = (
75F4E438216C9B6900F09710 /* README.md */,
75F4E437216C9B5D00F09710 /* CHANGELOG */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
75843E9A2072457A0050583A /* config */ = {
isa = PBXGroup;
children = (
75211FAF20724A10004E41F8 /* CryptoSwift-Debug.xcconfig */,
75211FAC20724A0F004E41F8 /* CryptoSwift-Release.xcconfig */,
75211FA820724A0F004E41F8 /* CryptoSwift-Shared.xcconfig */,
75211FB420724A10004E41F8 /* CryptoSwift-Test.xcconfig */,
75211FA520724A0F004E41F8 /* CryptoSwift-TestHostApp-Test.xcconfig */,
75211FA920724A0F004E41F8 /* CryptoSwift-TestHostApp-Shared.xcconfig */,
75211FB020724A10004E41F8 /* Project-Debug.xcconfig */,
75211FAA20724A0F004E41F8 /* Project-Release.xcconfig */,
75211FB220724A10004E41F8 /* Project-Shared.xcconfig */,
75211FAE20724A10004E41F8 /* Tests-Shared.xcconfig */,
75211FB120724A10004E41F8 /* Tests-Test.xcconfig */,
);
path = config;
sourceTree = "<group>";
};
75EC52361EE8B6CA0048EB3B /* Sources */ = {
isa = PBXGroup;
children = (
75EC52371EE8B6CA0048EB3B /* CryptoSwift */,
75EC527A1EE8B6CA0048EB3B /* CryptoSwift.h */,
);
path = Sources;
sourceTree = "<group>";
};
75EC52371EE8B6CA0048EB3B /* CryptoSwift */ = {
isa = PBXGroup;
children = (
7507706528D61E97004A44DC /* ASN1 */,
7507706228D61E8B004A44DC /* PEM */,
7507705B28D61E78004A44DC /* RSA */,
0AF023D4230F2B0F008E4E68 /* ISO78164Padding.swift */,
42012782267A6F1C00F82506 /* ISO10126Padding.swift */,
7529366820683DFC00195874 /* AEAD */,
75EC52381EE8B6CA0048EB3B /* AES.swift */,
751EE9771F93996100161FFC /* AES.Cryptors.swift */,
75EC52391EE8B6CA0048EB3B /* Array+Extension.swift */,
75EC523A1EE8B6CA0048EB3B /* Authenticator.swift */,
75EC523B1EE8B6CA0048EB3B /* BatchedCollection.swift */,
6AC893DF26DB94F700F7E787 /* CS_BigInt */,
75EC523C1EE8B6CA0048EB3B /* Bit.swift */,
75EC523D1EE8B6CA0048EB3B /* BlockCipher.swift */,
75EC523E1EE8B6CA0048EB3B /* BlockMode */,
75EC52491EE8B6CA0048EB3B /* Blowfish.swift */,
75EC524A1EE8B6CA0048EB3B /* ChaCha20.swift */,
75EC524B1EE8B6CA0048EB3B /* Checksum.swift */,
75EC524C1EE8B6CA0048EB3B /* Cipher.swift */,
0EE73E70204D598100110E11 /* CMAC.swift */,
75F4E435216C98DE00F09710 /* CBCMAC.swift */,
75EC524D1EE8B6CA0048EB3B /* Collection+Extension.swift */,
75EC524E1EE8B6CA0048EB3B /* Cryptors.swift */,
75EC52501EE8B6CA0048EB3B /* Digest.swift */,
75EC52511EE8B6CA0048EB3B /* DigestType.swift */,
75EC52521EE8B6CA0048EB3B /* Foundation */,
75EC525C1EE8B6CA0048EB3B /* Generics.swift */,
E6200E131FB9A7AE00258382 /* HKDF.swift */,
75EC525D1EE8B6CA0048EB3B /* HMAC.swift */,
75EC52611EE8B6CA0048EB3B /* MD5.swift */,
75EC52621EE8B6CA0048EB3B /* NoPadding.swift */,
75EC52631EE8B6CA0048EB3B /* Operators.swift */,
75EC52641EE8B6CA0048EB3B /* Padding.swift */,
75EC52651EE8B6CA0048EB3B /* PKCS */,
75EC526A1EE8B6CA0048EB3B /* Poly1305.swift */,
75EC526B1EE8B6CA0048EB3B /* Rabbit.swift */,
75EC526C1EE8B6CA0048EB3B /* Cryptor.swift */,
75EC526E1EE8B6CA0048EB3B /* SecureBytes.swift */,
81F279DC2181F58300449EDA /* Scrypt.swift */,
75EC526F1EE8B6CA0048EB3B /* SHA1.swift */,
75EC52701EE8B6CA0048EB3B /* SHA2.swift */,
75EC52711EE8B6CA0048EB3B /* SHA3.swift */,
75EC52721EE8B6CA0048EB3B /* String+Extension.swift */,
75EC525F1EE8B6CA0048EB3B /* Int+Extension.swift */,
75EC52761EE8B6CA0048EB3B /* UInt8+Extension.swift */,
75EC52731EE8B6CA0048EB3B /* UInt16+Extension.swift */,
75EC52741EE8B6CA0048EB3B /* UInt32+Extension.swift */,
75EC52751EE8B6CA0048EB3B /* UInt64+Extension.swift */,
75D7AF37208BFB1600D22BEB /* UInt128.swift */,
75EC52771EE8B6CA0048EB3B /* Updatable.swift */,
75EC52781EE8B6CA0048EB3B /* Utils.swift */,
75EC52791EE8B6CA0048EB3B /* ZeroPadding.swift */,
754310432050111A003FB1DF /* CompactMap.swift */,
75B3ED76210F9DF7005D4ADA /* BlockDecryptor.swift */,
75B3ED78210FA016005D4ADA /* BlockEncryptor.swift */,
753674062175D012003E32A6 /* StreamDecryptor.swift */,
756A64C52111083B00BE8805 /* StreamEncryptor.swift */,
7507707028D61ED5004A44DC /* Signature.swift */,
);
path = CryptoSwift;
sourceTree = "<group>";
};
75EC523E1EE8B6CA0048EB3B /* BlockMode */ = {
isa = PBXGroup;
children = (
75EC523F1EE8B6CA0048EB3B /* BlockMode.swift */,
75EC52401EE8B6CA0048EB3B /* BlockModeOptions.swift */,
75EC52411EE8B6CA0048EB3B /* CipherModeWorker.swift */,
75EC52421EE8B6CA0048EB3B /* CBC.swift */,
75EC52431EE8B6CA0048EB3B /* CFB.swift */,
75EC52441EE8B6CA0048EB3B /* CTR.swift */,
7523742C2083C61C0016D662 /* GCM.swift */,
75F4E433216C93EF00F09710 /* CCM.swift */,
75EC52451EE8B6CA0048EB3B /* ECB.swift */,
75EC52461EE8B6CA0048EB3B /* OFB.swift */,
75EC52471EE8B6CA0048EB3B /* PCBC.swift */,
35F3E51B23BF9A6700A024A1 /* OCB.swift */,
);
path = BlockMode;
sourceTree = "<group>";
};
75EC52521EE8B6CA0048EB3B /* Foundation */ = {
isa = PBXGroup;
children = (
75EC52531EE8B6CA0048EB3B /* AES+Foundation.swift */,
75EC52541EE8B6CA0048EB3B /* Blowfish+Foundation.swift */,
75EC52551EE8B6CA0048EB3B /* ChaCha20+Foundation.swift */,
75EC52561EE8B6CA0048EB3B /* Array+Foundation.swift */,
75EC52571EE8B6CA0048EB3B /* Data+Extension.swift */,
75EC52581EE8B6CA0048EB3B /* HMAC+Foundation.swift */,
75EC52591EE8B6CA0048EB3B /* Rabbit+Foundation.swift */,
75EC525A1EE8B6CA0048EB3B /* String+FoundationExtension.swift */,
75EC525B1EE8B6CA0048EB3B /* Utils+Foundation.swift */,
);
path = Foundation;
sourceTree = "<group>";
};
75EC52651EE8B6CA0048EB3B /* PKCS */ = {
isa = PBXGroup;
children = (
75EC52691EE8B6CA0048EB3B /* PKCS7Padding.swift */,
75EC52661EE8B6CA0048EB3B /* PBKDF1.swift */,
75EC52671EE8B6CA0048EB3B /* PBKDF2.swift */,
7507706E28D61EBA004A44DC /* PKCS1v15.swift */,
75EC52681EE8B6CA0048EB3B /* PKCS5.swift */,
750509981F6BEF2A00394A1B /* PKCS7.swift */,
);
path = PKCS;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
754BE45219693E190098E6F3 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
75EC527B1EE8B73A0048EB3B /* CryptoSwift.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
75211F91207249D8004E41F8 /* CryptoSwift-TestHostApp */ = {
isa = PBXNativeTarget;
buildConfigurationList = 75211FA4207249D8004E41F8 /* Build configuration list for PBXNativeTarget "CryptoSwift-TestHostApp" */;
buildPhases = (
75211F8E207249D8004E41F8 /* Sources */,
75211F8F207249D8004E41F8 /* Frameworks */,
75211F90207249D8004E41F8 /* Resources */,
7564F0682072ED7000CA5A96 /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
7564F0672072ED7000CA5A96 /* PBXTargetDependency */,
);
name = "CryptoSwift-TestHostApp";
productName = "CryptoSwift-TestHostApp";
productReference = 75211F92207249D8004E41F8 /* CryptoSwift-TestHostApp.app */;
productType = "com.apple.product-type.application";
};
754BE45419693E190098E6F3 /* CryptoSwift */ = {
isa = PBXNativeTarget;
buildConfigurationList = 754BE46B19693E190098E6F3 /* Build configuration list for PBXNativeTarget "CryptoSwift" */;
buildPhases = (
754BE45219693E190098E6F3 /* Headers */,
754BE45019693E190098E6F3 /* Sources */,
754BE45119693E190098E6F3 /* Frameworks */,
754BE45319693E190098E6F3 /* Resources */,
75B601E0197D69770009B53D /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = CryptoSwift;
packageProductDependencies = (
);
productName = CryptoSwift;
productReference = 754BE45519693E190098E6F3 /* CryptoSwift.framework */;
productType = "com.apple.product-type.framework";
};
754BE45F19693E190098E6F3 /* CryptoSwiftTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 754BE46E19693E190098E6F3 /* Build configuration list for PBXNativeTarget "CryptoSwiftTests" */;
buildPhases = (
754BE45C19693E190098E6F3 /* Sources */,
754BE45D19693E190098E6F3 /* Frameworks */,
754BE45E19693E190098E6F3 /* Resources */,
);
buildRules = (
);
dependencies = (
75B601E4197D69EB0009B53D /* PBXTargetDependency */,
75F9482220BDDF9900956311 /* PBXTargetDependency */,
);
name = CryptoSwiftTests;
productName = Tests;
productReference = 754BE46019693E190098E6F3 /* CryptoSwiftTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
7564F04E2072EAEB00CA5A96 /* TestsPerformance-iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7564F05C2072EAEB00CA5A96 /* Build configuration list for PBXNativeTarget "TestsPerformance-iOS" */;
buildPhases = (
7564F0512072EAEB00CA5A96 /* Sources */,
7564F0592072EAEB00CA5A96 /* Frameworks */,
7564F05B2072EAEB00CA5A96 /* Resources */,
);
buildRules = (
);
dependencies = (
7564F04F2072EAEB00CA5A96 /* PBXTargetDependency */,
7564F0622072EB5D00CA5A96 /* PBXTargetDependency */,
);
name = "TestsPerformance-iOS";
productName = TestsPerformance;
productReference = 7564F0602072EAEB00CA5A96 /* TestsPerformance-iOS.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
7595C1492072E48C00EA1A5F /* TestsPerformance-Mac */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7595C1522072E48C00EA1A5F /* Build configuration list for PBXNativeTarget "TestsPerformance-Mac" */;
buildPhases = (
7595C1462072E48C00EA1A5F /* Sources */,
7595C1472072E48C00EA1A5F /* Frameworks */,
7595C1482072E48C00EA1A5F /* Resources */,
);
buildRules = (
);
dependencies = (
7595C15F2072E64000EA1A5F /* PBXTargetDependency */,
);
name = "TestsPerformance-Mac";
productName = TestsPerformance;
productReference = 7595C14A2072E48C00EA1A5F /* TestsPerformance-Mac.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
754BE44C19693E190098E6F3 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0930;
LastUpgradeCheck = 1400;
ORGANIZATIONNAME = "Marcin Krzyzanowski";
TargetAttributes = {
75211F91207249D8004E41F8 = {
CreatedOnToolsVersion = 9.3;
LastSwiftMigration = 1020;
ProvisioningStyle = Manual;
};
754BE45419693E190098E6F3 = {
CreatedOnToolsVersion = 6.0;
LastSwiftMigration = 1020;
ProvisioningStyle = Manual;
};
754BE45F19693E190098E6F3 = {
CreatedOnToolsVersion = 6.0;
LastSwiftMigration = 1020;
ProvisioningStyle = Manual;
};
7564F04E2072EAEB00CA5A96 = {
LastSwiftMigration = 1020;
ProvisioningStyle = Manual;
TestTargetID = 75211F91207249D8004E41F8;
};
7595C1492072E48C00EA1A5F = {
CreatedOnToolsVersion = 9.3;
LastSwiftMigration = 1020;
ProvisioningStyle = Manual;
};
};
};
buildConfigurationList = 754BE44F19693E190098E6F3 /* Build configuration list for PBXProject "CryptoSwift" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 754BE44B19693E190098E6F3;
packageReferences = (
);
productRefGroup = 754BE45619693E190098E6F3 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
754BE45419693E190098E6F3 /* CryptoSwift */,
75211F91207249D8004E41F8 /* CryptoSwift-TestHostApp */,
754BE45F19693E190098E6F3 /* CryptoSwiftTests */,
7595C1492072E48C00EA1A5F /* TestsPerformance-Mac */,
7564F04E2072EAEB00CA5A96 /* TestsPerformance-iOS */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
75211F90207249D8004E41F8 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
755BA296235387700039CAB5 /* Default-568h@2x.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
754BE45319693E190098E6F3 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
754BE45E19693E190098E6F3 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
7564F05B2072EAEB00CA5A96 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
7595C1482072E48C00EA1A5F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
75211F8E207249D8004E41F8 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
75211F95207249D8004E41F8 /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
754BE45019693E190098E6F3 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7507705F28D61E78004A44DC /* RSA.swift in Sources */,
42012783267A6F1C00F82506 /* ISO10126Padding.swift in Sources */,
EC353DB42BECCEFD0026B46B /* BitwiseOps.swift in Sources */,
6AC8940226DB950F00F7E787 /* Multiplication.swift in Sources */,
0AF023D5230F2B0F008E4E68 /* ISO78164Padding.swift in Sources */,
EC353DBA2BECCF5A0026B46B /* IntegerConversion.swift in Sources */,
75EC52861EE8B8170048EB3B /* CFB.swift in Sources */,
75EC52901EE8B81A0048EB3B /* Collection+Extension.swift in Sources */,
EC353DBE2BECCF770026B46B /* SquareRoot.swift in Sources */,
EC353DC02BECCF860026B46B /* StringConversion.swift in Sources */,
0EE73E71204D598100110E11 /* CMAC.swift in Sources */,
EC353DBC2BECCF6A0026B46B /* PrimeTest.swift in Sources */,
7523742D2083C61D0016D662 /* GCM.swift in Sources */,
75F4E436216C98DE00F09710 /* CBCMAC.swift in Sources */,
752BED9F208C135700FC4743 /* AES+Foundation.swift in Sources */,
E6200E141FB9A7AE00258382 /* HKDF.swift in Sources */,
75EC529F1EE8B8230048EB3B /* HMAC.swift in Sources */,
75EC52B91EE8B83D0048EB3B /* ZeroPadding.swift in Sources */,
7507706428D61E8B004A44DC /* DER.swift in Sources */,
7529366A20683DFC00195874 /* AEADChaCha20Poly1305.swift in Sources */,
6AC893FA26DB950F00F7E787 /* Hashable.swift in Sources */,
75EC529E1EE8B8230048EB3B /* Generics.swift in Sources */,
75EC52AA1EE8B83D0048EB3B /* Poly1305.swift in Sources */,
75EC52AC1EE8B83D0048EB3B /* Cryptor.swift in Sources */,
75EC52821EE8B8170048EB3B /* BlockMode.swift in Sources */,
75EC52AE1EE8B83D0048EB3B /* SecureBytes.swift in Sources */,
6AC893FC26DB950F00F7E787 /* Codable.swift in Sources */,
75EC528F1EE8B81A0048EB3B /* Cipher.swift in Sources */,
75B3ED79210FA016005D4ADA /* BlockEncryptor.swift in Sources */,
75EC52A01EE8B8290048EB3B /* Int+Extension.swift in Sources */,
7507706028D61E78004A44DC /* RSA+Signature.swift in Sources */,
75EC52B01EE8B83D0048EB3B /* SHA2.swift in Sources */,
6AC893F626DB950F00F7E787 /* Addition.swift in Sources */,
752BED9D208C120D00FC4743 /* Blowfish+Foundation.swift in Sources */,
75EC52B71EE8B83D0048EB3B /* Updatable.swift in Sources */,
75EC528E1EE8B81A0048EB3B /* Checksum.swift in Sources */,
754310442050111A003FB1DF /* CompactMap.swift in Sources */,
7507706B28D61E97004A44DC /* ASN1Encoder.swift in Sources */,
75EC52811EE8B8130048EB3B /* BlockCipher.swift in Sources */,
75EC52941EE8B81A0048EB3B /* DigestType.swift in Sources */,
75EC529B1EE8B8200048EB3B /* Rabbit+Foundation.swift in Sources */,
6AC893F926DB950F00F7E787 /* Comparable.swift in Sources */,
756A64C62111083B00BE8805 /* StreamEncryptor.swift in Sources */,
6AC8940726DB950F00F7E787 /* Exponentiation.swift in Sources */,
6AC8940026DB950F00F7E787 /* Subtraction.swift in Sources */,
75EC52A61EE8B8390048EB3B /* PBKDF1.swift in Sources */,
75EC52B41EE8B83D0048EB3B /* UInt32+Extension.swift in Sources */,
6AC8940526DB950F00F7E787 /* Strideable.swift in Sources */,
75EC52911EE8B81A0048EB3B /* Cryptors.swift in Sources */,
75EC52881EE8B8170048EB3B /* ECB.swift in Sources */,
75EC52841EE8B8170048EB3B /* CipherModeWorker.swift in Sources */,
75EC52A41EE8B8290048EB3B /* Operators.swift in Sources */,
75EC529A1EE8B8200048EB3B /* HMAC+Foundation.swift in Sources */,
6AC8940826DB950F00F7E787 /* Random.swift in Sources */,
75EC52B21EE8B83D0048EB3B /* String+Extension.swift in Sources */,
750509991F6BEF2A00394A1B /* PKCS7.swift in Sources */,
7507706C28D61E97004A44DC /* ASN1Decoder.swift in Sources */,
75EC52B51EE8B83D0048EB3B /* UInt64+Extension.swift in Sources */,
EC353DB62BECCF3A0026B46B /* DataConversion.swift in Sources */,
7507707128D61ED5004A44DC /* Signature.swift in Sources */,
75EC52AF1EE8B83D0048EB3B /* SHA1.swift in Sources */,
75EC52801EE8B8130048EB3B /* Bit.swift in Sources */,
7507706D28D61E97004A44DC /* ASN1.swift in Sources */,
75EC52971EE8B8200048EB3B /* ChaCha20+Foundation.swift in Sources */,
75F4E434216C93EF00F09710 /* CCM.swift in Sources */,
75EC52871EE8B8170048EB3B /* CTR.swift in Sources */,
6AC893FD26DB950F00F7E787 /* Shifts.swift in Sources */,
75EC52A21EE8B8290048EB3B /* MD5.swift in Sources */,
75EC527C1EE8B8130048EB3B /* AES.swift in Sources */,
752BED9E208C121000FC4743 /* Blowfish.swift in Sources */,
75EC52A91EE8B83D0048EB3B /* PKCS7Padding.swift in Sources */,
75EC52A51EE8B8290048EB3B /* Padding.swift in Sources */,
7507706128D61E78004A44DC /* RSA+Cipher.swift in Sources */,
6AC8940A26DB950F00F7E787 /* BigUInt.swift in Sources */,
75EC527F1EE8B8130048EB3B /* BatchedCollection.swift in Sources */,
75EC52991EE8B8200048EB3B /* Data+Extension.swift in Sources */,
75EC52B61EE8B83D0048EB3B /* UInt8+Extension.swift in Sources */,
75EC52891EE8B8170048EB3B /* OFB.swift in Sources */,
75EC52831EE8B8170048EB3B /* BlockModeOptions.swift in Sources */,
753674072175D012003E32A6 /* StreamDecryptor.swift in Sources */,
6AC8940626DB950F00F7E787 /* BigInt.swift in Sources */,
EC353DC22BECCF8F0026B46B /* WordsAndBits.swift in Sources */,
751EE9781F93996100161FFC /* AES.Cryptors.swift in Sources */,
75EC527D1EE8B8130048EB3B /* Array+Extension.swift in Sources */,
75D7AF38208BFB1600D22BEB /* UInt128.swift in Sources */,
7571938E2816BFE3001C3AC0 /* CS.swift in Sources */,
75EC52B31EE8B83D0048EB3B /* UInt16+Extension.swift in Sources */,
75EC52A81EE8B8390048EB3B /* PKCS5.swift in Sources */,
1467460F2017BB3600DF04ED /* AEAD.swift in Sources */,
35F3E51C23BF9A6700A024A1 /* OCB.swift in Sources */,
6AC8940B26DB950F00F7E787 /* Division.swift in Sources */,
75EC528A1EE8B8170048EB3B /* PCBC.swift in Sources */,
75EC528D1EE8B81A0048EB3B /* ChaCha20.swift in Sources */,
75EC52851EE8B8170048EB3B /* CBC.swift in Sources */,
75EC52A71EE8B8390048EB3B /* PBKDF2.swift in Sources */,
75EC529D1EE8B8200048EB3B /* Utils+Foundation.swift in Sources */,
75EC527E1EE8B8130048EB3B /* Authenticator.swift in Sources */,
7507706A28D61E97004A44DC /* ASN1Scanner.swift in Sources */,
75EC52AB1EE8B83D0048EB3B /* Rabbit.swift in Sources */,
75B3ED77210F9DF7005D4ADA /* BlockDecryptor.swift in Sources */,
7507706F28D61EBA004A44DC /* PKCS1v15.swift in Sources */,
75EC529C1EE8B8200048EB3B /* String+FoundationExtension.swift in Sources */,
75EC52B81EE8B83D0048EB3B /* Utils.swift in Sources */,
75EC52981EE8B8200048EB3B /* Array+Foundation.swift in Sources */,
75EC52B11EE8B83D0048EB3B /* SHA3.swift in Sources */,
75EC52A31EE8B8290048EB3B /* NoPadding.swift in Sources */,
EC353DB82BECCF4B0026B46B /* FloatingPointConversion.swift in Sources */,
6AC893F826DB950F00F7E787 /* GCD.swift in Sources */,
81F279DD2181F58300449EDA /* Scrypt.swift in Sources */,
75EC52931EE8B81A0048EB3B /* Digest.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
754BE45C19693E190098E6F3 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
751AA0F3255F4EB600D4719E /* AESOCBTests.swift in Sources */,
75C2E76D1D55F097003D2BCA /* Access.swift in Sources */,
75482EA41CB310B7001F66A5 /* PBKDF.swift in Sources */,
758A94291A65C67400E46135 /* HMACTests.swift in Sources */,
75100F8F19B0BC890005C5F5 /* Poly1305Tests.swift in Sources */,
E6200E171FB9B68C00258382 /* HKDFTests.swift in Sources */,
754BE46819693E190098E6F3 /* DigestTests.swift in Sources */,
E3FD2D531D6B81CE00A9F35F /* Error+Extension.swift in Sources */,
757DA2591A4ED4D7002BA3EF /* ChaCha20Tests.swift in Sources */,
755FB1DA199E347D00475437 /* ExtensionsTest.swift in Sources */,
81F279DF2181F5A000449EDA /* ScryptTests.swift in Sources */,
674A736F1BF5D85B00866C5B /* RabbitTests.swift in Sources */,
0EE73E74204D59C200110E11 /* CMACTests.swift in Sources */,
6A7CDEED26CD1E4C00FFB1AF /* RSATests.swift in Sources */,
750CC3EB1DC0CACE0096BE6E /* BlowfishTests.swift in Sources */,
757DA2531A4ED0A4002BA3EF /* PaddingTests.swift in Sources */,
14156CE52011422400DDCFBC /* ChaCha20Poly1305Tests.swift in Sources */,
757DA2551A4ED408002BA3EF /* AESTests.swift in Sources */,
5431FD5B2B021476001DEE77 /* SignatureVerificationTests.swift in Sources */,
7594CCBC217A76DC0055C95D /* AESCCMTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7564F0512072EAEB00CA5A96 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7564F0522072EAEB00CA5A96 /* PBKDFPerf.swift in Sources */,
7564F0532072EAEB00CA5A96 /* ChaCha20TestsPerf.swift in Sources */,
7564F0542072EAEB00CA5A96 /* RabbitTestsPerf.swift in Sources */,
7564F0552072EAEB00CA5A96 /* ExtensionsTestPerf.swift in Sources */,
7564F0562072EAEB00CA5A96 /* DigestTestsPerf.swift in Sources */,
81F279E22181F5C500449EDA /* ScryptTestsPerf.swift in Sources */,
7564F0582072EAEB00CA5A96 /* AESTestsPerf.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
7595C1462072E48C00EA1A5F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
7595C15D2072E5B900EA1A5F /* PBKDFPerf.swift in Sources */,
7595C15A2072E5B900EA1A5F /* ChaCha20TestsPerf.swift in Sources */,
7595C15B2072E5B900EA1A5F /* RabbitTestsPerf.swift in Sources */,
7595C15C2072E5B900EA1A5F /* ExtensionsTestPerf.swift in Sources */,
7595C1582072E5B900EA1A5F /* DigestTestsPerf.swift in Sources */,
81F279E12181F5C500449EDA /* ScryptTestsPerf.swift in Sources */,
7595C1592072E5B900EA1A5F /* AESTestsPerf.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
7564F04F2072EAEB00CA5A96 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 754BE45419693E190098E6F3 /* CryptoSwift */;
targetProxy = 7564F0502072EAEB00CA5A96 /* PBXContainerItemProxy */;
};
7564F0622072EB5D00CA5A96 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
platformFilter = ios;
target = 75211F91207249D8004E41F8 /* CryptoSwift-TestHostApp */;
targetProxy = 7564F0612072EB5D00CA5A96 /* PBXContainerItemProxy */;
};
7564F0672072ED7000CA5A96 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 754BE45419693E190098E6F3 /* CryptoSwift */;
targetProxy = 7564F0662072ED7000CA5A96 /* PBXContainerItemProxy */;
};
7595C15F2072E64000EA1A5F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 754BE45419693E190098E6F3 /* CryptoSwift */;
targetProxy = 7595C15E2072E64000EA1A5F /* PBXContainerItemProxy */;
};
75B601E4197D69EB0009B53D /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 754BE45419693E190098E6F3 /* CryptoSwift */;
targetProxy = 75B601E3197D69EB0009B53D /* PBXContainerItemProxy */;
};
75F9482220BDDF9900956311 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
platformFilter = ios;
target = 75211F91207249D8004E41F8 /* CryptoSwift-TestHostApp */;
targetProxy = 75F9482120BDDF9900956311 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
75211FA1207249D8004E41F8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Debug;
};
75211FA2207249D8004E41F8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Release;
};
75211FA3207249D8004E41F8 /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FA520724A0F004E41F8 /* CryptoSwift-TestHostApp-Test.xcconfig */;
buildSettings = {
};
name = Test;
};
754BE46919693E190098E6F3 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FB020724A10004E41F8 /* Project-Debug.xcconfig */;
buildSettings = {
};
name = Debug;
};
754BE46A19693E190098E6F3 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FAA20724A0F004E41F8 /* Project-Release.xcconfig */;
buildSettings = {
};
name = Release;
};
754BE46C19693E190098E6F3 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FAF20724A10004E41F8 /* CryptoSwift-Debug.xcconfig */;
buildSettings = {
};
name = Debug;
};
754BE46D19693E190098E6F3 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FAC20724A0F004E41F8 /* CryptoSwift-Release.xcconfig */;
buildSettings = {
};
name = Release;
};
754BE46F19693E190098E6F3 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Debug;
};
754BE47019693E190098E6F3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Release;
};
7564F05D2072EAEB00CA5A96 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
SDKROOT = iphoneos;
};
name = Debug;
};
7564F05E2072EAEB00CA5A96 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
SDKROOT = iphoneos;
};
name = Release;
};
7564F05F2072EAEB00CA5A96 /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FB120724A10004E41F8 /* Tests-Test.xcconfig */;
buildSettings = {
SDKROOT = iphoneos;
};
name = Test;
};
756B66AA1F6AAFDB00DEC41C /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FB220724A10004E41F8 /* Project-Shared.xcconfig */;
buildSettings = {
};
name = Test;
};
756B66AB1F6AAFDB00DEC41C /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FB420724A10004E41F8 /* CryptoSwift-Test.xcconfig */;
buildSettings = {
};
name = Test;
};
756B66AC1F6AAFDB00DEC41C /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FB120724A10004E41F8 /* Tests-Test.xcconfig */;
buildSettings = {
};
name = Test;
};
7595C14F2072E48C00EA1A5F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Debug;
};
7595C1502072E48C00EA1A5F /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
};
name = Release;
};
7595C1512072E48C00EA1A5F /* Test */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 75211FB120724A10004E41F8 /* Tests-Test.xcconfig */;
buildSettings = {
};
name = Test;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
75211FA4207249D8004E41F8 /* Build configuration list for PBXNativeTarget "CryptoSwift-TestHostApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
75211FA1207249D8004E41F8 /* Debug */,
75211FA2207249D8004E41F8 /* Release */,
75211FA3207249D8004E41F8 /* Test */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
754BE44F19693E190098E6F3 /* Build configuration list for PBXProject "CryptoSwift" */ = {
isa = XCConfigurationList;
buildConfigurations = (
754BE46919693E190098E6F3 /* Debug */,
754BE46A19693E190098E6F3 /* Release */,
756B66AA1F6AAFDB00DEC41C /* Test */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
754BE46B19693E190098E6F3 /* Build configuration list for PBXNativeTarget "CryptoSwift" */ = {
isa = XCConfigurationList;
buildConfigurations = (
754BE46C19693E190098E6F3 /* Debug */,
754BE46D19693E190098E6F3 /* Release */,
756B66AB1F6AAFDB00DEC41C /* Test */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
754BE46E19693E190098E6F3 /* Build configuration list for PBXNativeTarget "CryptoSwiftTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
754BE46F19693E190098E6F3 /* Debug */,
754BE47019693E190098E6F3 /* Release */,
756B66AC1F6AAFDB00DEC41C /* Test */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7564F05C2072EAEB00CA5A96 /* Build configuration list for PBXNativeTarget "TestsPerformance-iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7564F05D2072EAEB00CA5A96 /* Debug */,
7564F05E2072EAEB00CA5A96 /* Release */,
7564F05F2072EAEB00CA5A96 /* Test */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
7595C1522072E48C00EA1A5F /* Build configuration list for PBXNativeTarget "TestsPerformance-Mac" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7595C14F2072E48C00EA1A5F /* Debug */,
7595C1502072E48C00EA1A5F /* Release */,
7595C1512072E48C00EA1A5F /* Test */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 754BE44C19693E190098E6F3 /* Project object */;
}
================================================
FILE: CryptoSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:../Tests/CryptoSwiftTests">
</FileRef>
</Workspace>
================================================
FILE: CryptoSwift.xcodeproj/project.xcworkspace/xcshareddata/CryptoSwift.xcscmblueprint
================================================
================================================
FILE: CryptoSwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: CryptoSwift.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
<false/>
</dict>
</plist>
================================================
FILE: CryptoSwift.xcodeproj/xcshareddata/IDETemplateMacros.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>FILEHEADER</key>
<string>// CryptoSwift
//
// Copyright (C) 2014-__YEAR__ Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//</string>
</dict>
</plist>
================================================
FILE: CryptoSwift.xcodeproj/xcshareddata/xcschemes/CryptoSwift-TestHostApp.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "75211F91207249D8004E41F8"
BuildableName = "CryptoSwift-TestHostApp.app"
BlueprintName = "CryptoSwift-TestHostApp"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "75211F91207249D8004E41F8"
BuildableName = "CryptoSwift-TestHostApp.app"
BlueprintName = "CryptoSwift-TestHostApp"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "75211F91207249D8004E41F8"
BuildableName = "CryptoSwift-TestHostApp.app"
BlueprintName = "CryptoSwift-TestHostApp"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "75211F91207249D8004E41F8"
BuildableName = "CryptoSwift-TestHostApp.app"
BlueprintName = "CryptoSwift-TestHostApp"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Test">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: CryptoSwift.xcodeproj/xcshareddata/xcschemes/CryptoSwift.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45419693E190098E6F3"
BuildableName = "CryptoSwift.framework"
BlueprintName = "CryptoSwift"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45F19693E190098E6F3"
BuildableName = "CryptoSwiftTests.xctest"
BlueprintName = "CryptoSwiftTests"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7595C1492072E48C00EA1A5F"
BuildableName = "TestsPerformance-Mac.xctest"
BlueprintName = "TestsPerformance-Mac"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7564F04E2072EAEB00CA5A96"
BuildableName = "TestsPerformance-iOS.xctest"
BlueprintName = "TestsPerformance-iOS"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
disableMainThreadChecker = "YES"
systemAttachmentLifetime = "keepNever"
onlyGenerateCoverageForSpecifiedTargets = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45419693E190098E6F3"
BuildableName = "CryptoSwift.framework"
BlueprintName = "CryptoSwift"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45F19693E190098E6F3"
BuildableName = "CryptoSwiftTests.xctest"
BlueprintName = "CryptoSwiftTests"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "NO"
debugServiceExtension = "internal"
allowLocationSimulation = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45419693E190098E6F3"
BuildableName = "CryptoSwift.framework"
BlueprintName = "CryptoSwift"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</MacroExpansion>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45419693E190098E6F3"
BuildableName = "CryptoSwift.framework"
BlueprintName = "CryptoSwift"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Release">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: CryptoSwift.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "754BE45F19693E190098E6F3"
BuildableName = "CryptoSwiftTests.xctest"
BlueprintName = "CryptoSwiftTests"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Test"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Test">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: CryptoSwift.xcodeproj/xcshareddata/xcschemes/TestsPerformance-Mac.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7595C1492072E48C00EA1A5F"
BuildableName = "TestsPerformance-Mac.xctest"
BlueprintName = "TestsPerformance-Mac"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Test">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: CryptoSwift.xcodeproj/xcshareddata/xcschemes/TestsPerformance-iOS.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1400"
version = "1.3">
<BuildAction
parallelizeBuildables = "NO"
buildImplicitDependencies = "YES">
</BuildAction>
<TestAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "7564F04E2072EAEB00CA5A96"
BuildableName = "TestsPerformance-iOS.xctest"
BlueprintName = "TestsPerformance-iOS"
ReferencedContainer = "container:CryptoSwift.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Test"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
</LaunchAction>
<ProfileAction
buildConfiguration = "Test"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Test">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>
================================================
FILE: LICENSE
================================================
Copyright (C) 2014-3099 Marcin Krzyżanowski <marcin.krzyzanowski@gmail.com>
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:
- 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 is required.
- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- This notice may not be removed or altered from any source or binary distribution.
- Redistributions of any form whatsoever must retain the following acknowledgment: 'This product includes software developed by the "Marcin Krzyzanowski" (http://krzyzanowskim.com/).'
================================================
FILE: Makefile
================================================
.PHONY: frameworks
CWD := $(abspath $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))))
frameworks:
$(CWD)/scripts/build-framework.sh
@echo "Framework built in $(CWD)/CryptoSwift.xcframework"
all: frameworks
================================================
FILE: Package.swift
================================================
// swift-tools-version:5.6
import PackageDescription
let package = Package(
name: "CryptoSwift",
platforms: [
.macOS(.v10_13), .macCatalyst(.v13), .iOS(.v11), .tvOS(.v11), .watchOS(.v4), .custom("visionos", versionString: "1.0")
],
products: [
.library(
name: "CryptoSwift",
targets: ["CryptoSwift"]
)
],
targets: [
.target(name: "CryptoSwift", resources: [.copy("PrivacyInfo.xcprivacy")]),
.testTarget(name: "CryptoSwiftTests", dependencies: ["CryptoSwift"])
],
swiftLanguageVersions: [.v5]
)
================================================
FILE: README.md
================================================
[](#installation)
[](#swift-versions-support)
[](https://github.com/swiftlang/swift-package-manager)
[](https://github.com/Carthage/Carthage)
[](https://cocoapods.org/pods/CryptoSwift)
# CryptoSwift
Crypto related functions and helpers for [Swift](https://swift.org) implemented in Swift. ([#PureSwift](https://twitter.com/hashtag/pureswift))
**Note**: The `main` branch follows the latest currently released **version of Swift**. If you need an earlier version for an older version of Swift, specify its version in your `Podfile` or use the code on the branch for that version. Older branches are unsupported. Check [versions](#swift-versions-support) for details.
---
[Requirements](#requirements) | [Features](#features) | [Contribution](#contribution) | [Installation](#installation) | [Swift versions](#swift-versions-support) | [How-to](#how-to) | [Author](#author) | [License](#license) | [Changelog](#changelog)
### Support & Sponsors
The financial sustainability of the project is possible thanks to the ongoing contributions from our [GitHub Sponsors](https://github.com/sponsors/krzyzanowskim)
### Premium Sponsors
[Emerge Tools](https://www.emergetools.com/) is a suite of revolutionary products designed to supercharge mobile apps and the teams that build them.
[<img alt="www.emergetools.com/" width="200" src="https://github-production-user-asset-6210df.s3.amazonaws.com/758033/256565082-a21f5ac1-ef39-4b56-a8d2-575adeb7fe55.png" />](https://www.emergetools.com)
## Requirements
Good mood
## Features
- Easy to use
- Convenient extensions for String and Data
- Support for incremental updates (stream, ...)
- iOS, Android, macOS, AppleTV, watchOS, Linux support
#### Hash (Digest)
[MD5](https://tools.ietf.org/html/rfc1321)
| [SHA1](https://tools.ietf.org/html/rfc3174)
| [SHA2-224](https://tools.ietf.org/html/rfc6234)
| [SHA2-256](https://tools.ietf.org/html/rfc6234)
| [SHA2-384](https://tools.ietf.org/html/rfc6234)
| [SHA2-512](https://tools.ietf.org/html/rfc6234)
| [SHA3](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf)
#### Cyclic Redundancy Check (CRC)
[CRC32](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
| [CRC32C](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
| [CRC16](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)
#### Cipher
[AES-128, AES-192, AES-256](http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf)
| [ChaCha20](http://cr.yp.to/chacha/chacha-20080128.pdf)
| [XChaCha20](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha)
| [Rabbit](https://tools.ietf.org/html/rfc4503)
| [Blowfish](https://www.schneier.com/academic/blowfish/)
#### RSA (public-key encryption algorithm)
[Encryption, Signature](https://github.com/krzyzanowskim/CryptoSwift#rsa)
#### Message authenticators
[Poly1305](https://cr.yp.to/mac/poly1305-20050329.pdf)
| [HMAC (MD5, SHA1, SHA256)](https://www.ietf.org/rfc/rfc2104.txt)
| [CMAC](https://tools.ietf.org/html/rfc4493)
| [CBC-MAC](https://en.wikipedia.org/wiki/CBC-MAC)
#### Cipher mode of operation
- Electronic codebook ([ECB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_codebook_.28ECB.29))
- Cipher-block chaining ([CBC](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28CBC.29))
- Propagating Cipher Block Chaining ([PCBC](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Propagating_Cipher_Block_Chaining_.28PCBC.29))
- Cipher feedback ([CFB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_feedback_.28CFB.29))
- Output Feedback ([OFB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_Feedback_.28OFB.29))
- Counter Mode ([CTR](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29))
- Galois/Counter Mode ([GCM](https://csrc.nist.gov/publications/detail/sp/800-38d/final))
- Counter with Cipher Block Chaining-Message Authentication Code ([CCM](https://csrc.nist.gov/publications/detail/sp/800-38c/final))
- OCB Authenticated-Encryption Algorithm ([OCB](https://tools.ietf.org/html/rfc7253))
#### Password-Based Key Derivation Function
- [PBKDF1](https://tools.ietf.org/html/rfc2898#section-5.1) (Password-Based Key Derivation Function 1)
- [PBKDF2](https://tools.ietf.org/html/rfc2898#section-5.2) (Password-Based Key Derivation Function 2)
- [HKDF](https://tools.ietf.org/html/rfc5869) (HMAC-based Extract-and-Expand Key Derivation Function)
- [Scrypt](https://tools.ietf.org/html/rfc7914) (The scrypt Password-Based Key Derivation Function)
#### Data padding
- [PKCS#5](https://www.rfc-editor.org/rfc/rfc2898.html)
- [EMSA-PKCS1-v1_5 (Encoding Method for Signature)](https://www.rfc-editor.org/rfc/rfc3447#section-9.2)
- [EME-PCKS1-v1_5 (Encoding Method for Encryption)](https://www.rfc-editor.org/rfc/rfc3447)
- [PKCS#7](https://tools.ietf.org/html/rfc5652#section-6.3)
- [Zero padding](https://en.wikipedia.org/wiki/Padding_(cryptography)#Zero_padding)
- [ISO78164](https://www.embedx.com/pdfs/ISO_STD_7816/info_isoiec7816-4%7Bed21.0%7Den.pdf)
- [ISO10126](https://en.wikipedia.org/wiki/Padding_(cryptography)#ISO_10126)
- No padding
#### Authenticated Encryption with Associated Data (AEAD)
- [AEAD\_CHACHA20\_POLY1305](https://tools.ietf.org/html/rfc7539#section-2.8)
- [AEAD\_XCHACHA20\_POLY1305](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#section-2)
## Why
[Why?](https://github.com/krzyzanowskim/CryptoSwift/discussions/982) [Because I can](https://github.com/krzyzanowskim/CryptoSwift/discussions/982#discussioncomment-3669415).
## How do I get involved?
You want to help, great! Go ahead and fork our repo, make your changes and send us a pull request.
## Contribution
Check out [CONTRIBUTING.md](CONTRIBUTING.md) for more information on how to help with CryptoSwift.
- If you found a bug, [open a discussion](https://github.com/krzyzanowskim/CryptoSwift/discussions).
- If you have a feature request, [open a discussion](https://github.com/krzyzanowskim/CryptoSwift/discussions).
## Installation
### Hardened Runtime (macOS) and Xcode
Binary CryptoSwift.xcframework (Used by Swift Package Manager package integration) won't load properly in your app if the app uses **Sign to Run Locally** Signing Certificate with Hardened Runtime enabled. It is possible to setup Xcode like this. To solve the problem you have two options:
- Use proper Signing Certificate, eg. *Development* <- this is the proper action
- Use `Disable Library Validation` aka `com.apple.security.cs.disable-library-validation` entitlement
#### Xcode Project
To install CryptoSwift, add it as a submodule to your project (on the top level project directory):
git submodule add https://github.com/krzyzanowskim/CryptoSwift.git
It is recommended to enable [Whole-Module Optimization](https://swift.org/blog/whole-module-optimizations/) to gain better performance. Non-optimized build results in significantly worse performance.
#### Swift Package Manager
You can use [Swift Package Manager](https://swift.org/package-manager/) and specify dependency in `Package.swift` by adding this:
```swift
.package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", from: "1.9.0")
```
See: [Package.swift - manual](https://blog.krzyzanowskim.com/2016/08/09/package-swift-manual/)
Notice: Swift Package Manager uses debug configuration for debug Xcode build, that may result in significant (up to x10000) worse performance. Performance characteristic is different in Release build. To overcome this problem, consider embed `CryptoSwift.xcframework` described below.
#### Carthage
You can use [Carthage](https://github.com/Carthage/Carthage).
Specify in Cartfile:
```ruby
github "krzyzanowskim/CryptoSwift"
```
Run `carthage` to build the framework and drag the built CryptoSwift.framework into your Xcode project. Follow [build instructions](https://github.com/Carthage/Carthage#getting-started). [Common issues](https://github.com/krzyzanowskim/CryptoSwift/discussions/983#discussioncomment-3669433).
#### CocoaPods
> **Note**: CocoaPods is deprecated and no longer recommended for new projects. Use Swift Package Manager or Carthage instead.
You can use [CocoaPods](https://cocoapods.org/pods/CryptoSwift).
```ruby
pod 'CryptoSwift', '~> 1.8.4'
```
Bear in mind that CocoaPods will build CryptoSwift without [Whole-Module Optimization](https://swift.org/blog/whole-module-optimizations/) that may impact performance. You can change it manually after installation, or use [cocoapods-wholemodule](https://github.com/jedlewison/cocoapods-wholemodule) plugin.
#### XCFramework
XCFrameworks require Xcode 11 or later and they can be integrated similarly to how we’re used to integrating the `.framework` format.
Please use script [scripts/build-framework.sh](scripts/build-framework.sh) to generate binary `CryptoSwift.xcframework` archive that you can use as a dependency in Xcode.
CryptoSwift.xcframework is a Release (Optimized) binary that offer best available Swift code performance.
<img width="320" alt="Screen Shot 2020-10-27 at 00 06 32" src="https://user-images.githubusercontent.com/758033/97240586-f0878280-17ee-11eb-9119-e5a960417d04.png">
#### Embedded Framework
Embedded frameworks require a minimum deployment target of iOS 11.0 or macOS Sierra (10.13). Drag the `CryptoSwift.xcodeproj` file into your Xcode project, and add appropriate framework as a dependency to your target. Now select your App and choose the General tab for the app target. Find *Embedded Binaries* and press "+", then select `CryptoSwift.framework` (iOS, macOS, watchOS or tvOS)

Sometimes "embedded framework" option is not available. In that case, you have to add new build phase for the target.

##### iOS, macOS, watchOS, tvOS
In the project, you'll find [single scheme](https://mxcl.dev/PromiseKit/news/2016/08/Multiplatform-Single-Scheme-Xcode-Projects/) for all platforms:
- CryptoSwift
#### Swift versions support
- Swift 1.2: branch [swift12](https://github.com/krzyzanowskim/CryptoSwift/tree/swift12) version <= 0.0.13
- Swift 2.1: branch [swift21](https://github.com/krzyzanowskim/CryptoSwift/tree/swift21) version <= 0.2.3
- Swift 2.2, 2.3: branch [swift2](https://github.com/krzyzanowskim/CryptoSwift/tree/swift2) version <= 0.5.2
- Swift 3.1, branch [swift3](https://github.com/krzyzanowskim/CryptoSwift/tree/swift3) version <= 0.6.9
- Swift 3.2, branch [swift32](https://github.com/krzyzanowskim/CryptoSwift/tree/swift32) version = 0.7.0
- Swift 4.0, branch [swift4](https://github.com/krzyzanowskim/CryptoSwift/tree/swift4) version <= 0.12.0
- Swift 4.2, branch [swift42](https://github.com/krzyzanowskim/CryptoSwift/tree/swift42) version <= 0.15.0
- Swift 5.0, branch [swift5](https://github.com/krzyzanowskim/CryptoSwift/tree/swift5) version <= 1.2.0
- Swift 5.1, branch [swift51](https://github.com/krzyzanowskim/CryptoSwift/tree/swift51) version <= 1.3.3
- Swift 5.3, branch [swift53](https://github.com/krzyzanowskim/CryptoSwift/tree/swift53) version <= 1.8.5
- Swift 6.2 and newer, branch [main](https://github.com/krzyzanowskim/CryptoSwift/tree/main)
## How-to
* [Basics (data types, conversion, ...)](#basics)
* [Digest (MD5, SHA...)](#calculate-digest)
* [Message authenticators (HMAC, CMAC...)](#message-authenticators-1)
* [Password-Based Key Derivation Function (PBKDF2, ...)](#password-based-key-derivation-functions)
* [HMAC-based Key Derivation Function (HKDF)](#hmac-based-key-derivation-function)
* [Data Padding](#data-padding)
* [ChaCha20](#chacha20)
* [Rabbit](#rabbit)
* [Blowfish](#blowfish)
* [AES - Advanced Encryption Standard](#aes)
* [AES-GCM](#aes-gcm)
* [Authenticated Encryption with Associated Data (AEAD)](#aead)
##### Basics
```swift
import CryptoSwift
```
CryptoSwift uses array of bytes aka `Array<UInt8>` as a base type for all operations. Every data may be converted to a stream of bytes. You will find convenience functions that accept `String` or `Data`, and it will be internally converted to the array of bytes.
##### Data types conversion
For your convenience, **CryptoSwift** provides two functions to easily convert an array of bytes to `Data` or `Data` to an array of bytes:
Data from bytes:
```swift
let data = Data([0x01, 0x02, 0x03])
```
`Data` to `Array<UInt8>`
```swift
let bytes = data.byteArray // [1,2,3]
```
[Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal) encoding:
```swift
let bytes = Array<UInt8>(hex: "0x010203") // [1,2,3]
let hex = bytes.toHexString() // "010203"
```
Build bytes out of `String`
```swift
let bytes: Array<UInt8> = "cipherkey".bytes // Array("cipherkey".utf8)
```
Also... check out helpers that work with **Base64** encoded data:
```swift
"aPf/i9th9iX+vf49eR7PYk2q7S5xmm3jkRLejgzHNJs=".decryptBase64ToString(cipher)
"aPf/i9th9iX+vf49eR7PYk2q7S5xmm3jkRLejgzHNJs=".decryptBase64(cipher)
bytes.toBase64()
```
##### Calculate Digest
Hashing a data or array of bytes (aka `Array<UInt8>`)
```swift
/* Hash struct usage */
let bytes: Array<UInt8> = [0x01, 0x02, 0x03]
let digest = input.md5()
let digest = Digest.md5(bytes)
```
```swift
let data = Data([0x01, 0x02, 0x03])
let hash = data.md5()
let hash = data.sha1()
let hash = data.sha224()
let hash = data.sha256()
let hash = data.sha384()
let hash = data.sha512()
```
```swift
do {
var digest = MD5()
let partial1 = try digest.update(withBytes: [0x31, 0x32])
let partial2 = try digest.update(withBytes: [0x33])
let result = try digest.finish()
} catch { }
```
Hashing a String and printing result
```swift
let hash = "123".md5() // "123".bytes.md5()
```
##### Calculate CRC
```swift
bytes.crc16()
data.crc16()
bytes.crc32()
data.crc32()
```
##### Message authenticators
```swift
// Calculate Message Authentication Code (MAC) for message
let key: Array<UInt8> = [1,2,3,4,5,6,7,8,9,10,...]
try Poly1305(key: key).authenticate(bytes)
try HMAC(key: key, variant: .sha256).authenticate(bytes)
try CMAC(key: key).authenticate(bytes)
```
##### Password-Based Key Derivation Functions
```swift
let password: Array<UInt8> = Array("s33krit".utf8)
let salt: Array<UInt8> = Array("nacllcan".utf8)
let key = try PKCS5.PBKDF2(password: password, salt: salt, iterations: 4096, keyLength: 32, variant: .sha2(.sha256)).calculate()
```
```swift
let password: Array<UInt8> = Array("s33krit".utf8)
let salt: Array<UInt8> = Array("nacllcan".utf8)
// Scrypt implementation does not implement work parallelization, so `p` parameter will
// increase the work time even in multicore systems
let key = try Scrypt(password: password, salt: salt, dkLen: 64, N: 16384, r: 8, p: 1).calculate()
```
##### HMAC-based Key Derivation Function
```swift
let password: Array<UInt8> = Array("s33krit".utf8)
let salt: Array<UInt8> = Array("nacllcan".utf8)
let key = try HKDF(password: password, salt: salt, variant: .sha256).calculate()
```
##### Data Padding
Some content-encryption algorithms assume the input length is a multiple of `k` octets, where `k` is greater than one. For such algorithms, the input shall be padded.
```swift
Padding.pkcs7.add(to: bytes, blockSize: AES.blockSize)
```
#### Working with Ciphers
##### ChaCha20
```swift
let encrypted = try ChaCha20(key: key, iv: iv).encrypt(message)
let decrypted = try ChaCha20(key: key, iv: iv).decrypt(encrypted)
```
##### Rabbit
```swift
let encrypted = try Rabbit(key: key, iv: iv).encrypt(message)
let decrypted = try Rabbit(key: key, iv: iv).decrypt(encrypted)
```
##### Blowfish
```swift
let encrypted = try Blowfish(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).encrypt(message)
let decrypted = try Blowfish(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).decrypt(encrypted)
```
##### AES
Notice regarding padding: *Manual padding of data is optional, and CryptoSwift is using PKCS7 padding by default. If you need to manually disable/enable padding, you can do this by setting parameter for __AES__ class*
Variant of AES encryption (AES-128, AES-192, AES-256) depends on given key length:
- AES-128 = 16 bytes
- AES-192 = 24 bytes
- AES-256 = 32 bytes
AES-256 example
```swift
let encryptedBytes = try AES(key: [1,2,3,...,32], blockMode: CBC(iv: [1,2,3,...,16]), padding: .pkcs7)
```
Full example:
```swift
let password: [UInt8] = Array("s33krit".utf8)
let salt: [UInt8] = Array("nacllcan".utf8)
/* Generate a key from a `password`. Optional if you already have a key */
let key = try PKCS5.PBKDF2(
password: password,
salt: salt,
iterations: 4096,
keyLength: 32, /* AES-256 */
variant: .sha256
).calculate()
/* Generate random IV value. IV is public value. Either need to generate, or get it from elsewhere */
let iv = AES.randomIV(AES.blockSize)
/* AES cryptor instance */
let aes = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7)
/* Encrypt Data */
let inputData = Data()
let encryptedBytes = try aes.encrypt(inputData.byteArray)
let encryptedData = Data(encryptedBytes)
/* Decrypt Data */
let decryptedBytes = try aes.decrypt(encryptedData.byteArray)
let decryptedData = Data(decryptedBytes)
```
###### All at once
```swift
do {
let aes = try AES(key: "keykeykeykeykeyk", iv: "drowssapdrowssap") // aes128
let ciphertext = try aes.encrypt(Array("Nullam quis risus eget urna mollis ornare vel eu leo.".utf8))
} catch { }
```
###### Incremental updates
Incremental operations use instance of Cryptor and encrypt/decrypt one part at a time, this way you can save on memory for large files.
```swift
do {
var encryptor = try AES(key: "keykeykeykeykeyk", iv: "drowssapdrowssap").makeEncryptor()
var ciphertext = Array<UInt8>()
// aggregate partial results
ciphertext += try encryptor.update(withBytes: Array("Nullam quis risus ".utf8))
ciphertext += try encryptor.update(withBytes: Array("eget urna mollis ".utf8))
ciphertext += try encryptor.update(withBytes: Array("ornare vel eu leo.".utf8))
// finish at the end
ciphertext += try encryptor.finish()
print(ciphertext.toHexString())
} catch {
print(error)
}
```
###### AES Advanced usage
```swift
let input: Array<UInt8> = [0,1,2,3,4,5,6,7,8,9]
let key: Array<UInt8> = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
let iv: Array<UInt8> = // Random bytes of `AES.blockSize` length
do {
let encrypted = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).encrypt(input)
let decrypted = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7).decrypt(encrypted)
} catch {
print(error)
}
```
AES without data padding
```swift
let input: Array<UInt8> = [0,1,2,3,4,5,6,7,8,9]
let encrypted: Array<UInt8> = try! AES(key: Array("secret0key000000".utf8), blockMode: CBC(iv: Array("0123456789012345".utf8)), padding: .noPadding).encrypt(input)
```
Using convenience extensions
```swift
let plain = Data([0x01, 0x02, 0x03])
let encrypted = try! plain.encrypt(ChaCha20(key: key, iv: iv))
let decrypted = try! encrypted.decrypt(ChaCha20(key: key, iv: iv))
```
##### AES-GCM
The result of Galois/Counter Mode (GCM) encryption is ciphertext and **authentication tag**, that is later used to decryption.
encryption
```swift
do {
// In combined mode, the authentication tag is directly appended to the encrypted message. This is usually what you want.
let gcm = GCM(iv: iv, mode: .combined)
let aes = try AES(key: key, blockMode: gcm, padding: .noPadding)
let encrypted = try aes.encrypt(plaintext)
let tag = gcm.authenticationTag
} catch {
// failed
}
```
decryption
```swift
do {
// In combined mode, the authentication tag is appended to the encrypted message. This is usually what you want.
let gcm = GCM(iv: iv, mode: .combined)
let aes = try AES(key: key, blockMode: gcm, padding: .noPadding)
return try aes.decrypt(encrypted)
} catch {
// failed
}
```
**Note**: GCM instance is not intended to be reused. So you can't use the same `GCM` instance from encoding to also perform decoding.
##### AES-CCM
The result of Counter with Cipher Block Chaining-Message Authentication Code encryption is ciphertext and **authentication tag**, that is later used to decryption.
```swift
do {
// The authentication tag is appended to the encrypted message.
let tagLength = 8
let ccm = CCM(iv: iv, tagLength: tagLength, messageLength: ciphertext.count - tagLength, additionalAuthenticatedData: data)
let aes = try AES(key: key, blockMode: ccm, padding: .noPadding)
return try aes.decrypt(encrypted)
} catch {
// failed
}
```
Check documentation or CCM specification for valid parameters for CCM.
##### AEAD
```swift
let encrypt = try AEADChaCha20Poly1305.encrypt(plaintext, key: key, iv: nonce, authenticationHeader: header)
let decrypt = try AEADChaCha20Poly1305.decrypt(ciphertext, key: key, iv: nonce, authenticationHeader: header, authenticationTag: tagArr: tag)
```
##### RSA
RSA initialization from parameters
```swift
let input: Array<UInt8> = [0,1,2,3,4,5,6,7,8,9]
let n: Array<UInt8> = // RSA modulus
let e: Array<UInt8> = // RSA public exponent
let d: Array<UInt8> = // RSA private exponent
let rsa = RSA(n: n, e: e, d: d)
do {
let encrypted = try rsa.encrypt(input)
let decrypted = try rsa.decrypt(encrypted)
} catch {
print(error)
}
```
RSA key generation
```swift
let rsa = try RSA(keySize: 2048) // This generates a modulus, public exponent and private exponent with the given size
```
RSA Encryption & Decryption Example
``` swift
// Alice Generates a Private Key
let alicesPrivateKey = try RSA(keySize: 1024)
// Alice shares her **public** key with Bob
let alicesPublicKeyData = try alicesPrivateKey.publicKeyExternalRepresentation()
// Bob receives the raw external representation of Alices public key and imports it
let bobsImportOfAlicesPublicKey = try RSA(rawRepresentation: alicesPublicKeyData)
// Bob can now encrypt a message for Alice using her public key
let message = "Hi Alice! This is Bob!"
let privateMessage = try bobsImportOfAlicesPublicKey.encrypt(message.bytes)
// This results in some encrypted output like this
// URcRwG6LfH63zOQf2w+HIllPri9Rb6hFlXbi/bh03zPl2MIIiSTjbAPqbVFmoF3RmDzFjIarIS7ZpT57a1F+OFOJjx50WYlng7dioKFS/rsuGHYnMn4csjCRF6TAqvRQcRnBueeINRRA8SLaLHX6sZuQkjIE5AoHJwgavmiv8PY=
// Bob can now send this encrypted message to Alice without worrying about people being able to read the original contents
// Alice receives the encrypted message and uses her private key to decrypt the data and recover the original message
let originalDecryptedMessage = try alicesPrivateKey.decrypt(privateMessage)
print(String(data: Data(originalDecryptedMessage), encoding: .utf8))
// "Hi Alice! This is Bob!"
```
RSA Signature & Verification Example
``` swift
// Alice Generates a Private Key
let alicesPrivateKey = try RSA(keySize: 1024)
// Alice wants to sign a message that she agrees with
let messageAliceSupports = "Hi my name is Alice!"
let alicesSignature = try alicesPrivateKey.sign(messageAliceSupports.bytes)
// Alice shares her Public key and the signature with Bob
let alicesPublicKeyData = try alicesPrivateKey.publicKeyExternalRepresentation()
// Bob receives the raw external representation of Alices Public key and imports it!
let bobsImportOfAlicesPublicKey = try RSA(rawRepresentation: alicesPublicKeyData)
// Bob can now verify that Alice signed the message using the Private key associated with her shared Public key.
let verifiedSignature = try bobsImportOfAlicesPublicKey.verify(signature: alicesSignature, for: "Hi my name is Alice!".bytes)
if verifiedSignature == true {
// Bob knows that the signature Alice provided is valid for the message and was signed using the Private key associated with Alices shared Public key.
} else {
// The signature was invalid, so either
// - the message Alice signed was different then what we expected.
// - or Alice used a Private key that isn't associated with the shared Public key that Bob has.
}
```
CryptoSwift RSA Key -> Apple's Security Framework SecKey Example
``` swift
/// Starting with a CryptoSwift RSA Key
let rsaKey = try RSA(keySize: 1024)
/// Define your Keys attributes
let attributes: [String:Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrKeyClass as String: kSecAttrKeyClassPrivate, // or kSecAttrKeyClassPublic
kSecAttrKeySizeInBits as String: 1024, // The appropriate bits
kSecAttrIsPermanent as String: false
]
var error:Unmanaged<CFError>? = nil
guard let rsaSecKey = try SecKeyCreateWithData(rsaKey.externalRepresentation() as CFData, attributes as CFDictionary, &error) else {
/// Error constructing SecKey from raw key data
return
}
/// You now have an RSA SecKey for use with Apple's Security framework
```
Apple's Security Framework SecKey -> CryptoSwift RSA Key Example
``` swift
/// Starting with a SecKey RSA Key
let rsaSecKey:SecKey
/// Copy External Representation
var externalRepError:Unmanaged<CFError>?
guard let cfdata = SecKeyCopyExternalRepresentation(rsaSecKey, &externalRepError) else {
/// Failed to copy external representation for RSA SecKey
return
}
/// Instantiate the RSA Key from the raw external representation
let rsaKey = try RSA(rawRepresentation: cfdata as Data)
/// You now have a CryptoSwift RSA Key
```
## Author
CryptoSwift is owned and maintained by [Marcin Krzyżanowski](https://www.krzyzanowskim.com)
You can follow me on Twitter at [@krzyzanowskim](https://x.com/krzyzanowskim) for project updates and releases.
# Cryptography Notice
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See https://www.wassenaar.org/ for more information.
## License
Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
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:
- 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 is required**.
- Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- This notice may not be removed or altered from any source or binary distribution.
- Redistributions of any form whatsoever must retain the following acknowledgment: 'This product includes software developed by the "Marcin Krzyzanowski" (https://krzyzanowskim.com/).'
## Changelog
See [CHANGELOG](./CHANGELOG) file.
================================================
FILE: Sources/CryptoSwift/AEAD/AEAD.swift
================================================
//
// AEAD.swift
// CryptoSwift
//
// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
//
// https://www.iana.org/assignments/aead-parameters/aead-parameters.xhtml
/// Authenticated Encryption with Associated Data (AEAD)
public protocol AEAD {
static var kLen: Int { get } // key length
static var ivRange: Range<Int> { get } // nonce length
}
extension AEAD {
static func calculateAuthenticationTag(authenticator: Authenticator, cipherText: Array<UInt8>, authenticationHeader: Array<UInt8>) throws -> Array<UInt8> {
let headerPadding = ((16 - (authenticationHeader.count & 0xf)) & 0xf)
let cipherPadding = ((16 - (cipherText.count & 0xf)) & 0xf)
var mac = authenticationHeader
mac += Array<UInt8>(repeating: 0, count: headerPadding)
mac += cipherText
mac += Array<UInt8>(repeating: 0, count: cipherPadding)
mac += UInt64(bigEndian: UInt64(authenticationHeader.count)).bytes()
mac += UInt64(bigEndian: UInt64(cipherText.count)).bytes()
return try authenticator.authenticate(mac)
}
}
================================================
FILE: Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift
================================================
//
// AEADChaCha20Poly1305.swift
// CryptoSwift
//
// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
//
// https://tools.ietf.org/html/rfc7539#section-2.8.1
/// AEAD_CHACHA20_POLY1305
public final class AEADChaCha20Poly1305: AEAD {
public static let kLen = 32 // key length
public static var ivRange = Range<Int>(12...12)
/// Authenticated encryption
public static func encrypt(_ plainText: Array<UInt8>, key: Array<UInt8>, iv: Array<UInt8>, authenticationHeader: Array<UInt8>) throws -> (cipherText: Array<UInt8>, authenticationTag: Array<UInt8>) {
let cipher = try ChaCha20(key: key, iv: iv)
return try self.encrypt(cipher: cipher, plainText, key: key, iv: iv, authenticationHeader: authenticationHeader)
}
public static func encrypt(cipher: Cipher, _ plainText: Array<UInt8>, key: Array<UInt8>, iv: Array<UInt8>, authenticationHeader: Array<UInt8>) throws -> (cipherText: Array<UInt8>, authenticationTag: Array<UInt8>) {
var polykey = Array<UInt8>(repeating: 0, count: kLen)
var toEncrypt = polykey
polykey = try cipher.encrypt(polykey)
toEncrypt += polykey
toEncrypt += plainText
let fullCipherText = try cipher.encrypt(toEncrypt)
let cipherText = Array(fullCipherText.dropFirst(64))
let tag = try calculateAuthenticationTag(authenticator: Poly1305(key: polykey), cipherText: cipherText, authenticationHeader: authenticationHeader)
return (cipherText, tag)
}
/// Authenticated decryption
public static func decrypt(_ cipherText: Array<UInt8>, key: Array<UInt8>, iv: Array<UInt8>, authenticationHeader: Array<UInt8>, authenticationTag: Array<UInt8>) throws -> (plainText: Array<UInt8>, success: Bool) {
let cipher = try ChaCha20(key: key, iv: iv)
return try self.decrypt(cipher: cipher, cipherText: cipherText, key: key, iv: iv, authenticationHeader: authenticationHeader, authenticationTag: authenticationTag)
}
static func decrypt(cipher: Cipher, cipherText: Array<UInt8>, key: Array<UInt8>, iv: Array<UInt8>, authenticationHeader: Array<UInt8>, authenticationTag: Array<UInt8>) throws -> (plainText: Array<UInt8>, success: Bool) {
let polykey = try cipher.encrypt(Array<UInt8>(repeating: 0, count: self.kLen))
let mac = try calculateAuthenticationTag(authenticator: Poly1305(key: polykey), cipherText: cipherText, authenticationHeader: authenticationHeader)
guard mac == authenticationTag else {
return (cipherText, false)
}
var toDecrypt = Array<UInt8>(reserveCapacity: cipherText.count + 64)
toDecrypt += polykey
toDecrypt += polykey
toDecrypt += cipherText
let fullPlainText = try cipher.decrypt(toDecrypt)
let plainText = Array(fullPlainText.dropFirst(64))
return (plainText, true)
}
}
================================================
FILE: Sources/CryptoSwift/AEAD/AEADXChaCha20Poly1305.swift
================================================
//
// CryptoSwift
//
// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
import Foundation
/// This class implements the XChaCha20-Poly1305 Authenticated Encryption with
/// Associated Data (AEAD_XCHACHA20_POLY1305) construction, providing both encryption and authentication.
///
/// For more information about the XChaCha20-Poly1305 algorithm, refer to the IETF draft: https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha
public final class AEADXChaCha20Poly1305: AEAD {
/// The key length (in bytes) required for the XChaCha20 cipher (32 bytes).
public static let kLen = 32 // key length
/// The valid range of initialization vector lengths for the XChaCha20 cipher (12 bytes).
public static var ivRange = Range<Int>(12...12)
/// Encrypts the given plaintext using the XChaCha20 cipher and generates an authentication
/// tag using the Poly1305 MAC.
///
/// - Parameters:
/// - plainText: The plaintext to be encrypted.
/// - key: The encryption key.
/// - iv: The initialization vector.
/// - authenticationHeader: The authentication header.
/// - Returns: A tuple containing the ciphertext and authentication tag.
/// - Throws: An error if encryption fails.
public static func encrypt(
_ plainText: Array<UInt8>,
key: Array<UInt8>,
iv: Array<UInt8>,
authenticationHeader: Array<UInt8>
) throws -> (cipherText: Array<UInt8>, authenticationTag: Array<UInt8>) {
try AEADChaCha20Poly1305.encrypt(
cipher: XChaCha20(key: key, iv: iv),
plainText,
key: key,
iv: iv,
authenticationHeader: authenticationHeader
)
}
/// Decrypts the given ciphertext using the XChaCha20 cipher and verifies the authentication
/// tag using the Poly1305 MAC.
///
/// - Parameters:
/// - cipherText: The ciphertext to be decrypted.
/// - key: The decryption key.
/// - iv: The initialization vector.
/// - authenticationHeader: The authentication header.
/// - authenticationTag: The authentication tag.
/// - Returns: A tuple containing the decrypted plaintext and a boolean value indicating
/// the success of the decryption and authentication process.
/// - Throws: An error if decryption fails.
public static func decrypt(
_ cipherText: Array<UInt8>,
key: Array<UInt8>,
iv: Array<UInt8>,
authenticationHeader: Array<UInt8>,
authenticationTag: Array<UInt8>
) throws -> (plainText: Array<UInt8>, success: Bool) {
try AEADChaCha20Poly1305.decrypt(
cipher: XChaCha20(key: key, iv: iv),
cipherText: cipherText,
key: key,
iv: iv,
authenticationHeader: authenticationHeader,
authenticationTag: authenticationTag
)
}
}
================================================
FILE: Sources/CryptoSwift/AES.Cryptors.swift
================================================
//
// CryptoSwift
//
// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
// MARK: Cryptors
extension AES: Cryptors {
@inlinable
public func makeEncryptor() throws -> Cryptor & Updatable {
let blockSize = blockMode.customBlockSize ?? AES.blockSize
let worker = try blockMode.worker(blockSize: blockSize, cipherOperation: encrypt, encryptionOperation: encrypt)
if worker is StreamModeWorker {
return try StreamEncryptor(blockSize: blockSize, padding: padding, worker)
}
return try BlockEncryptor(blockSize: blockSize, padding: padding, worker)
}
@inlinable
public func makeDecryptor() throws -> Cryptor & Updatable {
let blockSize = blockMode.customBlockSize ?? AES.blockSize
let cipherOperation: CipherOperationOnBlock = blockMode.options.contains(.useEncryptToDecrypt) == true ? encrypt : decrypt
let worker = try blockMode.worker(blockSize: blockSize, cipherOperation: cipherOperation, encryptionOperation: encrypt)
if worker is StreamModeWorker {
return try StreamDecryptor(blockSize: blockSize, padding: padding, worker)
}
return try BlockDecryptor(blockSize: blockSize, padding: padding, worker)
}
}
================================================
FILE: Sources/CryptoSwift/AES.swift
================================================
//
// CryptoSwift
//
// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>
// 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:
//
// - 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 is required.
// - Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
// - This notice may not be removed or altered from any source or binary distribution.
//
// Implementation of Gladman algorithm http://www.gladman.me.uk/AES
//
/// The Advanced Encryption Standard (AES)
public final class AES: BlockCipher {
public enum Error: Swift.Error {
/// Invalid key
case invalidKeySize
/// Data padding is required
case dataPaddingRequired
/// Invalid Data
case invalidData
}
public enum Variant: Int {
case aes128 = 1, aes192, aes256
var Nk: Int { // Nk words
[4, 6, 8][self.rawValue - 1]
}
var Nb: Int { // Nb words
4
}
var Nr: Int { // Nr
self.Nk + 6
}
}
@usableFromInline
internal let variantNr: Int
@usableFromInline
internal let variantNb: Int
@usableFromInline
internal let variantNk: Int
public static let blockSize: Int = 16 // 128 /8
public let keySize: Int
/// AES Variant
public let variant: Variant
// Parameters
let key: Key
@usableFromInline
let blockMode: BlockMode
@usableFromInline
let padding: Padding
//
@usableFromInline
internal lazy var expandedKey: Array<Array<UInt32>> = self.expandKey(self.key, variant: self.variant)
@usableFromInline
internal lazy var expandedKeyInv: Array<Array<UInt32>> = self.expandKeyInv(self.key, variant: self.variant)
private lazy var sBoxes: (sBox: Array<UInt32>, invSBox: Array<UInt32>) = self.calculateSBox()
private lazy var sBox: Array<UInt32> = self.sBoxes.sBox
private lazy var sBoxInv: Array<UInt32> = self.sBoxes.invSBox
// Parameters for Linear Congruence Generators
private static let Rcon: Array<UInt8> = [
0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a,
0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39,
0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8,
0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef,
0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b,
0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3,
0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35,
0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04,
0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63,
0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d
]
@usableFromInline static let T0: Array<UInt32> = [0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, 0xdf2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, 0x50303060, 0x3010102, 0xa96767ce, 0x7d2b2b56, 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, 0x15fafaef, 0xeb5959b2, 0xc947478e, 0xbf0f0fb, 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b, 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, 0x5a36366c, 0x413f3f7e, 0x2f7f7f5, 0x4fcccc83, 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x8f1f1f9, 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, 0xc040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, 0x28181830, 0xa1969637, 0xf05050a, 0xb59a9a2f, 0x907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, 0xf55353a6, 0x68d1d1b9, 0x0, 0x2cededc1, 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, 0xcf45458a, 0x10f9f9e9, 0x6020204, 0x817f7ffe, 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, 0xad92923f, 0xbc9d9d21, 0x48383870, 0x4f5f5f1, 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, 0x30101020, 0x1affffe5, 0xef3f3fd, 0x6dd2d2bf, 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b, 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, 0xdb494992, 0xa06060c, 0x6c242448, 0xe45c5cb8, 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2, 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, 0xb46c6cd8, 0xfa5656ac, 0x7f4f4f3, 0x25eaeacf, 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, 0xd8484890, 0x5030306, 0x1f6f6f7, 0x120e0e1c, 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c]
@usableFromInline static let T0_INV: Array<UInt32> = [0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b, 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5, 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5, 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, 0x2752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295, 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e, 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927, 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52, 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566, 0x728ebb2, 0x3c2b52f, 0x9a7bc586, 0xa50837d3, 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e, 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4, 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4, 0x39ec830b, 0xaaef6040, 0x69f715e, 0x51106ebd, 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, 0xb58d5491, 0x55dc471, 0x6fd40604, 0xff155060, 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967, 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879, 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x0, 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36, 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624, 0xb1670a0c, 0xfe75793, 0xd296eeb4, 0x9e919b1b, 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, 0xaba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, 0xb0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3, 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b, 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177, 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947, 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, 0xe49d3a2c, 0xd927850, 0x9bcc5f6a, 0x62467e54, 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382, 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, 0x97826cd, 0xf418596e, 0x1b79aec, 0xa89a4f83, 0x656e95e6, 0x7ee6ffaa, 0x8cfbc21, 0xe6e815ef, 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029, 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, 0x4a9804f1, 0xf7daec41, 0xe50cd7f, 0x2ff69117, 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4, 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546, 0x4ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb, 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a, 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773, 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, 0x72c31d16, 0xc25e2bc, 0x8b493c28, 0x41950dff, 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664, 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0]
@usableFromInline static let T1: Array<UInt32> = [0x6363c6a5, 0x7c7cf884, 0x7777ee99, 0x7b7bf68d, 0xf2f2ff0d, 0x6b6bd6bd, 0x6f6fdeb1, 0xc5c59154, 0x30306050, 0x1010203, 0x6767cea9, 0x2b2b567d, 0xfefee719, 0xd7d7b562, 0xabab4de6, 0x7676ec9a, 0xcaca8f45, 0x82821f9d, 0xc9c98940, 0x7d7dfa87, 0xfafaef15, 0x5959b2eb, 0x47478ec9, 0xf0f0fb0b, 0xadad41ec, 0xd4d4b367, 0xa2a25ffd, 0xafaf45ea, 0x9c9c23bf, 0xa4a453f7, 0x7272e496, 0xc0c09b5b, 0xb7b775c2, 0xfdfde11c, 0x93933dae, 0x26264c6a, 0x36366c5a, 0x3f3f7e41, 0xf7f7f502, 0xcccc834f, 0x3434685c, 0xa5a551f4, 0xe5e5d134, 0xf1f1f908, 0x7171e293, 0xd8d8ab73, 0x31316253, 0x15152a3f, 0x404080c, 0xc7c79552, 0x23234665, 0xc3c39d5e, 0x18183028, 0x969637a1, 0x5050a0f, 0x9a9a2fb5, 0x7070e09, 0x12122436, 0x80801b9b, 0xe2e2df3d, 0xebebcd26, 0x27274e69, 0xb2b27fcd, 0x7575ea9f, 0x909121b, 0x83831d9e, 0x2c2c5874, 0x1a1a342e, 0x1b1b362d, 0x6e6edcb2, 0x5a5ab4ee, 0xa0a05bfb, 0x5252a4f6, 0x3b3b764d, 0xd6d6b761, 0xb3b37dce, 0x2929527b, 0xe3e3dd3e, 0x2f2f5e71, 0x84841397, 0x5353a6f5, 0xd1d1b968, 0x0, 0xededc12c, 0x20204060, 0xfcfce31f, 0xb1b179c8, 0x5b5bb6ed, 0x6a6ad4be, 0xcbcb8d46, 0xbebe67d9, 0x3939724b, 0x4a4a94de, 0x4c4c98d4, 0x5858b0e8, 0xcfcf854a, 0xd0d0bb6b, 0xefefc52a, 0xaaaa4fe5, 0xfbfbed16, 0x434386c5, 0x4d4d9ad7, 0x33336655, 0x85851194, 0x45458acf, 0xf9f9e910, 0x2020406, 0x7f7ffe81, 0x5050a0f0, 0x3c3c7844, 0x9f9f25ba, 0xa8a84be3, 0x5151a2f3, 0xa3a35dfe, 0x404080c0, 0x8f8f058a, 0x92923fad, 0x9d9d21bc, 0x38387048, 0xf5f5f104, 0xbcbc63df, 0xb6b677c1, 0xdadaaf75, 0x21214263, 0x10102030, 0xffffe51a, 0xf3f3fd0e, 0xd2d2bf6d, 0xcdcd814c, 0xc0c1814, 0x13132635, 0xececc32f, 0x5f5fbee1, 0x979735a2, 0x444488cc, 0x17172e39, 0xc4c49357, 0xa7a755f2, 0x7e7efc82, 0x3d3d7a47, 0x6464c8ac, 0x5d5dbae7, 0x1919322b, 0x7373e695, 0x6060c0a0, 0x81811998, 0x4f4f9ed1, 0xdcdca37f, 0x22224466, 0x2a2a547e, 0x90903bab, 0x88880b83, 0x46468cca, 0xeeeec729, 0xb8b86bd3, 0x1414283c, 0xdedea779, 0x5e5ebce2, 0xb0b161d, 0xdbdbad76, 0xe0e0db3b, 0x32326456, 0x3a3a744e, 0xa0a141e, 0x494992db, 0x6060c0a, 0x2424486c, 0x5c5cb8e4, 0xc2c29f5d, 0xd3d3bd6e, 0xacac43ef, 0x6262c4a6, 0x919139a8, 0x959531a4, 0xe4e4d337, 0x7979f28b, 0xe7e7d532, 0xc8c88b43, 0x37376e59, 0x6d6ddab7, 0x8d8d018c, 0xd5d5b164, 0x4e4e9cd2, 0xa9a949e0, 0x6c6cd8b4, 0x5656acfa, 0xf4f4f307, 0xeaeacf25, 0x6565caaf, 0x7a7af48e, 0xaeae47e9, 0x8081018, 0xbaba6fd5, 0x7878f088, 0x25254a6f, 0x2e2e5c72, 0x1c1c3824, 0xa6a657f1, 0xb4b473c7, 0xc6c69751, 0xe8e8cb23, 0xdddda17c, 0x7474e89c, 0x1f1f3e21, 0x4b4b96dd, 0xbdbd61dc, 0x8b8b0d86, 0x8a8a0f85, 0x7070e090, 0x3e3e7c42, 0xb5b571c4, 0x6666ccaa, 0x484890d8, 0x3030605, 0xf6f6f701, 0xe0e1c12, 0x6161c2a3, 0x35356a5f, 0x5757aef9, 0xb9b969d0, 0x86861791, 0xc1c19958, 0x1d1d3a27, 0x9e9e27b9, 0xe1e1d938, 0xf8f8eb13, 0x98982bb3, 0x11112233, 0x6969d2bb, 0xd9d9a970, 0x8e8e0789, 0x949433a7, 0x9b9b2db6, 0x1e1e3c22, 0x87871592, 0xe9e9c920, 0xcece8749, 0x5555aaff, 0x28285078, 0xdfdfa57a, 0x8c8c038f, 0xa1a159f8, 0x89890980, 0xd0d1a17, 0xbfbf65da, 0xe6e6d731, 0x424284c6, 0x6868d0b8, 0x414182c3, 0x999929b0, 0x2d2d5a77, 0xf0f1e11, 0xb0b07bcb, 0x5454a8fc, 0xbbbb6dd6, 0x16162c3a]
@usableFromInline static let T1_INV: Array<UInt32> = [0xa7f45150, 0x65417e53, 0xa4171ac3, 0x5e273a96, 0x6bab3bcb, 0x459d1ff1, 0x58faacab, 0x3e34b93, 0xfa302055, 0x6d76adf6, 0x76cc8891, 0x4c02f525, 0xd7e54ffc, 0xc
gitextract_0h7qiraw/
├── .editorconfig
├── .github/
│ ├── CODEOWNERS
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── android.yml
│ ├── linux.yml
│ └── macos.yml
├── .gitignore
├── .mailmap
├── .spi.yml
├── .swiftformat
├── CHANGELOG
├── CNAME
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTORS.txt
├── CryptoSwift-TestHostApp/
│ ├── AppDelegate.swift
│ └── Info.plist
├── CryptoSwift.podspec
├── CryptoSwift.xcodeproj/
│ ├── project.pbxproj
│ ├── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ ├── CryptoSwift.xcscmblueprint
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata/
│ ├── IDETemplateMacros.plist
│ └── xcschemes/
│ ├── CryptoSwift-TestHostApp.xcscheme
│ ├── CryptoSwift.xcscheme
│ ├── Tests.xcscheme
│ ├── TestsPerformance-Mac.xcscheme
│ └── TestsPerformance-iOS.xcscheme
├── Info.plist
├── LICENSE
├── Makefile
├── Package.swift
├── README.md
├── Sources/
│ ├── CryptoSwift/
│ │ ├── AEAD/
│ │ │ ├── AEAD.swift
│ │ │ ├── AEADChaCha20Poly1305.swift
│ │ │ └── AEADXChaCha20Poly1305.swift
│ │ ├── AES.Cryptors.swift
│ │ ├── AES.swift
│ │ ├── ASN1/
│ │ │ ├── ASN1.swift
│ │ │ ├── ASN1Decoder.swift
│ │ │ ├── ASN1Encoder.swift
│ │ │ └── ASN1Scanner.swift
│ │ ├── Array+Extension.swift
│ │ ├── Authenticator.swift
│ │ ├── BatchedCollection.swift
│ │ ├── Bit.swift
│ │ ├── BlockCipher.swift
│ │ ├── BlockDecryptor.swift
│ │ ├── BlockEncryptor.swift
│ │ ├── BlockMode/
│ │ │ ├── BlockMode.swift
│ │ │ ├── BlockModeOptions.swift
│ │ │ ├── CBC.swift
│ │ │ ├── CCM.swift
│ │ │ ├── CFB.swift
│ │ │ ├── CTR.swift
│ │ │ ├── CipherModeWorker.swift
│ │ │ ├── ECB.swift
│ │ │ ├── GCM.swift
│ │ │ ├── OCB.swift
│ │ │ ├── OFB.swift
│ │ │ └── PCBC.swift
│ │ ├── Blowfish.swift
│ │ ├── CBCMAC.swift
│ │ ├── CMAC.swift
│ │ ├── CS_BigInt/
│ │ │ ├── Addition.swift
│ │ │ ├── BigInt.swift
│ │ │ ├── BigUInt.swift
│ │ │ ├── BitwiseOps.swift
│ │ │ ├── CS.swift
│ │ │ ├── Codable.swift
│ │ │ ├── Comparable.swift
│ │ │ ├── DataConversion.swift
│ │ │ ├── Division.swift
│ │ │ ├── Exponentiation.swift
│ │ │ ├── FloatingPointConversion.swift
│ │ │ ├── GCD.swift
│ │ │ ├── Hashable.swift
│ │ │ ├── IntegerConversion.swift
│ │ │ ├── Multiplication.swift
│ │ │ ├── PrimeTest.swift
│ │ │ ├── Random.swift
│ │ │ ├── Shifts.swift
│ │ │ ├── SquareRoot.swift
│ │ │ ├── Strideable.swift
│ │ │ ├── StringConversion.swift
│ │ │ ├── Subtraction.swift
│ │ │ └── WordsAndBits.swift
│ │ ├── ChaCha20.swift
│ │ ├── Checksum.swift
│ │ ├── Cipher.swift
│ │ ├── Collection+Extension.swift
│ │ ├── CompactMap.swift
│ │ ├── Cryptor.swift
│ │ ├── Cryptors.swift
│ │ ├── Digest.swift
│ │ ├── DigestType.swift
│ │ ├── Foundation/
│ │ │ ├── AES+Foundation.swift
│ │ │ ├── Array+Foundation.swift
│ │ │ ├── Blowfish+Foundation.swift
│ │ │ ├── ChaCha20+Foundation.swift
│ │ │ ├── Data+Extension.swift
│ │ │ ├── HMAC+Foundation.swift
│ │ │ ├── Rabbit+Foundation.swift
│ │ │ ├── String+FoundationExtension.swift
│ │ │ ├── Utils+Foundation.swift
│ │ │ └── XChaCha20+Foundation.swift
│ │ ├── Generics.swift
│ │ ├── HKDF.swift
│ │ ├── HMAC.swift
│ │ ├── ISO10126Padding.swift
│ │ ├── ISO78164Padding.swift
│ │ ├── Int+Extension.swift
│ │ ├── MD5.swift
│ │ ├── NoPadding.swift
│ │ ├── Operators.swift
│ │ ├── PEM/
│ │ │ └── DER.swift
│ │ ├── PKCS/
│ │ │ ├── PBKDF1.swift
│ │ │ ├── PBKDF2.swift
│ │ │ ├── PKCS1v15.swift
│ │ │ ├── PKCS5.swift
│ │ │ ├── PKCS7.swift
│ │ │ └── PKCS7Padding.swift
│ │ ├── Padding.swift
│ │ ├── Poly1305.swift
│ │ ├── PrivacyInfo.xcprivacy
│ │ ├── RSA/
│ │ │ ├── RSA+Cipher.swift
│ │ │ ├── RSA+Signature.swift
│ │ │ └── RSA.swift
│ │ ├── Rabbit.swift
│ │ ├── SHA1.swift
│ │ ├── SHA2.swift
│ │ ├── SHA3.swift
│ │ ├── Scrypt.swift
│ │ ├── SecureBytes.swift
│ │ ├── Signature.swift
│ │ ├── StreamDecryptor.swift
│ │ ├── StreamEncryptor.swift
│ │ ├── String+Extension.swift
│ │ ├── UInt128.swift
│ │ ├── UInt16+Extension.swift
│ │ ├── UInt32+Extension.swift
│ │ ├── UInt64+Extension.swift
│ │ ├── UInt8+Extension.swift
│ │ ├── Updatable.swift
│ │ ├── Utils.swift
│ │ ├── XChaCha20.swift
│ │ └── ZeroPadding.swift
│ └── CryptoSwift.h
├── Tests/
│ ├── CryptoSwiftTests/
│ │ ├── AESCCMTests.swift
│ │ ├── AESOCBTests.swift
│ │ ├── AESTests.swift
│ │ ├── AESTestsPerf.swift
│ │ ├── ASN1Tests.swift
│ │ ├── Access.swift
│ │ ├── BlowfishTests.swift
│ │ ├── Bridging.h
│ │ ├── CBCMacTests.swift
│ │ ├── CMACTests.swift
│ │ ├── ChaCha20Poly1305Tests.swift
│ │ ├── ChaCha20Tests.swift
│ │ ├── ChaCha20TestsPerf.swift
│ │ ├── DigestTests.swift
│ │ ├── DigestTestsPerf.swift
│ │ ├── Error+Extension.swift
│ │ ├── ExtensionsTest.swift
│ │ ├── ExtensionsTestPerf.swift
│ │ ├── HKDFTests.swift
│ │ ├── HMACTests.swift
│ │ ├── PBKDF.swift
│ │ ├── PBKDFPerf.swift
│ │ ├── PaddingTests.swift
│ │ ├── Poly1305Tests.swift
│ │ ├── RSASecKeyTests.swift
│ │ ├── RSATests.swift
│ │ ├── RabbitTests.swift
│ │ ├── RabbitTestsPerf.swift
│ │ ├── SHATestsPerf.swift
│ │ ├── ScryptTests.swift
│ │ ├── ScryptTestsPerf.swift
│ │ ├── SignatureVerificationTests.swift
│ │ ├── XCTestManifests.swift
│ │ ├── XChaCha20Poly1305Tests.swift
│ │ └── XChaCha20Tests.swift
│ ├── LinuxMain.swift
│ └── TestsPerformance/
│ └── XCTestManifests.swift
├── _config.yml
├── config/
│ ├── CryptoSwift-Debug.xcconfig
│ ├── CryptoSwift-Release.xcconfig
│ ├── CryptoSwift-Shared.xcconfig
│ ├── CryptoSwift-Test.xcconfig
│ ├── CryptoSwift-TestHostApp-Shared.xcconfig
│ ├── CryptoSwift-TestHostApp-Test.xcconfig
│ ├── Project-Debug.xcconfig
│ ├── Project-Release.xcconfig
│ ├── Project-Shared.xcconfig
│ ├── Tests-Shared.xcconfig
│ └── Tests-Test.xcconfig
└── scripts/
├── build-framework.sh
├── generate-contributors-list.sh
└── swiftformat.sh
Condensed preview — 203 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,325K chars).
[
{
"path": ".editorconfig",
"chars": 144,
"preview": "[*]\nend_of_line = lf\ninsert_final_newline = true\n\n[*.swift]\ncharset = utf-8\nindent_style = space\nindent_size = 2\n\n[Makef"
},
{
"path": ".github/CODEOWNERS",
"chars": 23,
"preview": "* @krzyzanowskim\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 38,
"preview": "github: [krzyzanowskim, NathanFallet]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 129,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\n\n---\n\n**Describe the bug**\n\n\n**Reproduce**\nSteps to repro"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 212,
"preview": "Fixes #\n\nChecklist:\n- [ ] Correct file headers (see CONTRIBUTING.md).\n- [ ] Formatted with [SwiftFormat](https://github."
},
{
"path": ".github/workflows/android.yml",
"chars": 302,
"preview": "name: Android\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n\n runs-on: u"
},
{
"path": ".github/workflows/linux.yml",
"chars": 478,
"preview": "name: Linux\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n\n runs-on: ubu"
},
{
"path": ".github/workflows/macos.yml",
"chars": 601,
"preview": "name: macOS\n\non:\n push:\n branches: [ main ]\n pull_request:\n branches: [ main ]\n\njobs:\n build:\n\n runs-on: mac"
},
{
"path": ".gitignore",
"chars": 341,
"preview": "### Xcode ###\n.build/\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspect"
},
{
"path": ".mailmap",
"chars": 491,
"preview": "Marcin Krzyzanowski <marcin.krzyzanowski@gmail.com> <758033+krzyzanowskim@users.noreply.github.com>\nMarcin Krzyzanowski "
},
{
"path": ".spi.yml",
"chars": 73,
"preview": "version: 1\nbuilder:\n configs:\n - documentation_targets: [CryptoSwift]"
},
{
"path": ".swiftformat",
"chars": 1540,
"preview": "\n--exclude .build, Carthage, DerivedData, .git, Tests/LinuxMain.swift, Tests/CryptoSwiftTests/XCTestManifests.swift, Tes"
},
{
"path": "CHANGELOG",
"chars": 10822,
"preview": "1.9.0\n- Renamed bytes to byteArray in Data extension to avoid conflict with Swift 6.2 by @mluisbrown in #1076 and #1077\n"
},
{
"path": "CNAME",
"chars": 15,
"preview": "cryptoswift.io\n"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3219,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 1309,
"preview": "By submitting a pull request, you represent that you have the right to license\nyour contribution to Marcin Krzyżanowski "
},
{
"path": "CONTRIBUTORS.txt",
"chars": 5403,
"preview": "For the purpose of tracking copyright, this is the list of individuals and\norganizations who have contributed source cod"
},
{
"path": "CryptoSwift-TestHostApp/AppDelegate.swift",
"chars": 2876,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "CryptoSwift-TestHostApp/Info.plist",
"chars": 1383,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "CryptoSwift.podspec",
"chars": 1155,
"preview": "Pod::Spec.new do |s|\n s.name = \"CryptoSwift\"\n s.version = \"1.9.0\"\n s.source = { :git => \"https://g"
},
{
"path": "CryptoSwift.xcodeproj/project.pbxproj",
"chars": 92265,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "CryptoSwift.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 160,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:../Tests/Crypto"
},
{
"path": "CryptoSwift.xcodeproj/project.xcworkspace/xcshareddata/CryptoSwift.xcscmblueprint",
"chars": 0,
"preview": ""
},
{
"path": "CryptoSwift.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "CryptoSwift.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 264,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "CryptoSwift.xcodeproj/xcshareddata/IDETemplateMacros.plist",
"chars": 1160,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "CryptoSwift.xcodeproj/xcshareddata/xcschemes/CryptoSwift-TestHostApp.xcscheme",
"chars": 3337,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "CryptoSwift.xcodeproj/xcshareddata/xcschemes/CryptoSwift.xcscheme",
"chars": 5534,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "CryptoSwift.xcodeproj/xcshareddata/xcschemes/Tests.xcscheme",
"chars": 1818,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "CryptoSwift.xcodeproj/xcshareddata/xcschemes/TestsPerformance-Mac.xcscheme",
"chars": 1829,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "CryptoSwift.xcodeproj/xcshareddata/xcschemes/TestsPerformance-iOS.xcscheme",
"chars": 1826,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1400\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "Info.plist",
"chars": 823,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "LICENSE",
"chars": 1044,
"preview": "Copyright (C) 2014-3099 Marcin Krzyżanowski <marcin.krzyzanowski@gmail.com>\nThis software is provided 'as-is', without a"
},
{
"path": "Makefile",
"chars": 226,
"preview": ".PHONY: frameworks\n\nCWD := $(abspath $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))))\n\nframeworks:\n\t$(CW"
},
{
"path": "Package.swift",
"chars": 544,
"preview": "// swift-tools-version:5.6\n\nimport PackageDescription\n\nlet package = Package(\n name: \"CryptoSwift\",\n platforms: [\n "
},
{
"path": "README.md",
"chars": 27986,
"preview": "[ 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This"
},
{
"path": "Sources/CryptoSwift/AEAD/AEADChaCha20Poly1305.swift",
"chars": 3577,
"preview": "//\n// AEADChaCha20Poly1305.swift\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowsk"
},
{
"path": "Sources/CryptoSwift/AEAD/AEADXChaCha20Poly1305.swift",
"chars": 3539,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/AES.Cryptors.swift",
"chars": 2017,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/AES.swift",
"chars": 56440,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/ASN1/ASN1.swift",
"chars": 3347,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/ASN1/ASN1Decoder.swift",
"chars": 4310,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/ASN1/ASN1Encoder.swift",
"chars": 3454,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/ASN1/ASN1Scanner.swift",
"chars": 4135,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/Array+Extension.swift",
"chars": 4241,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Authenticator.swift",
"chars": 1112,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BatchedCollection.swift",
"chars": 2648,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Bit.swift",
"chars": 1060,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockCipher.swift",
"chars": 985,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockDecryptor.swift",
"chars": 3892,
"preview": "// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provi"
},
{
"path": "Sources/CryptoSwift/BlockEncryptor.swift",
"chars": 2385,
"preview": "// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provi"
},
{
"path": "Sources/CryptoSwift/BlockMode/BlockMode.swift",
"chars": 1355,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/BlockModeOptions.swift",
"chars": 1403,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/CBC.swift",
"chars": 2666,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/CCM.swift",
"chars": 13927,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/CFB.swift",
"chars": 3788,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/CTR.swift",
"chars": 5128,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/CipherModeWorker.swift",
"chars": 2662,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/ECB.swift",
"chars": 2026,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/GCM.swift",
"chars": 12806,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/OCB.swift",
"chars": 12711,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/BlockMode/OFB.swift",
"chars": 2647,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/BlockMode/PCBC.swift",
"chars": 2707,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Blowfish.swift",
"chars": 22152,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/CBCMAC.swift",
"chars": 1475,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/CMAC.swift",
"chars": 3876,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Addition.swift",
"chars": 3983,
"preview": "//\n// Addition.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly Lő"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/BigInt.swift",
"chars": 2439,
"preview": "//\n// CS.BigInt.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2015-12-27.\n// Copyright © 2016-2017 Károly L"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/BigUInt.swift",
"chars": 13046,
"preview": "//\n// BigUInt.swift\n// BigInt\n//\n// Created by Károly Lőrentey on 2015-12-26.\n// Copyright © 2016-2017 Károly Lőrent"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/BitwiseOps.swift",
"chars": 4112,
"preview": "//\n// BitwiseOps.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly "
},
{
"path": "Sources/CryptoSwift/CS_BigInt/CS.swift",
"chars": 1147,
"preview": "// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provi"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Codable.swift",
"chars": 5413,
"preview": "//\n// Codable.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2017-8-11.\n// Copyright © 2016-2017 Károly Lőre"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Comparable.swift",
"chars": 1810,
"preview": "//\n// Comparable.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly "
},
{
"path": "Sources/CryptoSwift/CS_BigInt/DataConversion.swift",
"chars": 6294,
"preview": "//\n// DataConversion.swift\n// BigInt\n//\n// Created by Károly Lőrentey on 2016-01-04.\n// Copyright © 2016-2017 Károly"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Division.swift",
"chars": 16087,
"preview": "//\n// Division.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly Lő"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Exponentiation.swift",
"chars": 5077,
"preview": "//\n// Exponentiation.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Kár"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/FloatingPointConversion.swift",
"chars": 2711,
"preview": "//\n// FloatingPointConversion.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2017-08-11.\n// Copyright © 2016"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/GCD.swift",
"chars": 3084,
"preview": "//\n// GCD.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly Lőrente"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Hashable.swift",
"chars": 580,
"preview": "//\n// Hashable.swift\n// BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly Lőren"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/IntegerConversion.swift",
"chars": 2466,
"preview": "//\n// IntegerConversion.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2017-08-11.\n// Copyright © 2016-2017 "
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Multiplication.swift",
"chars": 5636,
"preview": "//\n// Multiplication.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Kár"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/PrimeTest.swift",
"chars": 5754,
"preview": "//\n// PrimeTest.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-04.\n// Copyright © 2016-2017 Károly L"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Random.swift",
"chars": 4578,
"preview": "//\n// Random.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-04.\n// Copyright © 2016-2017 Károly Lőre"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Shifts.swift",
"chars": 6598,
"preview": "//\n// Shifts.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly Lőre"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/SquareRoot.swift",
"chars": 1188,
"preview": "//\n// SquareRoot.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly "
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Strideable.swift",
"chars": 1072,
"preview": "//\n// Strideable.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2017-08-11.\n// Copyright © 2016-2017 Károly "
},
{
"path": "Sources/CryptoSwift/CS_BigInt/StringConversion.swift",
"chars": 8796,
"preview": "//\n// StringConversion.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 K"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/Subtraction.swift",
"chars": 6612,
"preview": "//\n// Subtraction.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2016-01-03.\n// Copyright © 2016-2017 Károly"
},
{
"path": "Sources/CryptoSwift/CS_BigInt/WordsAndBits.swift",
"chars": 6193,
"preview": "//\n// WordsAndBits.swift\n// CS.BigInt\n//\n// Created by Károly Lőrentey on 2017-08-11.\n// Copyright © 2016-2017 Károl"
},
{
"path": "Sources/CryptoSwift/ChaCha20.swift",
"chars": 10849,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Checksum.swift",
"chars": 12733,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Cipher.swift",
"chars": 1767,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Collection+Extension.swift",
"chars": 2195,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/CompactMap.swift",
"chars": 1209,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Cryptor.swift",
"chars": 1135,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Cryptors.swift",
"chars": 1797,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Digest.swift",
"chars": 2866,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/DigestType.swift",
"chars": 1007,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/AES+Foundation.swift",
"chars": 1511,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/Array+Foundation.swift",
"chars": 1370,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/Blowfish+Foundation.swift",
"chars": 1169,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/ChaCha20+Foundation.swift",
"chars": 1070,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/Data+Extension.swift",
"chars": 2758,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/HMAC+Foundation.swift",
"chars": 1084,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/Rabbit+Foundation.swift",
"chars": 1155,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/String+FoundationExtension.swift",
"chars": 1641,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/Utils+Foundation.swift",
"chars": 1174,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Foundation/XChaCha20+Foundation.swift",
"chars": 1457,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/Generics.swift",
"chars": 1894,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/HKDF.swift",
"chars": 3329,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/HMAC.swift",
"chars": 3897,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/ISO10126Padding.swift",
"chars": 2025,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/ISO78164Padding.swift",
"chars": 1607,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/Int+Extension.swift",
"chars": 1480,
"preview": "//\n// CryptoSwift\n//\n// Created by Marcin Krzyzanowski on 12/08/14.\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <m"
},
{
"path": "Sources/CryptoSwift/MD5.swift",
"chars": 5915,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/NoPadding.swift",
"chars": 1143,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Operators.swift",
"chars": 1528,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PEM/DER.swift",
"chars": 4413,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/PKCS/PBKDF1.swift",
"chars": 3078,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PKCS/PBKDF2.swift",
"chars": 4127,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PKCS/PKCS1v15.swift",
"chars": 3619,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PKCS/PKCS5.swift",
"chars": 1110,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PKCS/PKCS7.swift",
"chars": 973,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PKCS/PKCS7Padding.swift",
"chars": 1937,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Padding.swift",
"chars": 2912,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Poly1305.swift",
"chars": 4549,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/PrivacyInfo.xcprivacy",
"chars": 373,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Sources/CryptoSwift/RSA/RSA+Cipher.swift",
"chars": 5620,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/RSA/RSA+Signature.swift",
"chars": 13964,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/RSA/RSA.swift",
"chars": 16811,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Rabbit.swift",
"chars": 7247,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/SHA1.swift",
"chars": 4876,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/SHA2.swift",
"chars": 13261,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/SHA3.swift",
"chars": 9579,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Scrypt.swift",
"chars": 11242,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/SecureBytes.swift",
"chars": 2985,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Signature.swift",
"chars": 2875,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/StreamDecryptor.swift",
"chars": 3410,
"preview": "// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provi"
},
{
"path": "Sources/CryptoSwift/StreamEncryptor.swift",
"chars": 2532,
"preview": "// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provi"
},
{
"path": "Sources/CryptoSwift/String+Extension.swift",
"chars": 3014,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/UInt128.swift",
"chars": 2902,
"preview": "//\n// UInt128.swift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is "
},
{
"path": "Sources/CryptoSwift/UInt16+Extension.swift",
"chars": 1547,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/UInt32+Extension.swift",
"chars": 1976,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/UInt64+Extension.swift",
"chars": 2046,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/UInt8+Extension.swift",
"chars": 2262,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Updatable.swift",
"chars": 4249,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/Utils.swift",
"chars": 4059,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift/XChaCha20.swift",
"chars": 8278,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Sources/CryptoSwift/ZeroPadding.swift",
"chars": 1657,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Sources/CryptoSwift.h",
"chars": 373,
"preview": "//\n// CryptoSwift.h\n// CryptoSwift\n//\n// Created by Sam Soffes on 11/29/15.\n// Copyright © 2015 Marcin Krzyzanowski."
},
{
"path": "Tests/CryptoSwiftTests/AESCCMTests.swift",
"chars": 97180,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/AESOCBTests.swift",
"chars": 7926,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Tests/CryptoSwiftTests/AESTests.swift",
"chars": 40002,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/AESTestsPerf.swift",
"chars": 2261,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ASN1Tests.swift",
"chars": 21958,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2021 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/Access.swift",
"chars": 8841,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/BlowfishTests.swift",
"chars": 10632,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/Bridging.h",
"chars": 1024,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/CBCMacTests.swift",
"chars": 3761,
"preview": "//// CryptoSwift\n//\n// Copyright (C) 2014-__YEAR__ Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is"
},
{
"path": "Tests/CryptoSwiftTests/CMACTests.swift",
"chars": 8206,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ChaCha20Poly1305Tests.swift",
"chars": 5057,
"preview": "//\n// ChaCha20Poly1305Tests.swift\n// CryptoSwiftTests\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyz"
},
{
"path": "Tests/CryptoSwiftTests/ChaCha20Tests.swift",
"chars": 7890,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ChaCha20TestsPerf.swift",
"chars": 1880,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/DigestTests.swift",
"chars": 25162,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/DigestTestsPerf.swift",
"chars": 2390,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/Error+Extension.swift",
"chars": 1049,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ExtensionsTest.swift",
"chars": 4534,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ExtensionsTestPerf.swift",
"chars": 1438,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/HKDFTests.swift",
"chars": 5585,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/HMACTests.swift",
"chars": 4043,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/PBKDF.swift",
"chars": 5009,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/PBKDFPerf.swift",
"chars": 1401,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/PaddingTests.swift",
"chars": 11483,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/Poly1305Tests.swift",
"chars": 3752,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/RSASecKeyTests.swift",
"chars": 25548,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2021 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/RSATests.swift",
"chars": 204670,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/RabbitTests.swift",
"chars": 5650,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/RabbitTestsPerf.swift",
"chars": 1542,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/SHATestsPerf.swift",
"chars": 2422,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2017 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ScryptTests.swift",
"chars": 3605,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/ScryptTestsPerf.swift",
"chars": 1523,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) 2014-2025 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pr"
},
{
"path": "Tests/CryptoSwiftTests/SignatureVerificationTests.swift",
"chars": 6296,
"preview": "//// CryptoSwift\n//\n// Copyright (C) 2014-2023 Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is pro"
},
{
"path": "Tests/CryptoSwiftTests/XCTestManifests.swift",
"chars": 15062,
"preview": "#if !canImport(ObjectiveC)\nimport XCTest\n\nextension AESCCMTests {\n // DO NOT MODIFY: This is autogenerated, use:\n "
},
{
"path": "Tests/CryptoSwiftTests/XChaCha20Poly1305Tests.swift",
"chars": 2944,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Tests/CryptoSwiftTests/XChaCha20Tests.swift",
"chars": 6202,
"preview": "//\n// CryptoSwift\n//\n// Copyright (C) Marcin Krzyżanowski <marcin@krzyzanowskim.com>\n// This software is provided 'as"
},
{
"path": "Tests/LinuxMain.swift",
"chars": 127,
"preview": "import XCTest\n\nimport CryptoSwiftTests\n\nvar tests = [XCTestCaseEntry]()\ntests += CryptoSwiftTests.__allTests()\n\nXCTMain("
},
{
"path": "Tests/TestsPerformance/XCTestManifests.swift",
"chars": 482,
"preview": "#if !canImport(ObjectiveC)\nimport XCTest\n\nextension TestsPerformance {\n // DO NOT MODIFY: This is autogenerated, use:"
},
{
"path": "_config.yml",
"chars": 28,
"preview": "theme: jekyll-theme-minimal\n"
},
{
"path": "config/CryptoSwift-Debug.xcconfig",
"chars": 221,
"preview": "#include \"CryptoSwift-Shared.xcconfig\"\n\nOTHER_SWIFT_FLAGS = $(inherited) -Xfrontend -debug-time-function-bodies\nSWIFT_CO"
},
{
"path": "config/CryptoSwift-Release.xcconfig",
"chars": 294,
"preview": "#include \"CryptoSwift-Shared.xcconfig\"\n\nBITCODE_GENERATION_MODE = bitcode\nCLANG_USE_OPTIMIZATION_PROFILE = NO\nGCC_GENERA"
},
{
"path": "config/CryptoSwift-Shared.xcconfig",
"chars": 553,
"preview": "CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES\nAPPLICATION_EXTENSION_API_ONLY = YES\nDYLIB_COMPATIBILITY_VERSION = 1\nDY"
},
{
"path": "config/CryptoSwift-Test.xcconfig",
"chars": 236,
"preview": "#include \"CryptoSwift-Shared.xcconfig\"\n\nENABLE_TESTABILITY = YES\nSTRIP_INSTALLED_PRODUCT = NO\n\n// Disable for tests. htt"
},
{
"path": "config/CryptoSwift-TestHostApp-Shared.xcconfig",
"chars": 2484,
"preview": "//\n// CryptoSwift-TestHostApp-Shared.xcconfig\n//\n// Generated by BuildSettingExtractor on 02/04/2018\n// https://github.c"
},
{
"path": "config/CryptoSwift-TestHostApp-Test.xcconfig",
"chars": 364,
"preview": "//\n// CryptoSwift-TestHostApp-Test.xcconfig\n//\n// Generated by BuildSettingExtractor on 02/04/2018\n// https://github.com"
},
{
"path": "config/Project-Debug.xcconfig",
"chars": 256,
"preview": "#include \"Project-Shared.xcconfig\"\n\nCOPY_PHASE_STRIP = NO\nGCC_DYNAMIC_NO_PIC = NO\nGCC_PREPROCESSOR_DEFINITIONS = $(inher"
},
{
"path": "config/Project-Release.xcconfig",
"chars": 264,
"preview": "#include \"Project-Shared.xcconfig\"\n\nCODE_SIGN_IDENTITY[sdk=macosx*] = Developer ID Application\n\nCLANG_USE_OPTIMIZATION_P"
},
{
"path": "config/Project-Shared.xcconfig",
"chars": 2609,
"preview": "MARKETING_VERSION = 1.9.0\n\nSUPPORTED_PLATFORMS = iphonesimulator iphoneos macosx appletvos watchos appletvsimulator watc"
},
{
"path": "config/Tests-Shared.xcconfig",
"chars": 627,
"preview": "DEVELOPMENT_TEAM =\nCODE_SIGN_IDENTITY =\nCODE_SIGN_STYLE = Manual\nCODE_SIGNING_REQUIRED = NO\n\nHEADER_SEARCH_PATHS = $(inh"
},
{
"path": "config/Tests-Test.xcconfig",
"chars": 380,
"preview": "#include \"Tests-Shared.xcconfig\"\n\nCOPY_PHASE_STRIP = NO\nENABLE_NS_ASSERTIONS = NO\nENABLE_TESTABILITY = YES\nGCC_OPTIMIZAT"
}
]
// ... and 3 more files (download for full content)
About this extraction
This page contains the full source code of the krzyzanowskim/CryptoSwift GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 203 files (1.2 MB), approximately 498.4k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.